web-dev-qa-db-fra.com

Structures de données utilisées pour construire des systèmes de fichiers?

Quelle structure de données est préférable d'utiliser pour l'organisation des fichiers? Les B-Trees sont-ils les meilleurs ou existe-t-il une autre structure de données qui permet un accès plus rapide aux fichiers et une bonne organisation? Merci

29
Bernice

Tous les systèmes de fichiers sont différents, il existe donc un grand nombre de structures de données qui sont réellement utilisées dans les systèmes de fichiers.

De nombreux systèmes de fichiers utilisent une sorte de vecteur de bits (généralement appelé bitmap) pour suivre où se trouvent certains blocs libres, car ils ont d'excellentes performances pour demander si un bloc de disque spécifique est utilisé et ( pour les disques qui ne sont pas écrasants) prennent en charge des recherches assez rapides de blocs libres.

De nombreux systèmes de fichiers plus anciens (ext et ext2) stockaient des structures de répertoires à l'aide de simples listes liées. Apparemment, cela était en fait assez rapide pour la plupart des applications, bien que certains types d'applications qui utilisaient de nombreux répertoires volumineux aient souffert de performances notables.

Le système de fichiers XFS était célèbre pour utiliser B + -trees pour à peu près tout, y compris les structures de répertoires et son système de journalisation. D'après ce que je me souviens de mon cours de premier cycle sur le système d'exploitation, la philosophie était que, comme il fallait tellement de temps pour écrire, déboguer et régler les performances de la mise en œuvre de l'arbre B +, il était logique de l'utiliser autant que possible.

D'autres systèmes de fichiers (ext3 et ext4) utilisent une variante de l'arborescence B appelée HTree que je ne connais pas très bien. Apparemment, il utilise une sorte de schéma de hachage pour maintenir le facteur de branchement élevé afin que très peu d'accès au disque soient utilisés.

J'ai entendu de façon anecdotique que certains systèmes d'exploitation ont essayé d'utiliser arbres d'affichage pour stocker leurs structures de répertoires mais ont rencontré des problèmes avec eux. Plus précisément, il a empêché l'accès multithread au même répertoire à partir de plusieurs lecteurs (car dans une arborescence d'affichage, chaque accès remodèle l'arborescence) et a rencontré un cas Edge où l'arborescence dégénérerait en une liste liée si tous les éléments de l'arborescence étaient accessibles séquentiellement. Cela dit, je ne sais pas si ce n'est qu'une légende urbaine, car ces problèmes auraient été apparents avant que quelqu'un n'essaye de les coder.

Le système FAT32 de Microsoft a utilisé un énorme tableau (la table d'allocation des fichiers) qui stocke quels fichiers ont été stockés où et quels secteurs de disque se succèdent logiquement dans un fichier. Le principal inconvénient est que la table devait être configurée à l'avance, il y a donc eu des limites supérieures sur la taille des fichiers pouvant être stockés sur le disque. Cependant, le système basé sur une baie était assez facile à implémenter.

Cette liste n'est pas exhaustive - je suis sûr que d'autres systèmes de fichiers utilisent d'autres structures de données. Cependant, j'espère que cela vous aidera à vous pousser dans la bonne direction.

J'espère que cela t'aides!

38
templatetypedef