|
Chapitre 2 : Système de fichiers
|
Les blocs du disque
- Les fichiers de données sur les disques se répartissent dans des blocs de taille fixe correspondant à des unités d’entrées sorties du contrôleur de ce périphérique. La lecture ou l’écriture d’un élément d’un fichier impliquera donc le transfert du bloc entier qui contient cet élément.
- Lors d’un transfert de données d’un disque vers l’espace d’adressage d’un processus, le temps de lecture ou d’écriture sur le disque est négligeable devant le temps d’accès au bloc, et ceci quelle que soit la taille du bloc.
- Pour un accès rapide, on aura donc intérêt à prendre des blocs de grande taille. Cependant, les fichiers, y compris les fichiers de 1 octet, ont une taille minimale de 1 bloc. Si un disque comprend beaucoup de fichiers de petite taille et si les blocs sont de grandes dimensions, l’espace gaspillé sera alors considérable.
- Chaque disque conserve, dans un ou plusieurs blocs spécifiques, un certain nombre d’informations de fonctionnement, telles par exemple que le nombre de ses blocs, leur taille, …
- Chaque disque mémorise aussi en général l’ensemble de ses blocs ainsi que leur état dans une table. Si cette table est binaire, un disque de n blocs devra alors réserver une table de n bits; la position de chaque bit indiquant si le bloc est libre ou s’il est utilisé par un fichier, par exemple, 0 pour un bloc occupé et 1 pour un bloc libre. Certains systèmes stockent l’ensemble des blocs libres dans une liste chaînée.
La répartition physique des fichiers en blocs
- A chaque fichier correspond une liste de blocs contenant ses données. L’allocation est en générale non contiguë et les blocs sont donc répartis quasi aléatoirement sur le disque.
- Le système Unix répertorie chaque fichier par un numéro unique pour tout un disque. À chaque numéro, correspond un enregistrement, un nœud d’index, (i-node), comportant un nombre fixé de champs.
- Parmi ces champs, certains, 13 au total, mémorisent l’emplacement physique du fichier. Les 10 premiers champs (sur les 13) contiennent les numéros des 10 premiers blocs composant le fichier.
- Pour les fichiers de plus de 10 blocs, on a recours à des indirections. Dans le cas du système Unix, le bloc n° 11 contient le numéro d’un bloc composé lui-même d’adresses de blocs de données.
- Si les blocs ont une taille de 1024 octets et s’ils sont numérotés sur 4 octets, le bloc n° 11 pourra désigner jusqu’à 256 blocs. Au total, le fichier utilisant la simple indirection aura alors une taille maximale de 266 blocs.
- De la même manière, le bloc n° 12 contient une adresse, un pointeur, à double indirection, et le bloc n° 13, un pointeur à triple indirection. Avec l’exemple que nous avons donné, un fichier peut avoir une taille maximale de 16 Go quand il utilise ces pointeurs à triple indirection.
Les répertoires d’Unix
Les répertoires du système Unix disposent, eux aussi, d’une entrée par fichier. Chaque entrée possède au moins les deux champs suivants, le numéro du nœud d’index et le nom du fichier. Par exemple :
Structure et manipulation des nœuds d’index
Le numéro du nœud d’index renvoie à un enregistrement sur le disque contenant les numéros des blocs.
Pendant l’exécution d’un appel système concernant un fichier, le nœud d’index se verrouille. Deux processus ne peuvent donc pas effectuer, simultanément, une opération sur le même fichier. En cas de conflit, l’un des deux doit attendre. Ceci évite que le nœud ne se retrouve dans un état incohérent.
Une fois les liens établis, le fichier pourra être désigné sous l’un quelconque des noms. Pour sa part, le nœud d’index conservera, dans un de ses champs, le nombre de fichiers qui le référence, indépendamment des protections sur le fichier.
L’ajout d’une référence incrémentera le nombre de liens du nœud. L’élimination d’un fichier par un utilisateur décrémentera ce nombre.
La destruction effective du nœud, et par-là du fichier, aura lieu lorsque le compte des liens sera nul.
La structure physique d’un disque Unix
Chaque disque physique au format Unix possède la structure suivante :
- Bloc démarrage
- Super bloc
- Table bits
- i-nœuds
- Table bits blocs données
- Nœuds d’index (plusieurs blocs…)
- Données (plusieurs blocs…)
Le bloc de démarrage contient le code nécessaire à tout disque pour se lancer.
Le super bloc donne des informations sur les fichiers, telles que le nombre de nœuds d’index, le nombre de blocs, le premier bloc de données, la taille maximale de fichiers, etc.
Le super bloc est chargé en mémoire où on lui ajoute quelques informations supplémentaires, telles que le numéro du périphérique, un indicateur de mise à jour, etc.