Unix File System |
Introduction
Dans cet article, je vais vous parler des fichiers sous UNIX, des tables d'inode,
des descripteurs de fichier... Pour pouvoir suivre cet article, il vaudrait
mieux avoir des connaissances de base sur UNIX et un peu en programmation en
C (quoique ce n'est pas indispensable). En tout cas, je deconseille cet article
aux newbies qui risquent d'etre pris au depourvu par certains termes.
Disclaimer
Cet article est tout ce qu'il y a de plus legal alors les V passez aussi votre
chemin, je vous emmerde!!!
I- Les fichiers
Le systeme d'UNIX permet de realiser des operations d'ecriture et de lecture
sur TOUTES les ressources du systeme. Le terme de "fichier" designe
en fait, dans le monde d'UNIX, un ensemble de ressources qui peuvent etre :
|
ce sont les fichiers disques contenant des donnees memorisees sur disque (sans blagues???). |
|
ce sont des ressources physiques comme un terminal, un disque, une imprimante, de la memoire... |
A chaque fichier est associe sur disque un inode (ou encore inoeud ou noeud
d'index) qui est une structure (struct) contenant l'ensemble des caracteristiques
dudit fichier (droits d'acces, chemin d'acces...). A chaque fichier en cours
d'utilisation, le systeme charge l'inode du fichier dans la table des inodes.
Comme vous devez le savoir, la designation d'un fichier est realisee au moyen
de references qui constituent les chemins d'acces au fichier. Il n'est possible
d'associer qu'un seul inode au plus a une reference mais un inode peut contenir
n'importe quel nombre de references. La chose la plus importante pour un fichier
est son type (contenu aussi dans les informations relatives au fichier dans
l'inode). Voici les types de fichier que l'on mpeut rencontrer dans le monde
de UNIX :
|
ce sont les nodes associes a des fichiers de donnees sur le disque. Le contenu de ces fichiers est des suites de caracteres sans organisation (leur structuration est laissee aux applications). La caracteristique essentielle d'un de ces fichiers est sa taille, en effet, c'est grace a elle que le systeme detecte la fin du fichier (pas de caractere EOF a la fin d'un tel fichier). |
|
ce sont des fichiers de donnees, mais a differemment de leurs confreres (huh?) reguliers ils ont une structure logique qui permet aux noms internes des noms externes : chaque entree d'un repertoire associe a un inode un lien physique. En fait, une reference est une suite de liens. Le write access a ces objets est limite car modifier la structure de ces fichiers pourrait severement endommager le systeme puisque la coherence de l'ensemble serait corrompue. |
|
les fichiers correspondant sont destines a la communication entre processus et sont geres en mode fifo. |
|
ils
sont associes aux ressources du systeme et leur caracteristique la plus
frappante est qu'il n'ont pas de taille (en fait, ceci est totalement logique)
Les inodes de ce type ont souvent un lien dans le repertoire /dev. Parmi
ces fichiers on distingue : - les fichiers blocs, associes aux ressources du systeme. Les operations I/O sont realisees au travers de blocs cache du kernel. - les fichiers caracteres, dont les I/O sont realisees sans passer par les caches du kernel. Les terminaux ou la memoire sont designes comme des fichiers speciaux de ce type. A chaque fichier bloc correspond un fichier caractere associes a la meme ressource. On peut lister ces fichiers avec la commande 'ls -li' (on trouvera alors la lettre b ou la lettre c en guise de type de fichier, tout comme un repertoire est designe d). |
|
leur contenu est interprete comme des noms de fichier |
|
uniquement presents dans les versions BSD d'UNIX, ces fichiers sont des points de communication. Tout socket dedie a la communication locale a un systeme correspond a un inode de ce type. |
II- Les disques
Dans l'univers d'UNIX, l'acces aux disques logiques est controle par les controleurs
physiques. Le systeme organise l'espace disque de telle maniere qu'un disque
physique est divise en plusieurs disques logiques. On trouve deux types de disques
logiques :
* Les Swap
: il y en a au moins un par systeme. Les Swap sauvegardent des processus complets
ou des pages de processus sortis momentanement de la memoire.
* Les SGF : on trouve deux types de Systemes de Gestion de fichier :
le SGF de SystemV et le SGF ffs/ufs de BSD. Ces systemes peuvent cohabiter avec
d'autres. Il est a noter que la caracteristique principale d'un disque logique
est son type (encore????).
A. Les SGF System
V
bloc
d'initialisation
|
super
bloc
|
table
des inodes
|
blocs
de donnees
|
organisation des SGF System V
|
* Bloc d'initialisation
: est utilise au chargement du systeme. Tout SGF en possede un, meme s'il n'est
pas utilise au chargement du systeme.
* Super bloc : contient des infos sur le SGF (date et mode de montage,
nombre de noeuds alloues et libres, nombre
de blocs de donnees libres...)
* Table d'inodes : chaque inode contient ces infos :
. types et access au noeud;
. UID et GID du proprietaire;
. date de derniere consultation,
modification des donnees et derniere modif du node;
. 13 adresses de blocs (10 directes,
1 indirecte simple, 1 indirecte double et 1 indirecte triple);
. nombre de liens physiques;
. taille du fichier si le fichier
n'est pas un fichier special;
* Blocs de donnees : le disque est divise en blocs logiques de 512, 1024,
2048 ou 4096 octets. Ces blocs constituent la plus
petite unite de disque allouable. La fragmentation de blocs est impossible dans
les SGF de System V; Les repertoires sont constitues d'enregistrements de taille
fixe (16 caracteres), le lien associe a un index de fichier occupant 14 caracteres.
B. Les SGF de BSD (ffs/ufs)
ffs = fast file system
Dans ce systeme, le disque est divise en groupes de cylindres qui ont cette
structure :
bloc d'initialisation |
super bloc |
table de groupe de cylindre |
table des inodes |
blocs de donnees |
Les principales differences entre ce systeme et celui de System V sont:
* les blocs de donnees ont une taille de 4K ou 8K et on peut fragmenter les
blocs (generalement en fragments de 1024 octets);
* l'utilisation de tables de groupe de cylindres optimise l'allocation des blocs
du point de vue des deplacements des tetes des disques;
* un inode contient 12 adresses directes, 1 indirecte simple et 2 indirecte
doubles;
* les enregistrements logiques des repertoires sont de taille variable. Un lien
de fichier peut etre de longueur quelconque;
C. Le montage
des disques
Je voulais quand meme vous dire un petit mot au sujet du montage des disques.
Chacun des SGF (que ce soit du System V ou du BSD) constitue une arborescence
de fichiers dont la racine a pour index 2 (toute racine d'une telle arborescence,
si elle est la racine absolue, a 2 pour index). Un de tous ces disques est privilegie
: c'est le disque systeme (c'est un peu logique
quand meme). L'operation des montages consiste a greffer la racine d'un disque
logique designe par le nom de fichier special qui lui est associe sur un point
quelconque de l'arborescence constituee par le disque systeme (qui est lui aussi
bien evidemment un disque logique).
Conclusion
Voila, c'est la fin de cet article. J'espere que vous aurez aime et que cela
vous aura appris des trucs. Pour les fans d'UNIX mais qui ne savent pas programmer
sous cet environnement, je compte faire une serie d'articles qui vous expliqueront
les bases de ce sujet. Sur ce, let's play the game and have fun...