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 :

  • logicielles
ce sont les fichiers disques contenant des donnees memorisees sur disque (sans blagues???).
  • materielles
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 :

  • Les fichiers reguliers
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).
   
  • Les repertoires
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 tubes nommes
les fichiers correspondant sont destines a la communication entre processus et sont geres en mode fifo.
   
  • Les fichiers speciaux
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).
   
  • Les liens symboliques
leur contenu est interprete comme des noms de fichier
  • Les sockets
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...