Licence CC BY-NC-ND

Systèmes de fichiers

Vous avez déjà remarqué que lorsque vous éteignez votre ordinateur, le système d'exploitation et les programmes que vous avez installés… ne s'effacent pas. On dit que la mémoire dans laquelle votre OS et vos programmes sont placés est une mémoire de masse. Tout ordinateur contient au moins une mémoire non-volatile, afin de conserver des données quand on l'éteint. Sur nos ordinateurs, ce rôle est le plus souvent rempli par un disque dur. Dans d'autres cas, il l'est par des mémoires Flash. Dans ce qui va suivre, nous allons parler brièvement de l'organisation des données sur une mémoire de masse et comment notre OS gère le tout.

Fichiers et répertoires

On sait donc stocker nos données en utilisant un disque dur. C'est un bon début. Mais le seul problème, c'est que toutes les données que l'on met sur notre disque dur sont codées en binaire. Il est donc impossible de savoir si une portion de disque dur stocke une vidéo, du texte, votre jeu vidéo préféré, ou un programme exécutable. Pour retrouver nos données, il a bien fallu inventer un moyen pour les organiser et pouvoir remettre la main dessus si besoin est. Pour cela, on regroupe nos informations dans ce qu'on appelle des fichiers. Ces fichiers sont généralement de simples morceaux de disque dur ou d'une mémoire de masse, sur lesquels un programme peut écrire ce qu'il veut.

Chaque fichier reçoit un nom, qui permet de l'identifier et de ne pas le confondre avec d'autres. L'utilisateur peut évidemment renommer les fichiers, choisir le nom des fichiers et d'autres choses dans le genre. En plus du nom, le système d'exploitation peut mémoriser des informations supplémentaires sur le fichier : la date de création, la quantité de mémoire occupée par le fichier, etc. Ces informations sont appelées des attributs de fichier.

Formats de données

Les données d'un fichier sont structurées de la manière établie par le programme qui l'utilise. C'est donc lui qui détermine comment ranger les données dans le fichier. Mais qu'on se rassure : les programmeurs ne font généralement pas n'importe quoi (ou alors, ce n'est pas volontaire). Il existe des normes qui décrivent comment les données doivent être organisées dans un fichier. Ces normes sont appelées des formats de fichiers.

Identifier le format d'un fichier est relativement simple : il suffit de faire finir le nom du fichier par une extension qui indique son format. Généralement, cette extension de nom commence par un point, suivi d'une abréviation. Par exemple, le .JPEG, le .WAV, le .MP3, le .TXT, etc. sont tous des formats de fichiers comme les autres. Ces formats de fichiers ne sont pas gérés par le système d'exploitation, c'est aux programmes applicatifs de ranger les données convenablement dans les fichiers. Tout ce que peut faire l'OS, c'est lier un format de fichier à une application : il sait qu'un .PDF doit s'ouvrir avec un lecteur de fichiers .PDF, que les .WAV peuvent s'ouvrir avec votre lecteur vidéo favori, etc.

Répertoires

Sur les premiers systèmes d'exploitation, on ne pouvait pas ranger les fichiers, ils étaient tous placés sur le disque dur sans organisation. Quand le nombre de fichier était relativement faible, cela ne posait pas trop de problèmes. Maintenant, compter le nombre de fichiers que vous avez sur votre ordinateur et imaginez qu'on mette tout sur votre bureau - évitez de perdre conscience, si vous le faites vraiment. oui, heureusement que les dossiers et répertoires sont là pour organiser nos fichiers !

Ces répertoires sont organisés en hiérarchie : un répertoire peut contenir d'autres répertoires et ainsi de suite. Évidemment, cette hiérarchie commence par un répertoire maître, tout en haut de cette hiérarchie.

Organisation hiérarchique des répertoires

Mais ces répertoires, comment sont-ils représentés sur le disque dur ? Et bien tenez-vous bien : ce sont des fichiers comme les autres…

Gestion des fichiers par l'OS

Un fichier est donc une portion d'une mémoire de masse : disque dur, Solid State Drive, CD-ROM, DVD-ROM, etc. Mais comment sont rangés ces blocs de données sur le disque dur ? Cela dépend de l'OS et plusieurs méthodes existent. Ces méthodes sont appelées des systèmes de fichiers. Un système de fichier gére deux choses : le stockage des fichiers et leur utilisation.

Stockage

Pour commencer, il faut savoir que toutes les mémoires de masse sont découpées en blocs de taille fixe : les secteurs. Dans le cas le plus fréquent, ces secteurs sont tous identifiés par un numéro qu'on appelle l'adresse LBA. Certains disques durs étaient adressés avec autre chose qu'un simple numéro, mais je vais passer ce cas là sous silence, l'OS se chargeant souvent de la conversion vers une adresse LBA. Les systèmes de fichiers actuels ne travaillent pas toujours sur la base des secteurs, mais utilisent des clusters, des groupes de deux ou trois secteurs consécutifs qui ont pour adresse celle de leur premier secteur.

Allocation par bloc

La première méthode consiste à trouver un bloc de secteurs adjacents (consécutifs si vous préférez), capable d'accepter l'ensemble du fichier. Dans ces conditions, repérer un fichier sur le disque dur est relativement simple : il suffit de mémoriser le premier secteur et le nombre de secteurs utilisés.

Cette méthode a de nombreux avantages, notamment pour les performances des lectures et des écritures à l'intérieur d'un fichier. C'est d'ailleurs la voie royale pour le stockage de fichiers sur les CD-ROM ou les DVD, où les fichiers sont impossible à supprimer. Mais sur les disques durs, où les fichiers peuvent être supprimés, les choses changent.

À force de supprimer ou d'ajouter des fichiers de taille différentes, on se retrouve avec des blocs de secteurs assez petits, coincés entre deux fichiers proches. Ces secteurs sont inutilisables, vu que les fichiers à stocker sont trop gros pour rentrer dedans. Une telle situation est ce qu'on appelle de la fragmentation. Le seul moyen pour récupérer ces blocs est de compacter les fichiers, pour récupérer l’espace libre. C'est l'opération de défragmentation.

Defragmentation

Allocation par liste de blocs

Sur d'autres systèmes de fichiers, les clusters d'un fichier ne sont pas forcément consécutifs sur le disque dur. Le système d'exploitation doit garder, pour chaque fichier, la liste des clusters qui correspondent à ce fichier. Cette liste est ce qu'on appelle une liste chainée : chaque cluster indique quel est le cluster suivant (plus précisément, l'adresse du cluster suivant). L'accès à un fichier se fait cluster par cluster : l'accès à un cluster bien précis demande de parcourir le fichier depuis le début, jusqu'à tomber sur le cluster demandé.

Avec cette méthode, la fragmentation disparait. Mais cela ne signifie pas que la défragmentation devient inutile : elle permet de regrouper des blocs dispersés sur le disque dur en un seul bloc de secteurs consécutifs. L'accès aux données est alors plus rapide sur les disques durs, pour des raisons matérielles.

Allocation par FAT

On peut améliorer la méthode précédente, en regroupant toutes les correspondances (cluster -> cluster suivant) dans une table en mémoire RAM. Cette table est appelée la FAT, pour File Allocation Table. Avec cette méthode, l'accès aléatoire est plus rapide car il demande uniquement de parcourir cette table en mémoire RAM, ce qui est plus court que de parcourir le disque dur. Malheureusement, cette table a une taille assez imposante pour des disques durs de grande capacité : pour un disque dur de 200 gibioctets, la taille de la FAT est de plus de 600 mébioctets.

Allocation par i-node

Une autre méthode consiste à ne pas stocker les correspondances entre un cluster et le suivant, mais simplement les adresses des clusters les unes à la suite des autres : on obtient ainsi un inode. Un inode se contente ainsi, dans sa forme la plus simple, de lister les adresses des secteur d'un fichier. D'autres organisations plus compliquées reposant sur ce principe sont utilisées sur les systèmes d'exploitation UNIX.

Utilisation

Pour ouvrir un fichier, un programme demande au système d'exploitation pour y avoir accès. Si aucune erreur n'a lieu, le programme peut alors lire ou écrire dans le fichier : le système d'exploitation s'occupera de localiser les informations du fichier sur le disque dur. Une fois son travail terminé, le programme va alors fermer le fichier et dire au système d'exploitation qu'il n'en a plus besoin.

Reste qu'ouvrir un fichier n'est pas une opération qui se fait sans formalités : le système d'exploitation vérifie la demande avant d'effectuer l'ouverture (le fichier existe t-il ? Le processus a t-il le droit d'y accéder ?). Dans certaines situations, ce droit lui est refusé et l'OS lève une erreur.