Page préc.
Types de fichiers
Fin de page Page suiv.
Bibliographie

Structures internes

    Nous avons vu en détail dans les paragraphes précédents les structures mises en œuvre par VFS et ext2fs. Nous allons les résumer ici de façon fonctionnelle.

Structure propre à chaque processus

    Chaque processus contient, dans son espace mémoire utilisateur (dans la zone u. précisément), une table de 64 éléments (par exemple), appelée table des descripteurs de fichiers (file descriptors table). Chaque fois qu'un fichier est ouvert dans une application, un élément lui est attribué, et le rang de cet élément sert à désigner le fichier dans le programme. Par assimilation, c'est ce nombre qui est souvent désigné par le terme descripteur de fichiers, noté fd.(file descriptor). Un descripteur de fichier est donc un entier.

    En standard, trois fichiers particuliers sont ouverts lors du lancement d'un processus par le langage de commande (shell). Ils peuvent cependant être refermés par le programme lui-même. Il s'agit des fichiers de descripteurs :

0 : c'est le fichier standard d'entrée (clavier) – stdin en C
1 : c'est le fichier standard de sortie (écran) – stdout en C
2 : c'est le fichier standard de sortie des erreurs (écran aussi) – stderr en C
    L'ouverture d'un fichier par un processus réserve un élément dans la table. Chaque élément non nul de cette table pointe sur un élément de la table des fichiers ouverts du système.

Table des fichiers ouverts du système

    Dans son propre espace mémoire, le système garde une table contenant des informations sur tous les fichiers ouverts à un instant donné (file table). Il s'agit bien sûr de tous les fichiers ouverts par les utilisateurs, mais aussi de ceux utilisés par le système lui-même (en particulier les devices).

    Si le même fichier est ouvert par plusieurs processus, il n'occupe qu'un seul élément de la table des fichiers du système. En revanche, un élément lui correspond dans la table des descripteurs de fichiers de chaque processus (et le descripteur de ce fichier peut être différent d'un processus à l'autre). Chaque élément de la table comporte un certain nombre d'informations, comme par exemple le déplacement dans le fichier (position en nombre d'octets où se fera le prochain accès, par rapport au début du fichier (position 0)).

    Une autre information contenue dans chaque élément de ce tableau de fichiers est un pointeur vers un tableau d'i-nœuds.

    Chaque fois qu'un nouveau fichier est ouvert par le système, son i-nœud contenu dans le F.S. est chargé en mémoire, et quelques informations supplémentaires lui sont ajoutées, qui sont inutiles ou dépourvus de sens sur son image disque, comme :

    Ce n'est qu'au niveau de l'i-nœud que les différents types de fichier se distinguent.  La figure suivante illustre les différentes structures mises en œuvre par le S.G.F. On remarque que les deux utilisateurs ont un fichier ouvert en commun, que certains fichiers sont des fichiers disque et d'autres des fichiers spéciaux (console).


Structures internes mises en œuvre par le S.G.F

    La fonction système dup() a pour effet de dupliquer un descripteur de fichier. En supposant qu'initialement seuls les descripteurs de fichiers 0, 1, 2 et m correspondent à des fichiers ouverts, la figure suivante illustre la modification de la table de descripteur obtenue par l'appel à la fonction dup() suivant :
 
n = dup (m);

    Le premier descripteur de fichiers disponible pointe à son tour sur le même fichier que le descripteur m (n prend la valeur 3).


Effet de dup() sur la table des file descriptors

    L'exécution de la fonction fork() a pour effet de créer un processus fils par duplication d'un certain nombre d'informations, en particulier la table des identificateurs de fichiers. La figure suivante montre le résultat de l'exécution de la fonction fork(). Les deux processus pointent vers les mêmes fichiers.


Effet de fork() sur les structures internes du S.G.F


Page préc.
Types de fichiers
Début de page Page suiv.
Bibliographie
Dernière mise à jour : 30/07/2001