print · rss · source

< Booter avec Grub sur un disque IDE | TutoOS | Une méthode générique pour gérer les listes chaînées >


Quelques structures élémentaires pour gérer les fichiers

Les sources

Le package contenant les sources est téléchargeable ici : kernel_File.tgz
Pour naviguer dans l'arborescence : File


Organiser les fichiers

Jusqu'à présent, nous avons vu comment implémenter au sein d'un noyau les fonctionnalités permettant de lire un fichier dans un système de fichiers de type Ext2FS à partir de son numéro d'inode. Cette partie présente les structures et les fonctions implémentées dans le noyau Pépin afin de pouvoir accéder aux fichiers directement par leur nom.

Le disque logique

Les données générales relatives à la structure du disque logique et du système de fichiers sont collectées dans la structure struct disk :

Structure d'un fichier et arborescence

Les fichiers sont organisés sous forme d'arborescence. C'est une donnée très générale que je ne détaillerai pas ici. Afin d'économiser les accès disques, le noyau cache en mémoire une partie de cette arborescence. Chaque noeud de cette arborescence est décrit par la structure struct file :

Les champs leaf, parent, next et prev permettent de lier les structures de fichiers entre elles afin de reproduire dans le cache cette arborescence :

La fonction get_dir_entries() recherche pour un répertoire donnée l'ensemble de ses entrées (fichiers et sous-répertoires) et met à jour le cache de l'arborescence en conséquence.

La fonction is_cached_leaf() regarde dans le cache et indique si un fichier est une "feuille" d'un répertoire. Cette fonction se base uniquement sur le cache. Pour savoir si un fichier est bien une entrée d'un répertoire, il faut donc au préalable avoir mis à jour le cache :

get_dir_entries(dir);
if (!is_cached_leaf(dir, filename))
    return (struct file *) 0;

La fonction path_to_file() renvoit la structure de fichier associée à un chemin.

De nouveaux appels systèmes

Structure d'un processus : gérer les fichiers

Un processus peut être amené à ouvrir des fichiers, comme c'est par exemple le cas de la commande cat sous Unix.
La structure struct process, qui décrit le contexte d'exécution d'un processus, est modifiéé de façon à pouvoir indiquer :

  • le répertoire courant, par le biais du champ pwd
  • la liste des fichiers ouverts, par le biais d'une liste chaînée de descripteurs de fichiers

Le schéma ci-dessous détaille la structure struct open_file :

  • le champ file pointe sur le fichier ouvert
  • le champ ptr pointe sur la position courante dans le fichier. C'est un indicateur qui permet de savoir où en est la lecture de ce fichier par le processus.
  • le champ next permet de chaîner les structures dans le cas où plusieurs fichiers sont ouverts

L'ouverture, la lecture et la fermeture de fichiers sont réalisés par trois nouveaux appels systèmes : sys_open(), sys_read() et sys_close(). Attention, contrairement à un système Unix où tout est fichier, l'ouverture de flux d'entrée, sortie, etc. n'est pas encore possible avec Pépin. Les appels systèmes présentés ici ne concernent donc que de véritables fichiers.


< Booter avec Grub sur un disque IDE | TutoOS | Une méthode générique pour gérer les listes chaînées >

print · rss · source
Page last modified on December 11, 2008, at 03:32 PM