Chaque volume manipulé par notre système de fichiers dispose d’un descripteur de volume, son superbloc, inspiré par celui décrit dans le cours. Il dispose à la base
De plus le système de fichiers utilise un mécanisme de gestion des blocs libres gérés sous forme d’une liste chaînée de blocs.
qui permet d’initialiser le superbloc d’un volume, en particulier d’y associer le chaînage des blocs libres.void init_volume(unsigned int vol);
qui permettent respectivement de sélectionner le volume courant en chargeant le superbloc dans une variable globale et de mettre à jour le superbloc chargé en mémoire, après qu’il ait été modifié.int load_super(unsigned int vol); void save_super();
unsigned int new_bloc(); void free_bloc(unsigned int bloc);
Partition courante — Commandes mknfs et dfs
Dans l’ensemble des programmes qui seront maintenant développés, nous travaillerons sur un unique volume désigné par la valeur de la variable d’environnement $CURRENT_VOLUME.
Dans le même esprit, le fichier de configuration de la bibliothèque hardware utilisé sera désigné par la variable d’environnement $HW_CONFIG. Une valeur par défaut pourra être choisie.
On développera en particulier un programme mknfs (make new filesystem), pendant de la commande Unix mkfs, qui initialisera ce volume courant et un programme dfs (display filesystem), pendant de la commande Unix df, qui affichera l’état des partitions, et pour la partition courante son taux d’occupation.
Validation de la bibliothèque d’allocation/libération de blocs
Pour valider votre travail, concevez un programme qui
- fait appel à la fonction new_bloc() jusqu’à ce qu’elle retourne une erreur ;
- vérifie que le disque est plein ;
- itère un nombre aléatoire de fois sur la libération d’un bloc free_bloc() ;
- affiche le statut du disque (taille libre) ;
- alloue des blocs tant que le disque est non plein et retourne le nombre de blocs ayant pu être alloués.