• Aucun résultat trouvé

Représentation de l'espace libre

8.4.1. Notion de quantum

Les opérations élémentaires sur les disques doivent se faire par un nombre entier de secteurs. Il est normal que les secteurs soient entièrement alloués à un unique objet externe. Cependant, on peut noter qu'un disque de 20 Mo structuré en secteurs de 512 octets, en comporte 40000, alors qu'un disque de 5 Go structuré en secteurs de 4096 octets, en comporte 1.2 millions. Devant une aussi grande diversité, et de telles valeurs, il est nécessaire de définir ce que l'on appelle le quantum d'allocation qui est la plus petite unité d'espace qui peut être alloué lors d'une demande. L'espace est ainsi découpé en unités de même taille, constituées de secteurs consécutifs, ce que nous avons déjà appelé des blocs (rappelons que ces blocs sont parfois appelés des clusters).

La valeur du quantum a deux conséquences:

La perte d'espace. L'espace effectivement nécessaire à un objet peut se mesurer en nombre de

ses enregistrements logiques, ou plus généralement, en nombre effectif d'octets qu'occupe sa représentation. L'espace qui lui est alloué se mesure en nombre de quanta qu'il a reçu. Comme il reçoit un nombre entier de quanta, le dernier reçu n'est que partiellement occupé. Ceci induit une perte d'espace que l'on peut évaluer à 1/2 quantum par objet existant sur le disque. Pour un nombre donné d'objets, la perte sera d'autant plus grande que le quantum sera plus important. • Le nombre d'unités allouables. Pour un disque de N octets, et un quantum de q octets, le nombre

d'unités allouables est N/q. Il s'ensuit que, plus le quantum est petit, plus le nombre d'unités allouables est grand, ce qui a, en général, pour conséquence une augmentation de la taille de la représentation de l'espace libre, et de la durée d'exécution de l'algorithme d'allocation.

Pour les systèmes utilisant une allocation par zone de taille variable, une demande doit être exprimée en donnant le nombre de quanta d'espace contigu. Le quantum peut être une unité de base imposée par le système, et connue de l'utilisateur. Il s'ensuit alors que le nombre de quanta d'une unité de disque dépend du disque lui-même. Le système doit alors avoir un algorithme d'allocation qui en tienne compte. À l'opposé, certains systèmes imposent un nombre maximum de quanta quelle que soit la taille du support. Le quantum varie alors d'un disque à l'autre. Pour éviter que l'utilisateur ait à se préoccuper de cette taille, on fixe un quantum de base, et il exprime alors ses besoins en donnant le nombre de quanta de base qu'il désire. Le système déterminera alors le nombre de quanta de l'unité support qui donne une taille supérieure ou égale à ce nombre. L'utilisateur se verra ainsi alloué un espace supérieur ou égal à celui qu'il a demandé.

Environnement externe

- 76 -

Par exemple, si on fixe le nombre maximum de quanta à 100 000, un disque de 256 Mo peut avoir 64 000 quanta de 4 Ko, et un disque de 5 Go peut avoir 78 000 quanta de 64 Ko. Le quantum de base pourrait être fixé à 4 Ko. Un utilisateur qui en veut 10, obtiendrait effectivement 10 quanta, soit 40 Ko, sur le disque de 256 Mo, et obtiendrait 1 quantum de 64 Ko sur celui de 5 Go. Il va sans dire que, dans tous les cas, l'objet peut utiliser la totalité de l'espace alloué. Ainsi dans le deuxième cas, si on a une implantation avec extension, cela veut dire que l'objet aura moins d'extensions. Le nombre maximum de quanta est également influencé par l'identification de chaque quantum. Ainsi, la FAT dans le cas de MSDOS, ou HFS dans le cas de MacOS limitaient à 16 bits cette identification, et donc interdisaient d'avoir plus de 65 536 quanta sur un disque, ce qui n'était pas un handicap pour les petits disques, mais l'est devenu avec les disques actuels. Pour pallier cet inconvénient, Microsoft a construit NTFS, et Apple HFS+.

Pour les systèmes utilisant une allocation par blocs individuels, le quantum se confond avec la taille du bloc. Pour l'utilisateur, la taille, et donc la valeur d'un quantum importe peu, puisqu'il n'exprime directement aucun besoin d'allocation, les allocations étant faites automatiquement lors des accès. Le quantum peut même dépendre du disque, et non pas être imposé par le système.

8.4.2. Représentation par table de bits

Plusieurs méthodes sont utilisées pour représenter l'espace libre. Il faut en fait savoir quelles sont les différentes unités d'allocation de un quantum, ou blocs, qui sont libres. La première consiste à utiliser une table de bits indicée par les numéros de blocs, et précisant leur état libre ou occupé. L'algorithme d'allocation consiste à parcourir cette table pour rechercher une entrée, ou plusieurs consécutives, ayant l'état libre. Au lieu de partir du début de la table, on peut considérer que l'on a une table circulaire, et commencer sur un numéro quelconque correspondant à un numéro de bloc au voisinage duquel on cherche à faire l'allocation de façon à minimiser ultérieurement les mouvements de bras.

En voici trois exemples, dans le cas d'implantation par blocs individuels:

• Minix, système voisin d'Unix sur micro-ordinateur écrit pour l'enseignement de système par

Andrew Tanenbaum et son équipe, utilise une telle table de bits, et commence la recherche sur le numéro du premier bloc alloué à l'objet externe. NTFS utilise également cette méthode.

• Linux utilise également une table de bits, mais pour améliorer l'efficacité des accès, découpe le

disque en groupes, chaque groupe ayant sa propre table de bits. Le système cherche à allouer les blocs prioritairement dans le groupe où est déjà situé l'objet externe, lui assurant ainsi une certaine localité.

• MS-DOS fusionne la table de bits avec la FAT dont nous avons déjà parlé. Lorsqu'un bloc est

libre, l'entrée de la FAT qui lui correspond reçoit une valeur particulière (0). Lors d'une allocation, le système recherche une entrée ayant une valeur nulle, au voisinage du dernier bloc courant de l'objet externe concerné.

La méthode est également utilisable pour l'allocation d'une zone de p blocs. On recherche le premier bit à LIBRE, et on regarde s'il est suivi d'au moins p bits à LIBRE. Si ce n'est pas le cas, on

recommence au delà. Voici l'algorithme:

i := 0; trouvé := faux; k := 0; { k = nombre de bits LIBRE trouvés successifs }

tant que i < N et non trouvé faire si état [i] = LIBRE alors

si k = 0 alors j := i; { repére le début } finsi;

k := k + 1; trouvé := k = p; { on en a trouvé p successifs }

sinon k := 0; finsi;

i := i + 1;

fait; { si trouvé alors allouer de j à j + p - 1 }

Pour améliorer cette recherche, certains systèmes complètent la table de bits par un liste partielle de zones libres contiguës. On ne recherche dans la table que si on n'a pas trouvé satisfaction dans cette liste.

Implantation des objets externes

- 77 -

8.4.3. Représentation par liste des zones libres

La deuxième méthode consiste à avoir une ou plusieurs listes des zones libres, avec leur longueur. Il en existe de nombreuses variantes, suivant la façon dont les zones sont ordonnées dans la liste par tailles croissantes ou par adresses croissantes. On peut aussi éclater la liste en plusieurs listes, chacune d'elle correspondant à une taille donnée. Nous ne décrirons cette méthode que dans un cas particulier simple, le cas lié à l'implantation par blocs individuels, car alors toutes les zones peuvent être ramenées à des blocs individuels, c'est-à-dire des zones d'une seule taille.

Elle est souvent utilisée dans les systèmes Unix. Pour chaque disque, le système dispose d'une petite liste de ce type en mémoire centrale. L'allocation consiste à allouer le premier bloc de la liste. La libération d'un bloc consiste à le remettre en tête de la liste. Lorsqu'elle devient trop importante, l'un des blocs est extrait de la liste, et on y range une partie de la liste. Ces blocs de liste de blocs libres sont eux-mêmes chaînés entre eux. Lorsque la liste en mémoire centrale devient trop petite, on la complète avec celle contenue dans le premier bloc de la liste des blocs libres (figure 8.6). Cette méthode ne permet pas de regrouper un objet sur des blocs voisins sur disque, mais permet une allocation/libération immédiate, tout en ayant un nombre quelconque d'unités d'allocation. Si beaucoup de blocs sont libres, cette liste est répartie dans des blocs libres eux-mêmes. Lorsqu'il y en a peu, la liste occupe peu de place sur disque.

TETE LIBRES

mémoire centrale blocs sur disque

Fig. 8.6. Représentation des listes de blocs libres.

8.5. Conclusion

L'espace disque peut être linéarisé par les numéros virtuels de secteur.

Les secteurs de l'espace appartenant à un objet peuvent recevoir un numéro logique propre à l'objet. La représentation de l'espace alloué à l'objet doit permettre de transformer ces numéros logiques en numéros virtuels.

L'allocation par zone consiste à allouer des secteurs contigus. Elle présente l'inconvénient de ne pas toujours être possible, bien que l'espace libre soit suffisant.

L'implantation séquentielle d'un objet consiste à l'implanter dans des secteurs contigus, en utilisant l'allocation par zone. Pour permettre les rallongements, on peut utiliser des extensions, chacune d’elles étant constituée également de secteurs contigus. Le nombre d'extensions est en général faible et borné.

L'allocation par blocs de taille fixe consiste à découper l'espace en blocs, qui sont tous constitués du même nombre de secteurs, et qui sont alloués individuellement. L'avantage de l'allocation par blocs est qu'elle est impossible uniquement lorsque tout l'espace est occupé.

L'implantation par blocs peut être obtenue en chaînant entre eux les blocs d'un même objet externe, ce qui peut être inefficace pour les accès aléatoires. Elle peut encore être obtenue par une table qui fait correspondre aux numéros logiques de blocs le numéro virtuel de celui qui a été alloué à cet endroit. La taille de cette table peut être adaptée à la taille de l'objet en utilisant plusieurs niveaux.

Le quantum d'allocation est la plus petite quantité d'espace qui peut être allouée lors d'une demande. Si elle est petite, le nombre d'unités différentes est important. Si elle est grande, cela induit une perte d'espace.

Environnement externe

- 78 -

Le quantum peut être fixe pour un système, ou dépendre du type de disque. Dans ce dernier cas, l'utilisateur exprime ses besoins en quanta de base et le système en déduit le nombre de quanta du disque qui est nécessaire.

L'espace libre peut être représenté soit par une table de bits indiquant l'état libre ou occupé de chaque unité individuelle soit par des listes de zones libres. Ces deux représentations sont utilisables pour les deux types d'algorithmes d'allocation.

- 79 -

9

La désignation des objets externes

Nous avons dit précédemment que l'accès à un objet externe dans un programme se faisait par l'intermédiaire d'un fichier logique, point de vue du programmeur, qui devait être relié à l'exécution avec un tel objet externe. L'établissement du lien proprement dit est réalisé par l'opération d'ouverture du fichier. Les paramètres de cette opération doivent permettre de localiser l'objet externe, et d'en trouver les caractéristiques.