Article de reference

API du système de fichiers

Une API de système de fichiers est une interface de programmation permettant à un utilitaire ou à un programme utilisateur d'accéder aux services d'un système de fichiers . Un s...

interface de programmation permettant à un utilitaire ou à un programme utilisateur d'accéder aux services d'un système de fichiers . Un système d'exploitation peut fournir des abstractions pour accéder de manière transparente à différents systèmes de fichiers.

Certaines API de système de fichiers peuvent également inclure des interfaces pour les opérations de maintenance, telles que la création ou l'initialisation d'un système de fichiers, la vérification de l'intégrité du système de fichiers et la défragmentation .

Chaque système d'exploitation intègre les API nécessaires aux systèmes de fichiers qu'il prend en charge. Microsoft Windows propose des API pour NTFS et plusieurs systèmes de fichiers FAT . Les systèmes Linux peuvent inclure des API pour ext2 , ext3 , ReiserFS et Btrfs , entre autres.

Gestion des métadonnées
  • Maintenance du système de fichiers
  • Avec l'augmentation du nombre de types de systèmes de fichiers, de structures hiérarchiques et de supports pris en charge, de nouvelles fonctionnalités ont nécessité des fonctions spécialisées :

    Les systèmes multi-utilisateurs nécessitent des API pour :

    • Partage
    • Restriction de l'accès
    • Cryptage

    Présentation des API

    Écrire, lire et positionner

    L'écriture de données utilisateur sur un système de fichiers est possible directement avec le programme utilisateur ou la bibliothèque d'exécution. Cette dernière, pour certains langages de programmation, peut gérer la conversion de types, la mise en forme et le blocage. Certains systèmes de fichiers permettent l'identification des enregistrements par clé et peuvent inclure la réécriture d'un enregistrement existant. Cette opération est parfois appelée « réécriture » PUT​​ou PUTX« réécriture » ​​(si l'enregistrement existe).

    La lecture des données utilisateur, parfois appelée GET , peut inclure une direction (avant ou arrière) ou, dans le cas d'un système de fichiers à clés, une clé spécifique. Comme pour l'écriture, des bibliothèques d'exécution peuvent intervenir pour le programme utilisateur.

    Positioning includes adjusting the location of the next record. This may include skipping forward or reverse as well as positioning to the beginning or end of the file.

    Open and close

    The open API may be explicitly requested or implicitly invoked upon the issuance of the first operation by a process on an object. It may cause the mounting of removable media, establishing a connection to another host and validating the location and accessibility of the object. It updates system structures to indicate that the object is in use.

    Usual requirements for requesting access to a file system object include:

    • The object which is to be accessed (file, directory, media and location)
    • The intended type of operations to be performed after the open (reads, updates, deletions)

    Additional information may be necessary, for example:

    • a password
    • a declaration that other processes may access the same object while the opening process is using the object (sharing). This may depend on the intent of the other process. In contrast, a declaration that no other process may access the object regardless of the other processes intent (exclusive use). These are requested via a programming language library which may provide coordination among modules in the process in addition to forwarding the request to the file system.

    It must be expected that something may go wrong during the processing of the open:

    • The object or intent may be improperly specified (the name may include an unacceptable character or the intent is unrecognized).
    • The process may be prohibited from accessing the object (it may be only accessible by a group or specific user).
    • The file system may be unable to create or update structures required to coordinate activities among users.
    • In the case of a new (or replacement) object, there may not be sufficient capacity on the media.

    Depending on the programming language, additional specifications in the open may establish the modules to handle these conditions. Some libraries specify a library module to the file system permitting analysis should the opening program be unable to perform any meaningful action as a result of a failure.

    Close may cause dismounting or ejecting removable media and updating library and file system structures to indicate that the object is no longer in use. The minimal specification to the close references the object. Additionally, some file systems provide specifying a disposition of the object which may indicate the object is to be discarded and no longer be part of the file system.

    Similar to the open, it must be expected that something may go wrong:

    • The specification of the object may be incorrect.
    • There may not be sufficient capacity on the media to save any data being buffered or to output a structure indicating that the object was successfully updated.
    • Une erreur de périphérique peut survenir sur le support où l'objet est stocké lors de l'écriture des données mises en mémoire tampon, de la structure de complétion ou de la mise à jour des métadonnées relatives à l'objet (par exemple, la date et l'heure du dernier accès).
    • Une spécification visant à libérer l'objet peut être incompatible avec d'autres processus utilisant encore cet objet.

    Les considérations relatives à la gestion d'une défaillance sont similaires à celles de l'ouverture.

    Gestion des métadonnées

    Les informations relatives aux données d'un fichier sont appelées métadonnées.

    Certaines métadonnées sont conservées par le système de fichiers, comme la date de dernière modification (et d'autres dates selon le système), l'emplacement du début du fichier, sa taille et l'indication si l'utilitaire de sauvegarde a enregistré la version actuelle. Ces éléments ne peuvent généralement pas être modifiés par un programme utilisateur.

    Certains systèmes de fichiers prennent en charge des métadonnées supplémentaires, telles que le propriétaire du fichier, le groupe auquel il appartient, ainsi que les permissions et le contrôle d'accès (c'est-à-dire les accès et modifications autorisés pour chaque utilisateur ou groupe), et l'indication de la visibilité du fichier lors de l'affichage du répertoire. Ces éléments sont généralement modifiables par les utilitaires du système de fichiers, accessibles au propriétaire.

    Certaines applications stockent davantage de métadonnées. Pour les images, les métadonnées peuvent inclure le modèle de l'appareil photo et les paramètres utilisés lors de la prise de vue. Pour les fichiers audio, les métadonnées peuvent inclure l'album, l'artiste qui a enregistré l'enregistrement et des commentaires relatifs à l'enregistrement, qui peuvent être spécifiques à une copie particulière du fichier (par exemple, différentes copies d'un même enregistrement peuvent contenir des commentaires différents, mis à jour par le propriétaire du fichier). Les documents peuvent inclure des mentions telles que « vérifié par », « approuvé par », etc.

    Gestion d'annuaire

    Renommer un fichier, déplacer un fichier (ou un sous-répertoire) d'un répertoire à un autre et supprimer un fichier sont des exemples d'opérations fournies par le système de fichiers pour la gestion des répertoires.

    Les opérations sur les métadonnées, telles que l'autorisation ou la restriction d'accès à un répertoire par différents utilisateurs ou groupes d'utilisateurs, sont généralement incluses.

    Maintenance du système de fichiers

    Lorsqu'un système de fichiers est utilisé, des répertoires, des fichiers et des enregistrements peuvent être ajoutés, supprimés ou modifiés. Cela entraîne généralement des inefficacités dans les structures de données sous-jacentes. Par exemple, des blocs logiquement séquentiels répartis sur le support de manière à provoquer des repositionnements excessifs, ou encore des blocs partiellement utilisés, voire vides, inclus dans des structures liées. Des structures incomplètes ou d'autres incohérences peuvent être dues à des erreurs de périphérique ou de support, à un délai insuffisant entre la détection d'une coupure de courant imminente et la coupure effective, à un arrêt système ou un retrait de support incorrects, et, très rarement, à des erreurs de codage du système de fichiers.

    Des routines spécialisées du système de fichiers permettent d'optimiser ou de réparer ces structures. Elles ne sont généralement pas appelées directement par l'utilisateur, mais déclenchées par le système de fichiers lui-même. Des compteurs internes du nombre de niveaux de structures et du nombre d'objets insérés peuvent être comparés à des seuils. Ces comparaisons peuvent entraîner la suspension de l'accès utilisateur à une structure spécifique (généralement au grand dam de l'utilisateur ou des utilisateurs concernés), ou déclencher des tâches asynchrones de faible priorité, voire les reporter à une période de faible activité. Ces routines peuvent parfois être appelées ou planifiées par l'administrateur système, notamment lors d'une défragmentation.

    API au niveau du noyau

    L'API est dite de niveau noyau lorsque le noyau fournit non seulement les interfaces aux développeurs du système de fichiers, mais constitue également l'espace dans lequel réside le code du système de fichiers.

    Il diffère de l'ancien schéma en ce que le noyau lui-même utilise ses propres mécanismes pour communiquer avec le pilote du système de fichiers et vice versa, contrairement à l'ancien schéma où c'était le noyau qui gérait l'organisation du système de fichiers et le système de fichiers qui accédait directement au matériel.

    Ce n'est pas le système le plus élégant, mais il résout les difficultés d'une réécriture majeure qu'impliquait l'ancien système.

    Les noyaux modulaires permettent d'ajouter des systèmes de fichiers comme n'importe quel module du noyau, même ceux de tiers. En revanche, les noyaux non modulaires nécessitent une recompilation du noyau avec le nouveau code du système de fichiers (et dans les noyaux propriétaires, cela rend impossible l'utilisation de systèmes de fichiers tiers).

    Les systèmes Unix et les systèmes de type Unix, tels que Linux, ont utilisé ce schéma modulaire.

    Une variante de ce schéma est utilisée dans MS-DOS (à partir de DOS 4.0) et les systèmes compatibles pour la prise en charge des CD-ROM et des systèmes de fichiers réseau. Au lieu d'ajouter du code au noyau, comme dans l'ancien schéma, ou d'utiliser les fonctionnalités du noyau, comme dans le schéma basé sur le noyau, ce schéma intercepte tous les appels à un fichier et détermine s'ils doivent être redirigés vers la fonction équivalente du noyau ou s'ils doivent être gérés par le pilote spécifique du système de fichiers. Ce dernier accède ensuite directement au contenu du disque via des fonctions BIOS de bas niveau .

    API basée sur les pilotes

    L'API est basée sur un pilote lorsque le noyau fournit des fonctionnalités mais que le code du système de fichiers réside totalement en dehors du noyau (même pas en tant que module d'un noyau modulaire).

    Il s'agit d'un système plus propre car le code du système de fichiers est totalement indépendant ; il permet de créer des systèmes de fichiers pour des noyaux à code source fermé et d'ajouter ou de supprimer en ligne des systèmes de fichiers.

    Les systèmes de fichiers installables (IFS) respectifs de Windows NT et OS/2 sont des exemples de ce schéma .

    API mixte basée sur le noyau et le pilote

    Dans cette API, tous les systèmes de fichiers se trouvent dans le noyau, comme dans les API basées sur le noyau, mais ils sont automatiquement interceptés par une autre API, basée sur un pilote, par le système d'exploitation.

    API espace utilisateur

    L'API se trouve dans l' espace utilisateur lorsque le système de fichiers n'utilise pas directement les fonctionnalités du noyau, mais accède aux disques à l'aide de fonctions de haut niveau du système d'exploitation et fournit des fonctions dans une bibliothèque qu'une série d'utilitaires utilisent pour accéder au système de fichiers.

    Ceci est utile pour la gestion des images disque.

    L'avantage est qu'un système de fichiers peut être rendu portable entre systèmes d'exploitation car les fonctions de haut niveau du système d'exploitation qu'il utilise peuvent être aussi courantes que le C ANSI, mais l'inconvénient est que l'API est unique à chaque application qui l'implémente.

    hfsutils et adflib sont des exemples de ce système .

    Interopérabilité entre les API des systèmes de fichiers

    Comme tous les systèmes de fichiers sur disque nécessitent des fonctions équivalentes fournies par le noyau, il est possible de porter facilement le code du système de fichiers d'une API à une autre, même s'ils sont de types différents.