子目录的文件目录条目存储在哪里?

欧文·林(Irvin Lim)

如果这个问题在其他地方有确切的重复,请原谅,但是到目前为止,我在SE或其他站点上找到的所有答案一般都没有专门回答这个问题。我正在上大学的一门操作系统课程,因此,我对文件系统总体而言还是个新手。

我了解在大多数文件系统中,都有一个包含文件目录条目的根目录。这些条目包含从文件名到索引节点号的映射,并且长度可变。

根据这个答案,我猜这些条目是以线性方式存储的,如下所示:

通过使用目录(TOC)条目,我可以完全理解什么是inode,以及它们如何映射到物理磁盘上文件的数据块编号。


但是,我的问题是:子目录文件目录条目的存储方式和位置?

我相信它们或者存储在与根目录相同的位置,但有一些偏移。但是,我无法想象如何从inode检索此偏移量。

因此,我感到子目录的目录项实际上存储在磁盘的数据区域中,而不是与根目录的项一起存储。

因此,如果是这种情况,则从一个目录遍历到另一个目录需要磁盘从看似任意的位置读取,这对我来说似乎效率不高。

不过,我只想消除我对子目录的文件目录项位置的误解。

非常感谢您的帮助。

伊尔卡楚

目录通常以文件形式实现。它们有一个索引节点和一个数据区,但是当然通常通常由特殊的系统调用来访问(至少写入)。有些系统允许使用通常的系统调用读取目录read(2)(Linux不允许,FreeBSD在我上次检查时允许)。然后,目录文件的数据区域包含目录条目。在上ext4,根目录还有一个索引节点,它固定为2号索引节点(try ls -lid /)。

使目录像文件一样使分配目录条目等的空间变得容易,因为必须始终存在为文件分配块的功能。另外,由于它们使用所需的相同数据块,因此无需事先在文件数据和目录列表之间分配空间。

目录条目的存储方式内部在文件系统之间有所不同,例如在ext2之间发展ext4现代系统使用树而不是线性列表来加快查找速度。这里甚至古老的FAT文件系统都将目录存储为文件,但是至少在较旧的FAT中,根目录是特殊的。(FAT中目录条目的结构当然与Unix文件系统不同。)

因此,如果是这种情况,则从一个目录遍历到另一个目录需要磁盘从看似任意的位置读取,这对我来说似乎效率不高。

是的。但是,经常访问的目录条目(或基础数据块)可能会缓存在现代操作系统中。

集中保存所有目录的内容将需要预分配一个大区域,并且仍然需要在目录数据区域内进行磁盘搜索。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章