< Booter avec Grub sur un disque IDE | TutoOS | Une méthode générique pour gérer les listes chaînées >
Le package contenant les sources est téléchargeable ici : kernel_File.tgz
Pour naviguer dans l'arborescence : File
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.
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
:
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 :
La fonction path_to_file()
renvoit la structure de fichier associée à un chemin.
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 :
pwd
Le schéma ci-dessous détaille la structure struct open_file
:
file
pointe sur le fichier ouvert
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.
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 >