在 ext2 中定位文件的 inode 时是否使用两个 inode 表?

在 ext2 中定位文件的 inode 时是否使用两个 inode 表?

从 Tanenbaum 的现代操作系统中,当尝试访问 Linux 中的 ext2 文件系统中的文件,然后到达该文件的父目录时,

如果文件存在,系统会提取 i 节点号并将其用作索引i节点表(在磁盘上)找到相应的 i 节点并将其放入内存。 i节点被放入 i节点表,一个内核数据结构,保存当前打开的文件和目录的所有 i 节点。

是否提到了两个不同的索引节点表?

  1. 第一个索引节点表是否存储在磁盘的某个位置?它存储在哪里?请参阅同一本书中下面的磁盘、分区和文件系统的布局。

    它是从 inode 编号到 inode 地址的映射吗?

  2. 第二个inode表是否存储在主存中?

    它是从什么到索引节点的映射吗?

在此输入图像描述

在此输入图像描述

答案1

您引用的文字可以说是措辞草率。文件系统的主权威 inode 存储在文件系统中。因此,对于磁盘上(磁盘分区中)的文件系统,inode 位于磁盘上。但是,为了提高效率,内核将活动 inode 的本地副本存储(缓存)在内存中。

  1. 重复一遍,是的,“第一个索引节点表”存储在磁盘上(假设文件系统驻留在磁盘上)。那么你在问什么?您复制到问题中的两个数字都显示标记为“I-nodes”的区域。这些就是索引节点所在的位置。不同文件系统类型的具体细节有所不同。

    • 它是从 inode 编号到 inode 地址的映射吗?
      不; inode 存储在一个数组中(或者,在某些文件系统中,存储在多个数组中),因此 inode 地址可以通过如下公式计算:

      inode地址 = (inode数组的基地址) + (inode编号) × (inode大小)

    我希望你已经知道,索引节点包含文件的元数据,以及它指着文件的数据块。

  2. 是的,“第二个inode表”存储在内存中。它不是到 inode 的映射;而是到 inode 的映射。它是复制选定的索引节点(可能还有一些有关系统中索引节点状态的附加元数据)。

相关内容