3.8. Mesures sur un système de gestion de fichiers à base de FAT

On dispose d'un ordinateur personnel équipé de deux disques durs identiques d'environ 50 Mo. chacun. Les caractéristiques annoncées par son fabricant sont 800 cylindres, 4 têtes, 34 secteurs par piste, 512 octets par secteur, 3600 tours par minute, et 25 ms de temps moyen de positionnement. La gestion des fichiers est analogue à celle du système MS-DOS. Sur chacun des disques, on a défini une partition d'environ 15 Mo. Rappelons que (voir §11.1):
Lors d'une copie du volume G contenant 587 fichiers répartis sur 44 répertoires et occupant un total de 10.5 Mo. sur le volume H entièrement vide, on a constaté un temps total particulièrement long de 53 minutes. Les voyants montrent une activité négligeable du disque sur lequel se fait la lecture, et très importante de celui sur lequel se fait l'écriture. Le but du problème est de comprendre cette anomalie.
A.1- Combien d'entrées comporte une FAT? Combien de secteurs occupe un exemplaire de FAT?
A.2- Décrire brièvement les étapes de l'ouverture d'un fichier qui n'existe pas et qui doit donc être créé.
A.3- Décrire brièvement les étapes de l'écriture d'un tampon de mémoire centrale de 1 Mo dans un fichier ouvert, qui vient d'être créé (un tel tampon est compatible avec la taille de mémoire centrale qui est de 4 Mo).
B- Après avoir sauvegardé le contenu de G, on vide complètement G et H et on crée un fichier F de 1 Mo sur le volume G. On recopie ce fichier F de G sur H, et on appelle C cette copie. Le programme de copie, dans ce cas, a la forme suivante:
ouvrir (f, "G:\F"); /* ouverture du fichier F sur G */
lire (f, Tloc, 1048576); /* lecture de 1 Mo */
fermer (f);
ouvrir (f, "H:\C"); /* ouverture/création fichier C sur H */
écrire (f, Tloc, 1048576); /* écriture de 1 Mo */
fermer (f);
On constate, au cours de cette expérience, que les durées respectives de la lecture et de l'écriture sont sensiblement égales, soit 6 secondes chacune, et la durée totale de l'opération est donc de 12 secondes.
B.1- Etant donné la technique utilisée pour l'allocation d'espace aux fichiers, peut-on affirmer que le fichier origine et sa copie sont dans des secteurs consécutifs?
B.2- Pensez-vous que le système en tire profit pour lancer les lectures et écritures disque sur plusieurs secteurs consécutifs?
C- On répète la copie de F sur H, dans des fichiers différents (C1, C2, C3, etc...), en mesurant à chaque fois la durée de cette copie. On constate que chaque copie dure environ 1 seconde de plus que la précédente, c'est-à-dire que la création de la copie C1 dure 13 secondes, celle de C2 dure 14 secondes, celle de C3 dure 15 secondes, etc... Comme on lit toujours le même fichier F sur G, cette augmentation est en fait une augmentation du temps de création et d'écriture de la copie.
C.1- Déterminer ce qui dans la création et l'écriture peut expliquer cet allongement.
C.2- En déduire que l'on peut évaluer le temps en millisecondes d'une copie d'un fichier de L Ko. sur un disque dont T blocs sont déjà occupés par la formule: D = T + 12 * L.
D- En supposant que les 587 fichiers évoqués dans l'introduction sont tous de même taille, et en négligeant le temps de création des 44 répertoires, déduire de C.2 la durée de leur copie de G sur H. A-t-on une explication satisfaisante de l'anomalie évoquée au début?
Solution de l'exercice 3.8

3.8.1. Question A

3.8.1.1. Question A.1

Une partition est de 220 cylindres, chaque cylindre ayant 4 têtes, les pistes ayant 34 secteurs, cela donne donc 220 * 4 * 34 = 29920 secteurs. Les blocs étant de 2 secteurs, il y a donc 14960 blocs allouables. En fait il y en a un peu moins, puisque les deux exemplaires de FAT vont en occuper quelques uns. Un numéro de bloc a besoin de 14 bits, donc 2 octets, et chaque exemplaire de FAT occupe 29920 octets, ce qui demande 59 secteurs. On peut donc voir qu'il n'y a en fait que 14900 blocs allouables.

3.8.1.2. Question A.2

Lors de l'ouverture d'un fichier qui n'existe pas et qui doit être créé, le système exécute les étapes suivantes:

3.8.1.3. Question A.3

Lors de l'écriture d'un tampon de mémoire centrale de 1 Mo dans un fichier ouvert, qui vient d'être créé, il faut d'abord allouer 1024 blocs au fichier puisqu'il est vide. Le système exécute les étapes suivantes:
De plus, deux remarques peuvent être faites. D'une part, au cours de la recherche des blocs libres, il peut être nécessaire de lire les secteurs de la FAT s'ils ne sont pas résidents en mémoire. D'autre part, le système peut recopier l'entrée du répertoire correspondant au fichier sur disque, puisqu'elle est modifiée (premier bloc et longueur du fichier), ou au contraire attendre que le fichier soit fermé pour le faire, puisque c'est à ce moment seulement que l'on connaît la longueur définitive du fichier.

3.8.2. Question B

3.8.2.1. Question B.1

Puisque le fichier F a été créé sur G vide, toutes les entrées de la FAT étaient libres au moment de l'écriture du contenu de F. L'algorithme précédent d'allocation donnera 1024 blocs successifs. Le fichier F occupera donc bien des secteurs consécutifs. Lors de la copie il en est de même du fichier C créé sur H initialement vide.

3.8.2.2. Question B.2

Les durées respectives de la lecture et de l'écriture étant sensiblement égales, la lecture demande 6 secondes pour 2048 secteurs, soit en moyenne 2.9 ms par secteur. Si le système lançait les lectures et écritures un secteur à la fois, comme ils sont consécutifs, le secteur suivant aurait commencé à passer sous les têtes au moment du lancement de l'opération le concernant, obligeant d'attendre un tour complet pour le lire, soit 16.7 ms. Il est certain donc que le système lance la lecture de plusieurs secteurs à la fois. Si maintenant le système demande la lecture de n secteurs à la fois, cela entraînera la perte d'un tour tous les n secteurs, c'est-à-dire, que la lecture de ces n secteurs demandera 16.7 + n * (16.7 / 34) ms. On a donc l'inéquation:
16.7 + n * (16.7 / 34) n * 2.9
On en déduit que n est au moins égal à 7. Le système a certainement tenu compte du fait que les données sont dans des secteurs consécutifs.

3.8.3. Question C

3.8.3.1. Question C.1

Considérons les étapes de la création du fichier. Dans notre cas, toutes les copies sont mises dans le répertoire racine, dont le nombre d'entrées est faible. On peut donc penser que les opérations suivantes sont indépendantes de l'occupation du volume: localisation du volume, localisation du dernier répertoire, création de l'entrée du répertoire pour ce fichier, réécriture du secteur du répertoire. La recherche du nom du fichier dans le répertoire est effectivement un peu plus longue à chaque fois, puisqu'il y a une entrée supplémentaire. Cependant, il serait surprenant que cela entraîne un allongement de une seconde par entrée.
Considérons maintenant les étapes de l'écriture d'un tampon de 1 Mo. Lors de la recherche à partir du début de la FAT du premier bloc libre, il faudra parcourir 1024 entrées occupées supplémentaires à chaque fois. Une fois ce premier bloc trouvé, les autres seront immédiatement derrière, comme lors de l'écriture de la copie C. La réécriture des secteurs de FAT modifiés prendra toujours le même temps, puisqu'il s'agit de réécrire, dans chaque exemplaire de FAT, au plus 5 secteurs consécutifs, pour les 1024 entrées successives modifiées (5 parce que la première entrée n'est pas en début de secteur). Enfin, l'écriture du contenu du tampon dans les 1024 blocs alloués, c'est-à-dire 2048 secteurs consécutifs devrait prendre le même temps si ce n'est le mouvement de bras pour se positionner sur le premier secteur, mais cela devrait prendre environ 25 ms environ.
En conclusion, deux opérations paraissent dépendre du nombre de copies qui ont déjà été faites:
Manifestement c'est cette dernière opération qui est la cause de l'allongement.

3.8.3.2. Question C.2

La question précédente montre que ce système parcourt, en une seconde, 1024 entrées de la FAT lors d'une recherche de premier bloc libre, ce qui donne environ 1 ms par bloc occupé. Si T blocs sont déjà occupés sur un disque, la recherche du premier bloc libre lors de la copie d'un fichier demandera T ms. Par ailleurs, la copie d'un fichier de 1 Mo sur un volume vide demande 12 secondes, donc environ 12 ms par Ko à copier. On obtient bien:
D = T + 12 * L

3.8.4. Question D

Les 587 fichiers de l'introduction occupent 10.5 Mo. On en déduit donc une taille moyenne de 10.5 * 1024 / 587 = 18.3 Ko par fichier. Si lors de la copie du premier fichier, l'espace sur H est entièrement libre, lors de la copie du ième fichier, il y a déjà i - 1 fichiers de 18.3 Ko sur H, occupant 18.3 * (i - 1) blocs. La copie de ce fichier demande donc, d'après C.2,
Di = 18.3 * (i - 1) + 12 * 18.3 = 18.3 * (i + 11) ms
La copie des 587 fichiers demandera donc:



La durée totale estimée est donc d'environ 54.6 minutes, ce qui est à 3% près la durée mesurée. On peut donc penser que l'on a une explication satisfaisante de l'anomalie évoquée au début de l'énoncé.