Université Pierre et Marie Curie

Systèmes d'exploitation des ordinateurs

Chapitre 1. Les systèmes d'exploitation
Chapitre 2. Mécanismes d'exécution et de communication
Chapitre 3. Gestion des activités parallèles
Chapitre 4. Gestion des fichiers
4.1. Principes de la gestion de l'information
4.2. Systèmes de fichiers
4.3. Organisation sur un support physique
4.4. Système de fichiers sous Unix
4.4.1. Eléments du système de fichiers
4.4.2. Commandes
4.4.3. Pratique des systèmes de fichiers : montage, dual boot
4.5. Fonctions d'accès élémentaires
Chapitre 5. Partage des ressources
Chapitre 6. Au-dessus du système d'exploitation
Chapitre 7. Notions sur les communications
Chapitre 8. Notions sur la sécurité
Bibliographie
Chapitre 9. Exercices et TPs
Examens
Page d'accueilTable des matièresNiveau supérieurPage précédenteBas de la pagePage suivante

4.4.1. Eléments du système de fichiers

L'espace disque est attribué par blocs de 512 à 4096 octets suivant les systèmes.

La structure d'un système de fichiers est définie par trois entités : le superbloc, le fichier des inodes et les fichiers de données : fichiers réguliers (données) et répertoires.

Le superbloc contient des informations sur l'espace utilisé dans la partition, la liste des inodes des informations sur les fichiers de données. Le nom interne d'un fichier est un nombre entier appelé inode.

Le superbloc

Le superbloc décrit l'état d'occupation des secteurs, alloués au système de fichiers. Lorsqu'on cherche à écrire sur un disque, il est en effet indispensable de connaître la liste des emplacements libres et occupés. Il faut donc construire et tenir à jour une carte d'occupation des lieux. Les inodes sont les noms internes des fichiers reconnus sous la forme de nombres entiers. Le superbloc maintient également la liste des noms libres utilisables, indispensable à la création de nouveaux fichiers.

Parmi les informations les plus importantes que contient le superbloc, on retiendra :

  • s_isize: la taille en blocs de la liste des inodes (i_list).
  • s_fsize: la taille en blocs du système de fichiers.
  • s_fname: le nom externe du système de fichiers.

Remarquons que ces informations déterminent le nombre maximum de fichiers que l'on peut créer et la taille du système de fichiers. Insistons sur deux éléments limitants :

  • Si la taille du système de fichiers est plus petite que la taille de la partition physique, la différence est perdue et n'est pas utilisable.
  • Le nombre maximum de fichiers que l'on peut créer dans le système de fichiers est défini par la taille de la i_list. On ne peut l'étendre après coup.

Ceci avait surtout de l'importance lorsque la capacité des disques était très limitée et que l'on cherchait à réduire la dimension de ces tables pour économiser l'espace. Il est conseillé, aujourd'hui, de laisser les valeurs par défaut des commandes de création de systèmes de fichiers (parted, fdisk..).

OIn trouve également :

  • s_free: la liste des blocs libres.
  • s_inode: la liste des inodes libres
  • s_tfree: le nombre de blocs libres
  • s_tinode: le nombre d'inodes libres

Ces indications sont indispensables à l'allocation de l'espace et des fichiers. L'utilisateur peut la consulter au moyen de la commande df. Le système d'exploitation utilise ces informations à chaque fois qu'il doit créer ou étendre un fichier.

Le superbloc est chargé et verrouillé en mémoire au moment du démarrage ou lorsqu'un système de fichiers est monté (mount) et devient visible pour les utilisateurs. Il est constamment remis à jour et sauvegardé régulièrement sur disque ou volontairement par la commande sync.

La liste des inodes

La liste des inodes ou i_list est l'élément fondamental du système de fichier. Tout dommage à cette structure détruit irrémédiablement les liens donc les fichiers qui deviennent difficilement récupérables. Pour s'en convaincre il suffit de savoir qu'elle contient les renseignements suivants pour chaque inode :

  • i_uid, le numéro de l'utilisateur qui est son nom interne dans le système.
  • i_mode, les droits d'accès sur le fichier.
  • i_size, sa taille en blocs.
  • toutes les informations sur sa date de création, de modification et de dernier accès.
  • un pointeur permettant, comme nous allons le voir, d'accéder à son contenu.

On remarquera les points importants suivants :

  • Le propriétaire est identifié par un numéro (uid) qui est relié au nom externe de la personne au travers du fichier /etc/passwd de mots de passe.
  • Les droits d'accès sont une combinaison de trois chiffres variant de 0 à 7.
i-list
Figure 4.16 - Structure d'accès à un fichier

On y trouve également des informations indiquant s'il s'agit d'un fichier, d'un répertoire ou de tout autre fichier spécial. L'utilisateur consulte son contenu, pour la part qui lui est accessible, au travers des protections, au moyen de la commande ls qui liste les informations sur les fichiers contenus dans un répertoire. On remarquera que le nom du fichier n'est pas contenu dans la i_list. Cette information est placée dans les données des fichiers répertoires.

Ces fichiers répertoires sont des fichiers comme les autres : simplement leur structure est figée et contient des informations décodables par la commande ls, par exemple. Il faut donc lire le contenu de tous les répertoires pour retrouver le nom externe complet d'un fichier. Son nom interne est un nombre qui est simplement la postion de son bloc descripteur dans la i_list. Le bloc 0 décrit la racine du système de fichiers.

On utilise un adressage direct pour accéder au fichier s'il est court , de l'ordre de dix blocs,  un adressage indirect pour les fichiers plus longs, comme schématisé dans la figure 4.16. La i_list comme le superbloc est chargée en mémoire et régulièrement remise à jour sur disque.

Accès à un fichier

Imaginons qu'on recherche le fichier /usr/essai. Le processus pour y accéder est le suivant :

  1. Lecture de la i_list pour retrouver la référence du répertoire / (racine, bloc 0).
  2. Lecture de ce fichier répertoire. Les répertoires contiennent, entre autre, les noms interne et externe de tous les fichiers et répertoires fils rangés immédiatement en-dessous.
    Si usr est, par exemple, l'inode xxx dans le répertoire / (bloc 0) le système retrouvera cette valeur à partir du nom usr.
  3. Lecture de la i_list pour retrouver les références de cet inode xxx.
  4. Lecture des blocs correspondants à cet inode. Il s'agit du contenu du répertoire usr. On y trouvera le nom interne yyy correspondant au nom externe essai.
  5. Lecture de la i_list pour retrouver les références de l'inode yyy.
  6. Accès au fichier yyy soit /usr/essai

Ce simple exemple montre la nécessité de préserver l'intégrité de la i_list. On notera également que l'accès serait extrêmement lent si celle-ci ainsi que le superbloc n'étaient pas chargés dans la mémoire de l'ordinateur. Dans tous les systèmes Unix il existe une copie du superbloc et de la i_list en mémoire, de façon à éviter la multiplication des accès au disque. Ce n'était pas le cas dans le passé (années 1980)et les performances d'Unix étaient mauvaises. Seul l'effondrement du prix des mémoires a permis à Unix de devenir un système efficace.

Fragilité des systèmes de fichiers

L'information écrite sur un disque évolue rapidement. A un instant donné il n'est pas garanti que la géographie physique du disque corresponde exactement à la copie du superbloc et de la i_list qui existent sur celui-ci puisque seules leurs images dans la mémoire sont modifiées instantanément. La mise à jour est effectuée régulièrement par leur recopie sur le disque mais si le système est arrêté inopinément alors qu'il était en pleine activité, il n'est pas certain que la cohérence du système de fichiers soit préservée. C'est pourquoi il ne faut jamais arrêter brusquement une machine Unix: il faut utiliser la procédure shutdown prévue à cet effet. Entre autre chose celle-ci recopie les informations de la mémoire sur les disques.

Au démarrage de tout système une procédure analyse le système de fichiers pour vérifier la cohérence des informations inscrites dans le superbloc et la i_list. Tout fichier ou morceau de fichier dont le chemin d'accès ne peut être retrouvé est placé dans un répertoire spécial appelé lost+found!

Cette vérification se déroule en cinq phases :

  1. phase I : vérification de la liste des inodes
  2. phase II : vérification des chemins d'accès
  3. phase III: vérification de la connectivité des répertoires
  4. phase IV : vérification des liens symboliques
  5. phase V : vérification du superbloc

Ceci peut prendre un certain temps si la capacité en disques est élevée. Les procédures de démarrage les plus évoluées sont capables de s'apercevoir si un système a été précédemment arrêté proprement. Elles évitent alors cette étape fastidieuse.

structure en couches
figure 4.17 : Réalisation moderne
d'un système de fichiers Unix

Les constructeurs de systèmes informatiques sont conscients de la fragilité des systèmes de fichiers. Aussi ont-ils recherché, chacun à leur manière, une solution à ce problème inacceptable maintenant qu'Unix a quitté le domaine universitaire pour devenir un système utilisé dans les entreprises. Ils introduisent une couche logicielle entre la représentation Unix des fichiers et la structure physique sur le disque (fig. 4.17) qui réalise un certain nombre de fonctionnalités supplémentaires cachées. Par exemple la i_list comme le superbloc sont dupliqués un certain nombre de fois de façon à éviter leur perte. Il devient possible de reconstituer ces informations fondamentales à partir de leurs différentes images. Certains constructeurs ont même introduit des fonctions qui permettent de redimensionner dynamiquement les systèmes de fichiers sans arréter le fonctionnement de l'ordinateur. On parle de Journalized File Systems (jfs). C'est l'une des différences importantes entre les systèmes de fichiers ext2 et ext3 de Linux.

Tous ces éléments font que, bien que présentant un interface et des commandes d'utilisation communs, les systèmes de fichiers Unix sont parfaitement incompatibles entre constructeurs différents et même, cela s'est déjà vu, d'une version à la suivante d'un système d'exploitation. On ne peut pas débrancher un disque d'une machine Unix pour l'installer sur une machine en provenance d'un fournisseur différent et espérer pouvoir relire l'information qu'il contient. Windows ne présentent pas cette difficulté au même degré car, quelque soit l'origine de la machine, le système d'exploitation est toujours le même.

Cependant attention aux versions car les tables de références peuvent être écrites sur 16 ou 32 bits, ce qui les rend parfaitement incompatibles.


Copyright Yves Epelboin, université P.M. Curie, 2000, MAJ 8 mars, 2006

Page d'accueilTable des matièresNiveau supérieurPage précédenteHaut de la pagePage suivante