Data structures 用于构建文件系统的数据结构?

Data structures 用于构建文件系统的数据结构?,data-structures,operating-system,filesystems,Data Structures,Operating System,Filesystems,什么样的数据结构最适合用于文件组织?B-树是最好的还是有另一种数据结构可以更快地访问文件和进行良好的组织?谢谢所有的文件系统都是不同的,因此有大量的数据结构实际用于文件系统中 许多文件系统使用某种类型的(通常称为位图)来跟踪某些空闲块的位置,因为它们在查询特定磁盘块是否正在使用时具有优异的性能,并且(对于未完全填满的磁盘)支持合理快速地查找空闲块 许多较旧的文件系统(ext和ext2)使用简单的链表存储目录结构。显然,这对于大多数应用程序来说已经足够快了,尽管一些使用大量大目录的应用程序受到了明

什么样的数据结构最适合用于文件组织?B-树是最好的还是有另一种数据结构可以更快地访问文件和进行良好的组织?谢谢

所有的文件系统都是不同的,因此有大量的数据结构实际用于文件系统中

许多文件系统使用某种类型的(通常称为位图)来跟踪某些空闲块的位置,因为它们在查询特定磁盘块是否正在使用时具有优异的性能,并且(对于未完全填满的磁盘)支持合理快速地查找空闲块

许多较旧的文件系统(ext和ext2)使用简单的链表存储目录结构。显然,这对于大多数应用程序来说已经足够快了,尽管一些使用大量大目录的应用程序受到了明显的性能影响

XFS文件系统以使用几乎所有东西而闻名,包括目录结构及其日志系统。从我本科操作系统课程的记忆中,我的理念是,由于编写、调试和性能调优B+树的实现花费了很长时间,所以尽可能多地使用它是有意义的

其他文件系统(ext3和ext4)使用一种称为的B-树变体,我不太熟悉。显然,它使用某种散列方案来保持较高的分支因子,从而使用很少的磁盘访问

我曾轶事地听说,一些操作系统试图使用存储其目录结构,但遇到了问题。具体来说,它阻止了多个读卡器对同一目录的多线程访问(因为在splay树中,每次访问都会重塑树),并且遇到了一种边缘情况,即如果树的所有元素都按顺序访问,则树将退化为链表。也就是说,我不知道这是否只是一个城市传奇,因为在任何人试图编写代码之前,这些问题都是显而易见的

微软的FAT32系统使用了一个巨大的数组(文件分配表),用于存储文件的存储位置以及文件中逻辑上遵循的磁盘扇区。主要缺点是必须提前设置表,因此磁盘上存储的文件大小有上限。然而,基于阵列的系统很容易实现

这不是一个详尽的列表-我确信其他文件系统使用其他数据结构。然而,我希望它能帮助你朝着正确的方向前进


希望这有帮助

我喜欢用数据库来存储信息。我相信大多数数据库都使用b结构。你想完成一项特定的任务吗?我只是好奇操作系统使用哪种数据结构来组织文件,因为我正在学习数据结构,并实现了其中的一些:红黑树、AVL树、B树、跳过列表。。我想知道哪一个可以用于更有用的任务(不存储数字),我不确定大多数操作系统是如何存储数据的。祝你研究顺利。红黑树、AVL树和所有其他都是内存中的数据结构。它们不适合于对文件系统更重要的持久(磁盘上)数据结构。另外,我不确定你是否知道,但是B-树和二叉树是完全不同的鞋子。只是想澄清一下。谢谢@dmeister提供的信息。是的,你是对的,RBT、AVL等都在内存中使用。这就是为什么我需要研究持久数据结构。当然,B-树和二叉树之间有巨大的区别!非常有用的帖子谢谢!然后我将研究位向量,并对其他操作系统做更多的研究。。我听说八字树很麻烦!我最熟悉的是B-树,但我期待着学习其他数据结构,这将服务于这类有用的东西!谢谢你的长篇大论:)