FR 2912520 A1 20080815 FR 0753222 A 20070213 PROCÉDÉ DE GESTION DE FICHIERS La présente invention concerne le domaine de la gestion de fichiers numériques, et plus particulièrement de leur enregistrement, lecture et modification sur un support d'enregistrement. Plus précisément, elle concerne un procédé et un système de gestion de fichiers de données interagissant avec un système de fichier (file system) propre au système d'exploitation (operating system) de l'ordinateur. D'une manière habituelle, un nouveau fichier de données est enregistré en un emplacement d'une mémoire, par exemple d'un disque dur, en fonction des disponibilités d'espace mémoire. Dans le cas d'un enregistrement sur un disque dur, ce dernier est organisé en blocs initialisés au moment du formatage. Ces blocs sont répartis au moment du formatage sur les secteurs physiques de la mémoire. La gestion des fichiers de données sur un ordinateur est réalisée par le système de fichier du système d'exploitation de l'ordinateur. Le système de fichier d'un système d'exploitation met en oeuvre une ou plusieurs partitions sur un support d'enregistrement. Une partition comprend un espace de stockage destiné à l'enregistrement de fichiers de données quelconques, et un espace d'indexation dans lequel sont enregistrées les caractéristiques de l'espace de stockage, notamment les adresses des fichiers dans l'espace de stockage. Certains fichiers constituent des répertoires, regroupant des listes de caractéristiques relatives à des fichiers de données et à des répertoires appartenant à une même partition. Pour des supports d'enregistrement ayant un volume de stockage de taille élevée, par exemple plusieurs gigaoctets, les performances du système d'indexation du système de fichier sont dégradées lorsque le nombre de fichiers de données à enregistrer, lire ou modifier devient important dans un même répertoire. En effet, l'organisation des fichiers de type répertoire comprend une liste contenant un nombre très élevé d'occurrences à traiter, ce qui augmente le temps d'accès à un fichier de manière rédhibitoire lorsque le nombre de fichiers de données atteint plusieurs dizaines de milliers. Cette dégradation est augmentée par les phénomènes de fragmentations des fichiers de type répertoire se produisant lorsqu'un fichier de données doit être renommé ou effacé. Un autre mode d'organisation connu par le système de fichier Linux EXT3 propose une organisation des fichiers de type répertoire comprenant un système d'indexation interne de type B-Tree et, pour chaque fichier de données, le calcul d'un condensât du nom du fichier de données à partir du résultat d'une fonction de hachage, pour accélérer la recherche dans les répertoires contenant un nombre important de fichiers de données. Cette solution permet d'exploiter plusieurs centaines de milliers de fichiers de données dans un même répertoire. Toutefois, au-delà d'un certain seuil, les limites de la fonction de hachage ne permettent plus d'éviter des collisions conduisant à l'attribution d'un même condensât à deux fichiers de données de noms distincts. Pour le système de fichier EXT3, cette limite apparaît dès que le nombre de fichiers de données atteint environ 500.000 dans un même répertoire, pour des versions du noyau Linux 2.6. Le but de la présente invention est de remédier à cet inconvénient en proposant un procédé de gestion de fichiers robuste et rapide, permettant d'exploiter un nombre de fichiers de données limité uniquement par l'espace disponible de la mémoire, et non pas par les traitements effectués par le système de fichier sur les noms des fichiers de données. La solution selon l'invention ne limite donc pas la capacité d'exploiter des mémoires de stockage de masse, la seule limite étant la capacité physique de ces mémoires et non plus les modes d'exploitation proposés par le système de fichier. Elle permet de gérer de très grands nombres de fichiers de données, pour des applications telles que des serveurs de fichiers. Selon son acception la plus générale, l'invention concerne un procédé de gestion de fichiers, comportant une première étape d'organisation de la base de fichiers de données consistant à créer une arborescence de répertoires à M niveaux de N répertoires chacun, et des étapes d'enregistrement de fichiers de données consistant à : - appliquer une fonction de hachage sur l'identifiant d'un fichier de données Fi à enregistrer, - déterminer le chemin du répertoire Rdi de destination dans l'arborescence en fonction du résultat de l'étape précédente, enregistrer le fichier de données dans ledit répertoire Rdi à un emplacement fonction dudit résultat de l'étape de hachage, et des étapes de lecture de fichiers de données consistant à : - appliquer la même fonction de hachage sur l'identifiant d'un fichier de données Fi à lire, -déterminer le chemin du répertoire R,i cible dans 25 l'arborescence en fonction du résultat de l'étape précédente, - lire le fichier de données dans ledit répertoire R, i à un emplacement fonction dudit résultat de l'étape de hachage. 30 Pour utiliser des unités de stockage en parallèle et améliorer les performances (vitesse d'accès et/ou volume de mémoire), l'invention concerne selon un mode particulier de mise en oeuvre un procédé de gestion de fichiers selon la revendication précédente caractérisé en ce que les fichiers de données sont répartis sur Q unités de stockage, chaque unité de stockage correspondant à p niveaux de répertoires de N répertoires. Avantageusement, N est égal à 16, et la fonction de 5 hachage est la fonction SHA1. Un problème complémentaire de la gestion des fichiers concerne la protection de l'intégrité des données en cas d'accès simultanés au même fichier de données par deux applications. 10 Il est connu sur la plupart des systèmes d'exploitation de procéder à des verrouillages des fichiers de données au niveau du système de fichier, permettant d'interdire momentanément l'accès à un fichier de données en cours d'écriture ou de lecture. Ces solutions sont gérées 15 par le système de fichier, généralement à partir d'une table de verrouillage résiduelle en mémoire. L'inconvénient de ces solutions est qu'en cas d'accès à un fichier au travers d'un réseau, des interférences ou des erreurs peuvent se produire en cas d'accès à un même fichier à partir d'une pluralité 20 d'ordinateurs distants. Le brevet US6850969 propose une solution particulière permettant d'éviter l'utilisation de verrouillages. Ce brevet propose un contrôle a posteriori de la possibilité pour une application d'enregistrer des modifications dans un 25 fichier de données ouvert, et garantit que pendant cette opération dite atomique aucune autre application n'est intervenue sur le même fichier de données. On entendra par atomique au sens du présent brevet un ensemble de tâches indivisibles exécutées de manière consécutive sans 30 possibilités d'interruption, ni d'interférence par une opération tierce, avant l'achèvement de la totalité des tâches de l'opération dite atomique. Cette solution n'est pas satisfaisante car elle empêche l'aboutissement de certaines opérations lorsque 35 plusieurs applications effectuent des traitements au même moment sur un ensemble de fichiers en commun. Elle permet certes d'éviter l'altération des fichiers de données existants, mais au détriment d'un accès concurrent et sécurisé. En effet, cette solution impose que chaque traitement intervienne après que le précédent soit achevé. Elle n'est donc pas réellement adaptée à des traitements sur des fichiers contenant par exemple des données au format XML et qui peuvent être utilisés à tout moment par différentes applications concurrentes. À cet effet, l'invention concerne également un procédé de gestion de fichiers caractérisé en ce que chaque fichier de données comporte un en-tête et un corps. L'en-tête comporte A paramètres d'état du fichier de données dans le système de gestion de fichiers. Le corps comprend le contenu modifiable du fichier. Le procédé comporte une étape d'accès à un fichier de données cible provoquant la modification d'un desdits paramètres d'état vers un état interdisant un nouvel accès. La gestion de ces fichiers de données est indépendante 20 du système de fichier du système d'exploitation de l'ordinateur. L'invention sera mieux comprise à la lecture de la description qui suit, correspondant à des exemples non limitatifs de réalisation, se référant aux dessins annexés 25 où . - la figure 1 représente une vue schématique de l'arborescence mise en oeuvre par le procédé de gestion de fichiers selon l'invention, - les figures 2 à 8 représentent les schémas 30 fonctionnels de la gestion des fichiers, - la figure 9 représente le schéma d'utilisation du système de gestion de fichiers à travers un réseau, correspondant à un mode client-serveur. La figure 1 représente une vue schématique de l'arborescence mise en oeuvre par le procédé de gestion de fichiers selon l'invention. Les fichiers de données sont organisés selon une structure subdivisée, dans l'exemple décrit, en M = cinq niveaux (1 à 5). Chaque répertoire de chaque niveau (1 à 4), hormis le dernier niveau (5), contient N = 16 répertoires (10 à 12), (20 à 25), (30 à 35), (40 à 45). Le nom de chacun des 16 répertoires correspond à un chiffre hexadécimal entre 0 et f. Le nombre total de répertoires contenus dans la structure est de 16+162+163...+16M. Dans l'exemple décrit, l'arborescence comprend : - 69.904 répertoires de niveau (1 à 4), ne contenant 15 pas de fichiers de données, mais seulement des répertoires du niveau supérieur ; - 1.048.576 répertoires (50 à 55) de niveau (5) ; chaque répertoire contenant des fichiers permettant de stocker les fichiers de données. 20 Chaque répertoire (50 à 55) du dernier niveau (5) peut contenir un nombre L limité de fichiers de données, L étant choisi petit, par exemple de l'ordre de 1.000, pour permettre un temps d'accès rapide, et ce, quel que soit le système de fichier du système d'exploitation de 25 l'ordinateur. Attribution d'un emplacement mémoire à un fichier de données Lorsque l'on procède à la création d'un nouveau 30 fichier de données, désigné par un nom d'usage unique formé par une chaîne de caractères, le procédé consiste à appliquer une fonction de hachage Hi sur cette chaîne de caractères représentant le nom d'usage, dont le résultat sera constitué par une valeur représentée sous une forme hexadécimale. Pour une fonction de hachage SHA1, le résultat sous forme hexadécimale comprendra 40 chiffres hexadécimaux entre 0 et f. Le procédé consiste à déterminer, dans le contexte de l'arborescence de répertoires précédemment définie et à partir de ce résultat de la fonction de hachage, un chemin de répertoire dans ladite arborescence. Le rang de chacun des M premiers chiffres du résultat de la fonction de hachage correspondra à un niveau de 10 l'arborescence de répertoires. Si on prend un exemple de nom d'usage myfile , l'application de la fonction SHA1 retourne la valeur b3580ab45cbO88ba47ffO70aa8lc2daelbe56ca2 . Le répertoire du niveau (1) sera celui portant le nom 15 b , correspondant au premier caractère de la valeur SHA1, le répertoire du niveau (2) sera 3 , correspondant au second caractère, et ainsi de suite pour les 5 niveaux (1 à 5). L'emplacement dans le dernier répertoire (5) sera constitué par la représentation hexadécimale à deux chiffres 20 des octets de chacun des caractères constituant le nom d'usage. Pour le nom myfile , l'emplacement et le nom du fichier seront 6d7966696c65 , 6d correspondant à la représentation hexadécimale à deux chiffres du caractère m , 79 correspondant à la représentation hexadécimale 25 à deux chiffres du caractère y , 66 correspondant à la représentation hexadécimale à deux chiffres du caractère f , et ainsi de suite. Pour des caractères nécessitant un codage sur plusieurs octets, l'ensemble des octets sera successivement 30 représenté sous cette forme. En raison de l'unicité du nom d'usage du fichier de données, la désignation du fichier sera nécessairement unique car elle résulte de la combinaison d'un emplacement calculé à partir de la fonction de hachage et d'un nom de fichier de données calculé de façon unique à partir du nom d'usage. Cette solution permet de répartir de manière équiprobable et avec une dispersion maximale les fichiers de données dans les répertoires de niveau M de l'arborescence de répertoires. Seul le niveau M contient des fichiers de données, les niveaux intermédiaires ne contenant pas de fichiers de données et servant uniquement à la répartition des fichiers dans les répertoires de niveau M. À l'intérieur de chaque répertoire de niveau M, le nombre de fichiers de données est raisonnable, par exemple de l'ordre de 1.000, ce qui conduit à des temps d'accès rapides. Le nombre maximum de fichiers de données qui peut être créé dans une arborescence de niveau M est égal à 1.000 x 16M. Par exemple, pour M = 5, il est possible de créer, écrire ou lire environ 1 milliard de fichiers de données dans une arborescence de répertoires de niveau M. Création, écriture, lecture et effacement d'un fichier 20 de données La première étape consiste à déterminer, à partir du nom d'usage du fichier, son chemin d'accès dans l'arborescence ainsi que son nom de fichier associé, par 25 application de la fonction de hachage précédemment mentionnée et par le calcul du nom du fichier à partir du nom d'usage. Cette étape permet de déterminer dans quel répertoire de niveau M est enregistré le fichier et son emplacement dans ce répertoire. 30 Accès concurrent à un même fichier de données Pour permettre une gestion sécurisée des accès aux fichiers de données, ces derniers comprennent chacun un en- 35 tête et un corps. Le corps comprend le contenu modifiable du fichier, sous une forme directement accessible ou sous forme compressée ou chiffrée. Ce corps est précédé d'un en-tête comportant des paramètres d'état du fichier dans le système de gestion de fichiers. De manière systématique, l'accès à un fichier par un traitement, pour une série d'opérations quelconques (écriture, lecture, modification ou effacement), se traduit par une première étape d'acquisition consistant à modifier un desdits paramètres d'état de l'en-tête vers un état interdisant un nouvel accès par un autre traitement. Bien entendu, lorsque le fichier est en cours d'accès ou d'utilisation par un traitement, un autre traitement rencontrera, lors de cette étape initiale d'acquisition, une notification d'interdiction ou d'attente. L'autre traitement réitère cette étape initiale d'acquisition jusqu'à ce que le fichier cible soit de nouveau dans un état autorisant l'accès, ou jusqu'à ce qu'un délai prédéterminé provoque l'interruption des tentatives d'accès. Une fois la série d'opérations achevée par le traitement, une dernière étape de libération restaure l'état initial du paramètre modifié dans l'en-tête, permettant ainsi à un autre traitement d'accéder au fichier de données. Les figures 2 à 8 représentent les structures de fonctions mises en oeuvre par l'invention. Fonction d'acquisition d'un fichier de données existant La figure 2 représente la succession de tâches nécessaires pour l'acquisition d'un fichier de données existant. La fonction prend en entrée (150) le nom d'un fichier 35 calculé à partir du nom d'usage comme exposé précédemment. La première tâche (100) consiste à tenter l'ouverture et le verrouillage simultanés du fichier au niveau du système de fichier du système d'exploitation, en demandant une ouverture et un verrouillage du fichier empêchant jusqu'à sa fermeture et son déverrouillage l'ouverture et le verrouillage de ce fichier par un traitement postérieur. La fonction procède ensuite à un test (101) pour vérifier l'ouverture et le verrouillage du fichier : si le fichier n'est pas ouvert et verrouillé, le résultat du test (101) est négatif et la fonction procède à un deuxième test (102) qui vérifie si le fichier existait lors de la tentative (100). En cas de réponse négative, la fonction renvoie une erreur (103) indiquant que le fichier n'existe pas. En cas de réponse positive, un test (104) vérifie si le nombre de tentatives (100) dépasse une valeur seuil, ou si le délai temporel est dépassé, et engage une nouvelle tentative (100) après une temporisation (149) en cas de réponse négative ; sinon, la fonction retourne une erreur système (105). Si le résultat du test (101) est positif, la fonction lit l'état de disponibilité du fichier dans un paramètre d'état de l'en-tête du fichier lors d'une tâche (106). La fonction procède ensuite à un test (107) de disponibilité du fichier en fonction de la valeur du paramètre d'état. Si le résultat du test (107) est négatif, correspondant à un état d'indisponibilité, la fonction procède à une tâche (108) de fermeture et de déverrouillage simultanés du fichier au niveau du système de fichier du système d'exploitation. La fonction réalise ensuite un test (109) qui vérifie si le nombre de tentatives (100) dépasse une valeur seuil, ou si le délai temporel est dépassé, et engage une nouvelle tentative (100) après une temporisation (149) en cas de réponse négative ; sinon, la fonction retourne une erreur (110) indiquant que le fichier reste acquis par un traitement en cours. Si le résultat du test (107) est positif, la fonction procède à une tâche (111) d'écriture de l'état d'indisponibilité du fichier dans un paramètre d'état de l'en-tête du fichier, puis une tâche (112) de calcul d'un identifiant d'acquisition du fichier, une tâche (113) d'écriture de cet identifiant dans un paramètre d'état de l'en-tête du fichier, et une tâche (114) de lecture du corps du fichier. La tâche (115) correspond à un traitement du corps du fichier pour extraire le contenu modifiable du fichier. Ce traitement s'effectue en fonction de paramètres d'état de l'en-tête du fichier. Il correspond par exemple à une décompression ou un déchiffrage du contenu modifiable du fichier. La dernière tâche (116) consiste à fermer et déverrouiller simultanément le fichier au niveau du système de fichier du système d'exploitation. La fonction renvoie en sortie à son achèvement (151) la confirmation de l'acquisition du fichier de données, l'identifiant d'acquisition du fichier et le contenu modifiable du fichier. Fonction d'acquisition d'un fichier de données nouveau 25 La figure 3 représente la succession de tâches nécessaires pour l'acquisition d'un fichier de données nouveau. La fonction prend en entrée (250) le nom d'un fichier 30 calculé à partir du nom d'usage comme exposé précédemment. La première tâche (200) consiste à tenter la création, l'ouverture et le verrouillage simultanés d'un nouveau fichier au niveau du système de fichier du système d'exploitation, en demandant une création, une ouverture et 35 un verrouillage du fichier empêchant jusqu'à sa fermeture et son déverrouillage l'ouverture et le verrouillage de ce fichier par un traitement postérieur. La fonction procède ensuite à un test (201) pour vérifier la création, l'ouverture et le verrouillage du fichier si le fichier n'est pas créé, ouvert et verrouillé, le résultat du test (201) est négatif et la fonction procède à un deuxième test (202) qui vérifie si le fichier existait lors de la tentative (200). En cas de réponse positive, la fonction retourne une erreur (204) indiquant que le fichier existe déjà. En cas de réponse négative, la fonction renvoie une erreur (203) indiquant une erreur système. Si le résultat du test (201) est positif, la fonction procède à une tâche (205) de création et d'écriture de l'en- tête du fichier avec un corps du fichier vide, puis une tâche (206) d'écriture de l'état d'indisponibilité du fichier dans un paramètre d'état de l'en-tête du fichier, puis une tâche (207) de calcul d'un identifiant d'acquisition du fichier, une tâche (208) d'écriture de cet identifiant dans un paramètre d'état de l'en-tête du fichier. La dernière tâche (209) consiste à fermer et déverrouiller simultanément le fichier au niveau du système de fichier du système d'exploitation. La fonction renvoie en sortie à son achèvement (251) 25 la confirmation de l'acquisition du fichier de données et l'identifiant d'acquisition du fichier. Fonction d'acquisition d'un fichier de données existant avec création du fichier s'il n'existe pas 30 La figure 4 représente la succession de tâches nécessaires pour l'acquisition d'un fichier de données existant avec création du fichier s'il n'existe pas. La fonction prend en entrée (350) le nom d'un fichier 35 calculé à partir du nom d'usage comme exposé précédemment. La première tâche (300) consiste à tenter l'ouverture et le verrouillage simultanés du fichier au niveau du système de fichier du système d'exploitation, et à créer le fichier s'il n'existe pas, en demandant une ouverture et un verrouillage du fichier empêchant jusqu'à sa fermeture et son déverrouillage l'ouverture et le verrouillage de ce fichier par un traitement postérieur. La fonction procède ensuite à un test (301) pour vérifier l'ouverture et le verrouillage du fichier : si le fichier n'est pas ouvert et verrouillé, le résultat du test (301) est négatif et la fonction procède à un deuxième test (302) qui vérifie si le fichier existait lors de la tentative (300). En cas de réponse négative, la fonction renvoie une erreur système (303). En cas de réponse positive, un test (304) vérifie si le nombre de tentatives (300) dépasse une valeur seuil, ou si le délai temporel est dépassé, et engage une nouvelle tentative (300) après une temporisation (349) en cas de réponse négative ; sinon, la fonction retourne une erreur système (305). Si le résultat du test (301) est positif, la fonction procède ensuite à un test (306) pour vérifier si le fichier a été lors de la tentative (300) : si le fichier n'a pas été créé, le résultat du test (306) est négatif et la fonction lit l'état de disponibilité du fichier dans un paramètre d'état de l'en-tête du fichier lors d'une tâche (307). La fonction procède ensuite à un test (308) de disponibilité du fichier en fonction de la valeur du paramètre d'état. Si le résultat du test (308) est négatif, correspondant à un état d'indisponibilité, la fonction procède à une tâche (309) de fermeture et de déverrouillage simultanés du fichier au niveau du système de fichier du système d'exploitation. La fonction réalise ensuite un test (310) qui vérifie si le nombre de tentatives (300) dépasse une valeur seuil, ou si le délai temporel est dépassé, et engage une nouvelle tentative (300) après une temporisation (349) en cas de réponse négative ; sinon, la fonction retourne une erreur (311) indiquant que le fichier reste acquis par un traitement en cours. Si le résultat du test (308) est positif, la fonction procède à une tâche (312) d'écriture de l'état d'indisponibilité du fichier dans un paramètre d'état de l'en-tête du fichier, puis une tâche (313) de calcul d'un identifiant d'acquisition du fichier, une tâche (314) d'écriture de cet identifiant dans un paramètre d'état de l'en-tête du fichier, et une tâche (315) de lecture du corps du fichier. La tâche (316) correspond à un traitement du corps du fichier pour extraire le contenu modifiable du fichier. Ce traitement s'effectue en fonction de paramètres d'état de l'en-tête du fichier. Il correspond par exemple à une décompression ou un déchiffrage du contenu modifiable du fichier. La tâche (317) consiste à fermer et déverrouiller simultanément le fichier au niveau du système de fichier du système d'exploitation. La fonction renvoie en sortie à son achèvement (351) la confirmation de l'acquisition du fichier de données, une notification indiquant que le fichier n'a pas été créé, l'identifiant d'acquisition du fichier et le contenu modifiable du fichier. Si le résultat du test (306) est positif, la fonction procède à une tâche (318) de création et d'écriture de l'en- tête du fichier avec un corps du fichier vide, puis une tâche (319) d'écriture de l'état d'indisponibilité du fichier dans un paramètre d'état de l'en-tête du fichier, puis une tâche (320) de calcul d'un identifiant d'acquisition du fichier, une tâche (321) d'écriture de cet identifiant dans un paramètre d'état de l'en-tête du fichier. La dernière tâche (322) consiste à fermer et déverrouiller simultanément le fichier au niveau du système de fichier du système d'exploitation. La fonction renvoie en sortie à son achèvement (352) la confirmation de l'acquisition du fichier de données, une notification indiquant que le fichier a été créé et l'identifiant d'acquisition du fichier. Fonction de libération d'un fichier de données acquis 10 sans modification des données La figure 5 représente la succession de tâches nécessaires pour la libération d'un fichier de données acquis sans modification des données. 15 La fonction prend en entrée (450) le nom d'un fichier calculé à partir du nom d'usage comme exposé précédemment et un identifiant d'acquisition renvoyé lors d'une acquisition précédente du fichier de données. La première tâche (400) consiste à tenter l'ouverture 20 et le verrouillage simultanés du fichier au niveau du système de fichier du système d'exploitation, en demandant une ouverture et un verrouillage du fichier empêchant jusqu'à sa fermeture et son déverrouillage l'ouverture et le verrouillage de ce fichier par un traitement postérieur. 25 La fonction procède ensuite à un test (401) pour vérifier l'ouverture et le verrouillage du fichier : si le fichier n'est pas ouvert et verrouillé, le résultat du test (401) est négatif et la fonction procède à un deuxième test (402) qui vérifie si le fichier existait lors de la 30 tentative (400). En cas de réponse négative, la fonction renvoie une erreur (403) indiquant que le fichier n'existe pas. En cas de réponse positive, un test (404) vérifie si le nombre de tentatives (400) dépasse une valeur seuil, ou 35 si le délai temporel est dépassé, et engage une nouvelle tentative (400) après une temporisation (449) en cas de réponse négative ; sinon, la fonction retourne une erreur système (405). Si le résultat du test (401) est positif, la fonction lit l'état de disponibilité du fichier dans un paramètre d'état de l'en-tête du fichier lors d'une tâche (406). La fonction procède ensuite à un test (407) de disponibilité du fichier en fonction de la valeur du paramètre d'état. Si le résultat du test (407) est positif, la fonction procède à une tâche (408) de fermeture et de déverrouillage simultanés du fichier au niveau du système de fichier du système d'exploitation et renvoie une erreur (409) indiquant que le fichier n'est pas acquis. Si le résultat du test (407) est négatif, correspondant à un état d'indisponibilité, la fonction lit l'identifiant d'acquisition dans l'en-tête du fichier lors d'une tâche (410). La fonction réalise ensuite un test (411) qui contrôle si cet identifiant est différent de l'identifiant soumis en entrée. En cas de réponse positive, la fonction procède à une tâche (412) de fermeture et de déverrouillage simultanés du fichier au niveau du système de fichier du système d'exploitation et renvoie une erreur (413) indiquant que l'identifiant d'acquisition soumis en entrée n'est pas valide. En cas de réponse négative, la fonction procède à une tâche (414) d'effacement de l'identifiant d'acquisition dans le paramètre d'état de l'en-tête du fichier, puis une tâche (415) d'écriture de l'état de disponibilité dans l'en-tête du fichier. La dernière tâche (416) consiste à fermer et déverrouiller simultanément lefichier au niveau du système de fichier du système d'exploitation. La fonction renvoie en sortie à son achèvement (451) 35 la confirmation de la libération du fichier de données. Fonction de libération d'un fichier de données acquis avec modification des données La figure 6 représente la succession de tâches nécessaires pour la libération d'un fichier de données acquis avec modification des données. La fonction prend en entrée (550) le nom d'un fichier calculé à partir du nom d'usage comme exposé précédemment, un identifiant d'acquisition renvoyé lors d'une acquisition précédente du fichier de données et le contenu modifiable du fichier. La première tâche (500) consiste à tenter l'ouverture et le verrouillage simultanés du fichier au niveau du système de fichier du système d'exploitation, en demandant une ouverture et un verrouillage du fichier empêchant jusqu'à sa fermeture et son déverrouillage l'ouverture et le verrouillage de ce fichier par un traitement postérieur. La fonction procède ensuite à un test (501) pour vérifier l'ouverture et le verrouillage du fichier : si le fichier n'est pas ouvert et verrouillé, le résultat du test (501) est négatif et la fonction procède à un deuxième test (502) qui vérifie si le fichier existait lors de la tentative (500). En cas de réponse négative, la fonction renvoie une erreur (503) indiquant que le fichier n'existe pas. En cas de réponse positive, un test (504) vérifie si le nombre de tentatives (500) dépasse une valeur seuil, ou si le délai temporel est dépassé, et engage une nouvelle tentative (500) après une temporisation (549) en cas de réponse négative ; sinon, la fonction retourne une erreur système (505). Si le résultat du test (501) est positif, la fonction lit l'état de disponibilité du fichier dans un paramètre 35 d'état de l'en-tête du fichier lors d'une tâche (506). La fonction procède ensuite à un test (507) de disponibilité du fichier en fonction de la valeur du paramètre d'état. Si le résultat du test (507) est positif, la fonction procède à une tâche (508) de fermeture et de déverrouillage simultanés du fichier au niveau du système de fichier du système d'exploitation et renvoie une erreur (509) indiquant que le fichier n'est pas acquis. Si le résultat du test (507) est négatif, correspondant à un état d'indisponibilité, la fonction lit l'identifiant d'acquisition dans l'en-tête du fichier lors d'une tâche (510). La fonction réalise ensuite un test (511) qui contrôle si cet identifiant est différent de l'identifiant soumis en entrée. En cas de réponse positive, la fonction procède à une tâche (512) de fermeture et de déverrouillage simultanés du fichier au niveau du système de fichier du système d'exploitation et renvoie une erreur (513) indiquant que l'identifiant d'acquisition soumis en entrée n'est pas valide. En cas de réponse négative, la fonction procède à une tâche (514) d'effacement de l'identifiant d'acquisition dans le paramètre d'état de l'en-tête du fichier, puis une tâche (515) d'écriture de l'état de disponibilité dans l'en-tête du fichier, puis une tâche (516) correspondant à un traitement du corps du fichier pour y insérer le contenu modifiable du fichier. Ce traitement s'effectue en fonction de paramètres d'état de l'en-tête du fichier et correspond par exemple à une compression ou un chiffrage du contenu modifiable du fichier. La fonction procède ensuite à une tâche (517) d'écriture du corps du fichier et la dernière tâche (518) consiste à fermer et déverrouiller simultanément le fichier au niveau du système de fichier du système d'exploitation. La fonction renvoie en sortie à son achèvement (551) la confirmation de la libération du fichier de données et de la modification du contenu du fichier. Fonction de libération d'un fichier de données acquis avec effacement du fichier La figure 7 représente la succession de tâches nécessaires pour la libération d'un fichier de données 10 acquis avec effacement du fichier. La fonction prend en entrée (650) le nom d'un fichier calculé à partir du nom d'usage comme exposé précédemment et un identifiant d'acquisition renvoyé lors d'une acquisition précédente du fichier de données. 15 La première tâche (600) consiste à tenter l'ouverture et le verrouillage simultanés du fichier au niveau du système de fichier du système d'exploitation, en demandant une ouverture et un verrouillage du fichier empêchant jusqu'à sa fermeture et son déverrouillage l'ouverture et le 20 verrouillage de ce fichier par un traitement postérieur. La fonction procède ensuite à un test (601) pour vérifier l'ouverture et le verrouillage du fichier : si le fichier n'est pas ouvert et verrouillé, le résultat du test (601) est négatif et la fonction procède à un deuxième test 25 (602) qui vérifie si le fichier existait lors de la tentative (600). En cas de réponse négative, la fonction renvoie une erreur (603) indiquant que le fichier n'existe pas. En cas de réponse positive, un test (604) vérifie si 30 le nombre de tentatives (600) dépasse une valeur seuil, ou si le délai temporel est dépassé, et engage une nouvelle tentative (600) après une temporisation (649) en cas de réponse négative ; sinon, la fonction retourne une erreur système (605). Si le résultat du test (601) est positif, la fonction lit l'état de disponibilité du fichier dans un paramètre d'état de l'en-tête du fichier lors d'une tâche (606). La fonction procède ensuite à un test (607) de disponibilité du fichier en fonction de la valeur du paramètre d'état. Si le résultat du test (607) est positif, la fonction procède à une tâche (608) de fermeture et de déverrouillage simultanés du fichier au niveau du système de fichier du système d'exploitation et renvoie une erreur (609) indiquant que le fichier n'est pas acquis. Si le résultat du test (607) est négatif, correspondant à un état d'indisponibilité, la fonction lit l'identifiant d'acquisition dans l'en-tête du fichier lors d'une tâche (610). La fonction réalise ensuite un test (611) qui contrôle si cet identifiant est différent de l'identifiant soumis en entrée. En cas de réponse positive, la fonction procède à une tâche (612) de fermeture et de déverrouillage simultanés du fichier au niveau du système de fichier du système d'exploitation et renvoie une erreur (613) indiquant que l'identifiant d'acquisition soumis en entrée n'est pas valide. En cas de réponse négative, la fonction procède à une tâche (614) d'effacement de l'identifiant d'acquisition dans le paramètre d'état de l'en-tête du fichier, puis une tâche (615) d'écriture de l'état de disponibilité dans l'en-tête du fichier. La dernière tâche (616) consiste à fermer, déverrouiller et effacer simultanément le fichier au niveau du système de fichier du système d'exploitation. La fonction renvoie en sortie à son achèvement (651) la confirmation de la libération du fichier de données et de son effacement. Fonction de lecture simple d'un fichier de données existant sans acquisition du fichier La figure 8 représente la succession de tâches 5 nécessaires pour la lecture simple d'un fichier de données existant sans acquisition du fichier. La fonction prend en entrée (750) le nom d'un fichier calculé à partir du nom d'usage comme exposé précédemment. La première tâche (700) consiste à tenter l'ouverture 10 et le verrouillage simultanés du fichier au niveau du système de fichier du système d'exploitation, en demandant une ouverture et un verrouillage du fichier empêchant jusqu'à sa fermeture et son déverrouillage l'ouverture et le verrouillage de ce fichier par un traitement postérieur. 15 La fonction procède ensuite à un test (701) pour vérifier l'ouverture et le verrouillage du fichier : si le fichier n'est pas ouvert et verrouillé, le résultat du test (701) est négatif et la fonction procède à un deuxième test (702) qui vérifie si le fichier existait lors de la 20 tentative (700). En cas de réponse négative, la fonction renvoie une erreur (703) indiquant que le fichier n'existe pas. En cas de réponse positive, un test (704) vérifie si le nombre de tentatives (700) dépasse une valeur seuil, ou 25 si le délai temporel est dépassé, et engage une nouvelle tentative (700) après une temporisation (749) en cas de réponse négative ; sinon, la fonction retourne une erreur système (705). Si le résultat du test (701) est positif, la fonction 30 lit l'état de disponibilité du fichier dans un paramètre d'état de l'en-tête du fichier lors d'une tâche (706). La fonction procède ensuite à un test (707) de disponibilité du fichier en fonction de la valeur du paramètre d'état. Si le résultat du test (707) est négatif, correspondant à un état d'indisponibilité, la fonction procède à une tâche (708) de fermeture et de déverrouillage simultanés du fichier au niveau du système de fichier du système d'exploitation. La fonction réalise ensuite un test (709) qui vérifie si le nombre de tentatives (700) dépasse une valeur seuil, ou si le délai temporel est dépassé, et engage une nouvelle tentative (700) après une temporisation (749) en cas de réponse négative ; sinon, la fonction retourne une erreur (710) indiquant que le fichier reste acquis par un traitement en cours. Si le résultat du test (707) est positif, la fonction procède à une tâche (711) de lecture du corps du fichier, puis une tâche (712) de traitement du corps du fichier pour extraire le contenu modifiable du fichier. Ce traitement s'effectue en fonction de paramètres d'état de l'en-tête du fichier. Il correspond par exemple à une décompression ou un déchiffrage du contenu modifiable du fichier. La dernière tâche (713) consiste à fermer et déverrouiller simultanément le fichier au niveau du système de fichier du système d'exploitation. La fonction renvoie en sortie à son achèvement (751) la confirmation de la lecture simple du fichier de données 25 et le contenu modifiable du fichier. D'autres fonctions permettent de faciliter l'administration de l'arborescence, notamment : - la lecture des paramètres d'état de l'en-tête d'un 30 fichier de données, incluant l'état de disponibilité du fichier, - la libération forcée d'un fichier de données qui n'a pas été libéré par un traitement, - le listage des fichiers de données contenus dans l'arborescence par sous-ensembles de l'arborescence. Mode client-serveur La figure 9 concerne un cas d'application particulier et préféré. Elle représente la succession de tâches nécessaires pour l'utilisation du système de gestion de fichiers conforme à l'invention à travers un réseau, 10 correspondant à un mode client-serveur. Dans ce cas, le système de gestion de fichiers est installé sur un ordinateur serveur (800) qui comporte un logiciel serveur (801). L'ordinateur serveur est accessible 15 20 par une pluralité comportent chacun échanges entre les par exemple HTTP type HTTPS. L'invention applicatif (808)d'ordinateurs clients (802 à 804) qui un logiciel client (805 à 807). Les logiciels clients et le logiciel serveur réseau de transport de type connu, préférence un protocole sécurisé de met dans ce cas en oeuvre un protocole permettant d'appeler les fonctions du utilisent un protocole ou de système de gestion de fichiers conforme à l'invention par des commandes de type acquisition de fichier ou libération de fichier . Les fichiers sont répartis au 25 niveau de l'ordinateur serveur en plusieurs sous ensembles (809 à 811), chaque sous-ensemble correspondant à une arborescence conforme à l'invention, appelée table . Le nom d'usage du fichier de données est désigné dans le protocole par clé . 30 La première tâche (812) est exécutée sur l'un des ordinateurs clients par le logiciel client. Elle consiste à appeler une fonction d'acquisition, de libération ou de lecture simple portant sur une table et une clé. La deuxième tâche (813) est exécutée par le logiciel serveur sur l'ordinateur serveur. Elle consiste à exécuter la fonction demandée par le logiciel client. La troisième tâche (814) est exécutée par le logiciel serveur sur l'ordinateur serveur. Elle consiste à renvoyer au logiciel client le résultat de la fonction demandée. Optionnellement, le système comporte plusieurs serveurs, permettant de répartir la charge et le volume de stockage des données. Dans ce cas, le logiciel client (805 à 807) comporte des règles de sélection du serveur en fonction des tables et des clés. Le logiciel serveur (801) peut également comporter des fonctionnalités de journalisation des opérations exécutées pour permettre la reconstruction incrémentale des arborescences de l'ordinateur serveur sur un serveur de secours sans effectuer une recopie complète des arborescences sur le serveur de secours. REVENDICATIONS 1 - Procédé de gestion de fichiers, comportant une première étape d'organisation de la base de fichiers de données consistant à créer une arborescence de répertoires à M niveaux de N répertoires chacun, et des étapes d'enregistrement de fichiers de données consistant à : - appliquer une fonction de hachage sur l'identifiant d'un fichier de données Fi à enregistrer, - déterminer le chemin du répertoire Rdi de destination dans l'arborescence en fonction du résultat de l'étape précédente, enregistrer le fichier de données dans ledit répertoire Rdi à un emplacement fonction dudit résultat de 15 l'étape de hachage, et des étapes de lecture de fichiers de données consistant à : - appliquer la même fonction de hachage sur l'identifiant d'un fichier de données Fi à lire, 20 - déterminer le chemin du répertoire R,i cible dans l'arborescence en fonction du résultat de l'étape précédente, - lire le fichier de données dans ledit répertoire Rd] à un emplacement fonction dudit résultat de l'étape de 25 hachage. 2 - Procédé de gestion de fichiers selon la revendication précédente, caractérisé en ce que les fichiers de données sont répartis sur Q unités de stockage, chaque 30 unité de stockage correspondant à p niveaux de répertoires de N répertoires. 3 - Procédé de gestion de fichiers selon l'une quelconque des revendications précédentes, caractérisé en ceque N est égal à 16, et en ce que la fonction de hachage est la fonction SHA1. 4 - Procédé de gestion de fichiers selon l'une quelconque des revendications précédentes, caractérisé en ce que chaque fichier de données comporte un en-tête et un corps, le corps comprenant le contenu modifiable du fichier, le corps étant précédé par un en-tête comportant des paramètres d'état du fichier dans le système de gestion de fichiers, le procédé comportant une étape préalable d'acquisition d'un fichier cible par un traitement pour une série d'opérations, l'acquisition provoquant un changement d'état d'un au moins des paramètres de l'en-tête, ce changement d'état empêchant l'acquisition par un autre traitement jusqu'à sa libération. 5 - Procédé de gestion de fichiers selon l'une quelconque des revendications précédentes, caractérisé en ce que les opérations d'acquisition, de lecture et de libération sont commandées par un logiciel client, et les étapes correspondantes sont exécutées par un logiciel serveur. 6 - Procédé de gestion de fichiers selon l'une quelconque des revendications précédentes, caractérisé en ce qu'il comporte une étape d'acquisition d'un fichier de données existant prenant en entrée (150) le nom d'un fichier calculé à partir du nom d'usage, ladite étape comprenant une première tâche (100) consistant à tenter l'ouverture et le verrouillage simultanés du fichier au niveau du système de fichier du système d'exploitation, en demandant une ouverture et un verrouillage du fichier empêchant jusqu'à sa fermeture et son déverrouillage l'ouverture et le verrouillage de ce fichier par un traitement postérieur.35 7 - Procédé de gestion de fichiers selon l'une quelconque des revendications précédentes, caractérisé en ce qu'il comporte une étape d'acquisition d'un fichier de données nouveau prenant en entrée (250) le nom d'un fichier calculé à partir du nom d'usage, la première tâche (200) consistant à tenter la création, l'ouverture et le verrouillage simultanés d'un nouveau fichier au niveau du système de fichier du système d'exploitation, en demandant une création, une ouverture et un verrouillage du fichier empêchant jusqu'à sa fermeture et son déverrouillage l'ouverture et le verrouillage de ce fichier par un traitement postérieur. 8 - Procédé de gestion de fichiers selon l'une quelconque des revendications précédentes, caractérisé en ce qu'il comporte une étape d'acquisition d'un fichier de données existant avec création du fichier s'il n'existe pas, la fonction prenant en entrée (350) le nom d'un fichier calculé à partir du nom d'usage, la première tâche (300) consistant à tenter l'ouverture et le verrouillage simultanés du fichier au niveau du système de fichier du système d'exploitation, et à créer le fichier s'il n'existe pas, en demandant une ouverture et un verrouillage du fichier empêchant jusqu'à sa fermeture et son déverrouillage l'ouverture et le verrouillage de ce fichier par un traitement postérieur. 9 - Procédé de gestion de fichiers selon l'une quelconque des revendications précédentes, caractérisé en ce qu'il comporte une étape de libération d'un fichier de données acquis sans modification des données, la fonction prenant en entrée (450) le nom d'un fichier calculé à partir du nom d'usage comme exposé précédemment et un identifiant d'acquisition renvoyé lors d'une acquisition précédente du fichier de données, la première tâche (400) consistant àtenter l'ouverture et le verrouillage simultanés du fichier au niveau du système de fichier du système d'exploitation, en demandant une ouverture et un verrouillage du fichier empêchant jusqu'à sa fermeture et son déverrouillage l'ouverture et le verrouillage de ce fichier par un traitement postérieur. - Procédé de gestion de fichiers selon l'une quelconque des revendications précédentes, caractérisé en ce 10 qu'il comporte une étape de libération d'un fichier de données acquis avec modification des données, la fonction prenant en entrée (550) le nom d'un fichier calculé à partir du nom d'usage comme exposé précédemment, un identifiant d'acquisition renvoyé lors d'une acquisition précédente du fichier de données et le contenu modifiable du fichier, la première tâche (500) consistant à tenter l'ouverture et le verrouillage simultanés du fichier au niveau du système de fichier du système d'exploitation, en demandant une ouverture et un verrouillage du fichier empêchant jusqu'à sa fermeture et son déverrouillage l'ouverture et le verrouillage de ce fichier par un traitement postérieur. 11 Procédé de gestion de fichiers selon l'une quelconque des revendications précédentes, caractérisé en ce qu'il comporte une étape de libération d'un fichier de données acquis avec effacement du fichier, la fonction prenant en entrée (650) le nom d'un fichier calculé à partir du nom d'usage comme exposé précédemment et un identifiant d'acquisition renvoyé lors d'une acquisition précédente du fichier de données, la première tâche (600) consistant à tenter l'ouverture et le verrouillage simultanés du fichier au niveau du système de fichier du système d'exploitation, en demandant une ouverture et un verrouillage du fichier empêchant jusqu'à sa fermeture et son déverrouillagel'ouverture et le verrouillage de ce fichier par un traitement postérieur. 12 - Procédé de gestion de fichiers selon l'une quelconque des revendications précédentes, caractérisé en ce qu'il comporte une étape de lecture simple d'un fichier de données existant sans acquisition du fichier, la fonction prenant en entrée (750) le nom d'un fichier calculé à partir du nom d'usage comme exposé précédemment, la première tâche (700) consistant à tenter l'ouverture et le verrouillage simultanés du fichier au niveau du système de fichier du système d'exploitation, en demandant une ouverture et un verrouillage du fichier empêchant jusqu'à sa fermeture et son déverrouillage l'ouverture et le verrouillage de ce fichier par un traitement postérieur.