Projet de Systèmes I (licence 2003-2004)

IFS

L'auteur de cette page est: Jean-Baptiste Yunès

Généralités

Il s'agit d'implémenter un système de fichiers par simulation au-dessus d'Unix: le contenu des périphériques physiques du système simulé sera contenu dans des fichiers Unix.

Ce projet devra être réalisé en langage C en utilisant les fonctions POSIX étudiées en cours. Il devra impérativement fonctionner sur les machines de l'UFR. Le travail pourra être effectué par groupe de quatre étudiants au plus. Un rapport devra être rédigé et rendu avant la soutenance. Les dates de remise des rapports et soutenance seront précisées ultérieurement.

Caractéristiques du système de fichier ifs

Le système de fichier ifs (pour iconic file system) reconnaît trois types de fichiers:

Les fichiers ordinaires et répertoires peuvent être attachés à (au plus) un fichier icone permettant à un environnement graphique de présenter agréablement les fichiers du système. Mais dans le cadre de la simulation, on interprètera le contenu des fichiers icones comme du texte ASCII simple.

Le disque ifs (fichier Unix pour la simulation) est consistué de blocs de taille fixe (unité de lecture/écriture): 128 octets. L'ensemble des blocs est divisé en trois sous-ensembles: la zone de description, la zone des noeuds et la zone des données.

La zone de description

Elle contient au moins un bloc dont le contenu peut être interprété de la façon suivante:

Note: Les curieux pourront rechercher à l'aide de leur moteur de recherche favori l'IEN 137 (Internet Experiment Notes), Holy Wars and A Plea for Peace de Danny Cohen datant du 1er avril 1980.

La zone des noeuds

La zone des noeuds contient la liste des noeuds utilisés ou libres ainsi que les attributs associés aux noeuds; cette zone pouvant etre vue comme un tableau de structures noeud:

struct noeud {
  USHORT etat;
  USHORT type;
  USHORT taille;
  USHORT liens;
  USHORT icone;
  USHORT blocs[11];
};
#define NOEUD_LIBRE    (USHORT)0
#define NOEUD_UTILISE  (USHORT)1
#define EST_LIBRE(pn)  ((pn)->etat==NOEUD_LIBRE)
#define ORDINAIRE      (USHORT)0
#define REPERTOIRE     (USHORT)1
#define ICONE          (USHORT)2
#define IS_ORD(pn)     ((pn)->type==ORDINAIRE)
#define IS_REP(pn)     ((pn)->type==REPERTOIRE)
#define IS_ICO(pn)     ((pn)->type==ICONE)
...

Note: le type USHORT est le type des entiers courts (16 bits) en représentation Little-Endian.

Le champ etat (considéré comme un booléen) permet de déterminer si le noeud est libre ou utilisé (accessible à travers une référence).

Le champ type peut prendre l'une des valeurs (au moment de son allocation) : REPERTOIRE (pour un noeud répertoire) ou ORDINAIRE (pour un noeud fichier ordinaire) ou ICONE (pour un noeud fichier icone).

Le champ taille contient la taille exprimée en octets de l'objet.

Le champ liens contient le nombre de noms associés au noeud.

Le champ icone contient le numéro du noeud représentant l'icone du fichier associé. Attention: les fichiers icones n'ont pas d'icone associée.

Le champ blocs contient les numéros des premiers blocs de données associées au noeud. Le onzième entier pointe sur un bloc de données contenant la suite de la liste des blocs du noeud (le dernier entier de ce bloc pointant lui-même sur un autre bloc de données contenant la suite de la liste ad lib.)

Les répertoires

Les répertoires sont des noeuds dont les données sont à interpréter de façon très particulière: il s'agit d'une liste de couples (nom, numéro de noeud) permettant d'associer à un noeud particulier (donc non libre) un nom que l'on pourra utiliser comme élément d'une référence. Une entrée de répertoire (couple) possède la structure suivante :

struct entree_repertoire {
  usigned char  nom[30]; /* nom du lien associé au noeud */
  USHORT        numero;  /* numero du noeud associé au nom */
};

Le champ numéro doit contenir un numero de noeud valide lorsque l'entrée est occupée. Si l'entrée a été effacée, numéro doit être à zéro.

Le champ nom contient une chaine de caractères à la C (terminée par ASCII 0), mais jamais de longueur nulle! De plus les noms ne doivent pas contenir le caractère '/' (dit de séparation) utilisé pour composer les noms en références.

La zone des données

Constituée de blocs, on peut en distinguer quatre types: les blocs de données des fichiers (sans structure particulière), les blocs de données associés aux répertoires, les blocs de données utilisés pour constituer la liste des blocs d'un noeud et les blocs de données libres.

La réalisation

On devra entres autres :

Les différentes fonctions devront être conformes à la spécification suivante:

Recommandations

Il est recommandé de procéder avec beaucoup de précautions... Demandez-vous à quoi sert la zone de description d'un disque, ce que l'on y trouvera, où est placé le noeud racine d'un disque, etc. N'hésitez pas à rajouter ce qui semble manquer (à condition d'y réflechir à deux fois).

De plus, il est rappelé que les enseignants sont normalement disposés à répondre à vos questions de vive voix ou par courrier électronique, profitez-en.

S'il est conseillé d'échanger des informations entre différents groupes de travail, il n'est pas conseillé de copier les uns sur les autres. Le sujet est suffisamment libre d'interprétation pour que chaque groupe trouve une solution originale à chaque problème.