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):
- Une partition de MS-DOS est une portion de
disque dur constituée d'un ensemble de cylindres contigus (ici 220
cylindres), et structurée en volume. Les deux partitions ont reçu
comme nom de volume G et H.
- L'implantation des
objets sur le volume utilise la technique des blocs chaînés,
à l'aide d'une File Allocation Table (FAT). Les blocs ou
clusters sont ici constitués de 2 secteurs.
- Pour des raisons de sécurité,
cette table existe en deux exemplaires en début de partition.
- Les objets externes du volume sont
organisés en utilisant une arborescence de répertoires.
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:
- Localisation du volume, permettant ici de savoir
quel est le périphérique concerné, et sur quels cylindres
se trouve la partition.
- Parcours des noms
successifs de la chaîne d'accès pour descendre dans l'arborescence
jusqu'à localiser le dernier
répertoire.
- Recherche du nom du fichier
dans le répertoire, et en même temps de la première
entrée libre du répertoire. Puisque le fichier n'existe pas, le
nom n'est pas trouvé.
- Création de
l'entrée du répertoire pour ce fichier. Il n'y a pas d'allocation
d'espace au fichier qui est vide, c'est-à-dire, que le numéro de
son premier bloc indique EOF. Cependant, si
la première entrée libre trouvée est dans un emplacement
non alloué du répertoire, il peut y avoir allocation d'un bloc au
répertoire.
- Réécriture sur
le disque du secteur du répertoire qui contient cette
entrée.
- Conservation du descripteur du
fichier vide dans une structure de données relative au flot, et
délivrance d'un “identifiant” de cette structure comme
résultat de
l'opération.
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:
- Recherche à partir du début de la
FAT du premier bloc libre, et mise de son numéro dans le descripteur du
fichier.
- Recherche ensuite du bloc libre suivant,
chaînage de ce bloc au précédent dans la FAT, et
répétition de l'opération jusqu'à avoir
alloué les 1024 blocs.
- Recopie des parties
de FAT modifiées dans le premier exemplaire, puis le
second exemplaire
sur disque. - Écriture du contenu du tampon
dans les 1024 blocs ainsi alloués.
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:
- la recherche dans le répertoire racine,
qui demande à parcourir une entrée supplémentaire dans ce
répertoire,
- la recherche du premier bloc
libre dans la FAT, qui demande à parcourir 1024 entrées
supplémentaires de la FAT.
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é.