• Aucun résultat trouvé

8.2 L’interface Java/JDBC

9.1.2 Fonctionnement d’un disque

Une disque est une surface circulaire magnétisée capable d’enregistrer des informations numériques. La surface magnétisée peut être située d’un seul côté (!! simple face"") ou des deux côtés (!! simple face"") du disque.

Les disques sont divisés en secteurs, un secteur constituant la plus petite surface d’adressage. En d’autres termes, on sait lire ou écrire des zones débutant sur un secteur et couvrant un nombre entier de secteurs. La taille d’un secteur est le plus souvent de 512K.

Dispositif

La petite information stockée sur un disque est un bit qui peut valoir 0 ou 1. Les bits sont groupés par 8 pour former des octets, et une suite d’octets forme un cercle ou piste sur la surface du disque.

Un disque est entraîné dans un mouvement de rotation régulier par un axe. Une tête de lecture (deux si le disque est double-face) vient se positionner sur une des pistes du disque et y lit ou écrit les données. Le nombre minimal d’octets lus par une tête de lecture est physiquement défini par la taille d’un secteur (en général 512K). Cela étant le système d’exploitation peut choisir, au moment de l’initialisation du disque, de fixer une unité d’entrée/sortie supérieure à la taille d’un secteur, et multiple de cette dernière. On obtient des blocs, dont la taille est typiquement 512K (un secteur), 1024K (deux secteurs) ou 4096K (huit secteurs). Chaque piste est donc divisée en blocs (ou pages) qui constituent l’unité d’échange entre le disque et la mémoire principale. tête de lecture déplacement des têtes bras piste cylindre disque disque disque rotation axe Contrôleur données blocs FIG. 9.2 – Un disque magnétique

Toute lecture ou toute écriture sur les disques s’effectue par blocs. Même si la lecture ne concerne qu’une donnée occupant 4 octets, tout le bloc contenant ces 4 octets sera transmis en mémoire centrale. Cette caractéristique est fondamentale pour l’organisation des données sur le disque. Un des objectifs du SGBD est de faire en sorte que quand il est nécessaire de lire un bloc de 4096 octets pour accéder à un entier de 4 octets, les 4094 octets constituant le reste du bloc ont de grandes chances d’être utiles à court terme et se trouveront donc déjà chargée en mémoire centrale quand le système en aura besoin. Cette motivation est à la base du mécanisme de regroupement qui fonde, notamment, les structures d’index et de hachage.

La tête de lecture n’est pas entraînée dans le mouvement de rotation. Elle se déplace dans un plan fixe qui lui permet de se rapprocher ou de s’éloigner de l’axe de rotation des disques, et d’accéder à une des pistes. Pour limiter le coût de l’ensemble de ce dispositif et augmenter la capacité de stockage, les disques sont empilés et partagent le même axe de rotation (voir figure 9.2). Il y a autant de têtes de lectures que de disques (deux fois plus si les disques sont à double face) et toutes les têtes sont positionnées solidairement dans leur plan de déplacement. À tout moment, les pistes accessibles par les têtes sont donc les mêmes pour tous les disques de la pile, ce qui constitue une contrainte dont il faut savoir tenir compte quand on cherche à optimiser le placement des données.

L’ensemble des pistes accessibles à un moment donné constitue le cylindre. La notion de cylindre correspond donc à toutes les données disponibles sans avoir besoin de déplacer les têtes de lecture.

Enfin le dernier élément du dispositif est le contrôleur qui sert d’interface avec le système d’exploita- tion. Le contrôleur reçoit du système des demandes de lecture ou d’écriture, et les transforme en mouve- ments appropriés des têtes de lectures, comme expliqué ci-dessous.

Accès aux données

Un disque est une mémoire à accès direct. Contrairement à une bande magnétique par exemple, il est possible d’accéder à un information située n’importe où sur le disque sans avoir à parcourir séquen- tiellement tout le support. L’accès direct est fondé sur une adresse donnée à chaque bloc au moment de l’initialisation du disque par le système d’exploitation. Cette adresse est généralement composée des trois éléments suivants :

1. le numéro du disque dans la pile ou le numéro de la surface si les disques sont à double-face ; 2. le numéro de la piste ;

3. le numéro du bloc sur la piste.

La lecture d’un bloc, étant donné son adresse, se décompose en trois étapes : – positionnement de la tête de lecture sur la piste contenant le bloc ;

– rotation du disque pour attendre que le bloc passe sous la tête de lecture (rappelons que les têtes sont fixe, c’est le disque qui tourne) ;

– transfert du bloc.

La durée d’une opération de lecture est donc la somme des temps consacrés à chacune des trois opéra- tions, ces temps étant désignés respectivement par les termes délai de positionnement, délai de latence et

temps de transfert. Le temps de transfert est négligeable pour un bloc, mais peu devenir important quand

des milliers de blocs doivent être lus. Le mécanisme d’écriture est à peu près semblable à la lecture, mais peu prendre un peu plus de temps si le contrôleur vérifie que l’écriture s’est faite correctement.

Le tableau 9.2 donne les spécifications d’un disque en 2001, telles qu’on peut les trouver sur le site de n’importe quel constructeur (ici Seagate, www.seagate.com). Les chiffres donnent un ordre de grandeur pour les performances d’un disque, étant bien entendu que les disques destinés aux serveurs sont beau- coup plus performants que ceux destinés aux ordinateurs personnels. Le modèle donné en exemple dans le tableau 9.2 appartient au mileu de gamme.

Le disque comprend 17 783 secteurs de 512K chacun, la multiplication des deux chiffres donnant bien la capacité totale de 9,1 Go. Les secteurs étant répartis sur 3 disques double-face, ll y a donc$<;=;?>A@CB1@A>8D?EGF HJI

EA@

I

Caractéristique Performance

Capacité 9,1 Go

Taux de transfert 80 Mo par seconde

Cache 1 Mo

Nbre de disques 3

Nbre de têtes 6

Nombre total secteurs (512K) 17 783 438

Nombre de cylindres 9 772

Vitesse de rotation 10 000 rpm (rotations par minute)

Délai de latence En moyenne 3 ms

Temps de positionnement moyen 5.2 ms Déplacement de piste à piste 0.6 ms

TAB. 9.2 – Spécifications du disque Cheetah 18LP (source www.seagate.com)

Le nombre de secteurs par piste n’est pas constant, car les pistes situées près de l’axe sont bien entendu beaucoup plus petite que elles situées près du bord du disque. On ne peut, à partir des spécifications, que calculer le nombre moyen de secteurs par piste, qui est égal à HCI

EA@ I &AE8D I ;1; H

FK@A&A@ . On peut donc estimer qu’une piste stocke en moyenne@A&1@MLONP$

H

F%$<NAN HAI1H

octets. Ce chiffre donne le nombre d’octets qui peuvent être lus sans délai de latence ni délai de positionnement.

Ce qu’il faut surtout noter, c’est que les temps donnés pour le temps de latence et le délai de rotation ne sont que des moyennes. Dans le meilleur des cas, les têtes sont positionnées sur la bonne piste, et le bloc à lire est celui qui arrive sous la tête de lecture. Le bloc peut alors être lu directement, avec un délai réduit au temps de transfert.

Ce temps de transfert peut être considéré comme négligeable dans le cas d’un bloc unique, comme le montre le raisonnement qui suit, basé sur les performances du tableau 9.2. Le disque effectue 10000 rotations par minute, ce qui correspond à 166,66 rotations par seconde, soit une rotation toutes les 0,006 secondes (6 ms). C’est le temps requis pour lire une piste entièrement. Cela donne également le temps moyen de latence de 3 ms.

Pour lire un bloc sur une piste, il faudrait tenir compte du nombre exact de secteurs, qui varie en fonction de la position exacte. En prenant comme valeur moyenne 303 secteurs par piste, et une taille de bloc égale à 4 096 soit huit secteurs, on obtient le temps de transfert moyen pour un bloc :

EAQORSLT> @A&A@

FU&PV/$/EWQXR

Le temps de transfert ne devient significatif que quand on lit plusieurs blocs consécutivement. Notez quand même que les valeurs obtenues restent beaucoup plus élevées que les temps d’accès en mémoire principale qui s’évaluent en nanosecondes.

Dans une situation moyenne, la tête n’est pas sur la bonne piste, et une fois la tête positionnée (temps moyen 5.2 ms), il faut attendre une rotation partielle pour obtenir le bloc (temps moyen 3 ms). Le temps de lecture est alors en moyenne de 8.2 ms, si on ignore le temps de transfert.