我听说NTFS文件系统基本上是一个b树。真的吗?那么其他文件系统呢?他们是什么样的树?
另外,FAT32与FAT16有何不同?
FAT文件系统使用哪种树?
答案 0 :(得分:6)
FAT(FAT12,FAT16和FAT32)不使用任何树。除了描述分区本身的数据块之外,还使用了两个有趣的数据结构。可以从Microsoft和第三方获得在嵌入式系统中编写兼容实现所需级别的完整详细信息。 Wikipedia有一篇不错的文章作为另一个起点,其中也包含了很多关于如何实现它的历史。
由于最初的问题是关于树的使用,我将快速总结一下FAT文件系统中实际存在的小数据结构。有关准确的详细信息和历史记录,请参阅上述参考资料。
每个目录中的文件集存储在一个简单的列表中,最初按文件创建的顺序存储。通过将条目标记为已删除来完成删除,因此后续文件创建可能会重新使用该插槽。列表中的每个条目都是固定大小的结构,并且足够大,可以保存经典的8.3文件名以及标志位,大小,日期和起始簇号。长文件名(也包括国际字符支持)是通过使用额外的目录条目插槽来保存长名称和原始8.3插槽,以保存所有其余文件属性。
磁盘上的每个文件都存储在一系列集群中,其中每个集群都是固定数量的相邻磁盘块。每个目录(磁盘的根目录除外)就像一个文件,并且可以根据需要通过分配其他集群来增长。
群集由(错误命名的)文件分配表管理,文件系统从该表中获取其通用名称。此表是一个打包的插槽阵列,一个用于磁盘分区中的每个集群。名称FAT12表示每个时隙为12位宽,FAT16时隙为16位,FAT32时隙为32位。该槽存储空,最后和坏簇的代码值,或该文件的下一个簇的簇号。通过这种方式,文件的实际内容被表示为称为链的簇的链接列表。
较大的磁盘需要更宽的FAT条目和/或更大的分配单元。 FAT12基本上只能在软盘上找到,其中4K簇的上限对于大小不超过1MB的媒体是有意义的。 FAT16和FAT32都常见于拇指驱动器和闪存卡上。 FAT大小的选择部分取决于预期的应用。
访问特定文件的内容非常简单。从其目录条目中,您将了解其总大小(以字节为单位)及其第一个簇编号。从群集号,您可以立即计算第一个逻辑磁盘块的地址。从由群集编号索引的FAT中,您可以找到分配给该文件的链中的每个已分配群集。
发现适合存储新文件或扩展现有文件的可用空间并不容易。 FAT文件系统只是用代码值标记自由簇。查找一个或多个免费群集需要搜索FAT。
找到文件的目录条目并不快,因为目录没有排序,需要在目录中线性搜索所需文件。请注意,长文件名通过为每个具有长名称的文件占用多个目录条目来增加搜索时间。
FAT仍然具有以下优点:它可以很容易地实现,它可以在小型微处理器中完成,因此即使是小型嵌入式系统和PC之间的数据交换也可以以经济有效的方式完成。我怀疑它的怪癖和奇怪之处将在很长一段时间内与我们同在。
答案 1 :(得分:3)
ext3和ext4使用“H-trees”,这显然是B树的一种特殊形式。
BTRFS使用B树(B树文件系统)。
ReiserFS使用B +树,这显然是NTFS使用的。
顺便说一句,如果您在维基百科上搜索这些内容,则会在“目录内容”下的右侧信息框中列出。
答案 2 :(得分:1)
这是FAT16与FAT32的漂亮图表。
名称FAT16和 FAT32指的是位数 文件分配表所需的 条目。
FAT16使用16位文件分配 表格条目(2 16个分配单位)。
Windows 2000保留前4位 一个FAT32文件分配表 条目,这意味着FAT32有一个最大值 2 28个分配单位。然而, 这个数字的上限为32 GB Windows 2000格式的实用程序。
答案 3 :(得分:1)
FAT32使用32位数来存储群集号。它支持更大的磁盘和最大4 GiB的文件。
据我所知,FAT使用文件分配表,用于存储有关磁盘状态的数据。它似乎不使用树木。我可能错了。