0

所以我在做一些考试复习题,其中一个说“在 UNIX 系统 V 中,一个块的长度是 1 KB,每个块可以容纳总共 256 个块地址。使用 inode 方案,最大值是多少文件大小?”

现在具有讽刺意味的是教授提供的解决方案,我理解单、双和三间接分配背后的数学/逻辑,这是直接分配让我感到困惑。

根据解决方案,直接分配方案使用 10 个块,因为 2^10 字节 = 1 KB。为什么?这个公式背后的原因是什么?UNIX System V inode 的发明者只是想出了一个任意数字吗?因为对我来说,1024 个字节有 10 个指针是没有意义的,因为 1024/10 = 每 102.4 个字节一个地址,所以有 8 个或其他数字会更合乎逻辑。

教授暗示在我们的期末考试中很可能会有这样的问题,我宁愿不要冒险使用我不明白的千篇一律的公式。

4

2 回答 2

6

我敢肯定,谷歌本可以比在这里询问更快更容易地给你一个非常完整的答案,事实上即使在这里我也得到了 3,145 个包含“inode 间接块”的帖子的搜索结果,但既然你确实在这里问过,那就去吧回答:

好吧,磁盘上的 inode 结构只能容纳一定数量的块地址,以及它必须包含的所有其他信息,如果它要适合一个块本身的话。

在 SysV inode 的情况下,有 40 个字节的数据块地址空间,这被分解为 13 个 3 字节地址,剩下一个字节用于“文件生成号”(您可以在此处忽略)。

那么,您有 13 个地址,您将如何有效地使用它们来处理包含不止 13 个数据块的文件的文件数据块?

决定是使用前 10 个作为直接地址——即它们直接识别哪个块是文件的第 1-10 个数据块。第 11'th、12'th 和 13'th 地址指向间接块:分别是单个间接块、双间接块和三间接块。

正如问题所指出的,每个间接块可以容纳 256 个地址。因此,您只需将它们相乘并将它们相加,考虑到第一个间接块的地址集直接指向数据块,双间接块首先指向更多数据块地址块,而三重间接块的地址集直接指向数据块地址。间接块指向指向更多指向数据块地址的指针块的指针块。

这个页面有一个很好的图表,在这种情况下,如果没有这样的图表,你的困惑可能不会被清除。请注意,此页面讨论的细节与严格的 SysV 磁盘格式略有不同(它有更直接的块,并且:

了解 Unix 文件系统中的间接块

于 2012-12-11T03:20:15.720 回答
0

With a single block of 1024 bytes and 4-byte pointers, you can store 1024 / 4 = 256 pointers. If each file has a single block for i-nodes then you get 256 * 1024, i.e., 256KB files. I don't know where that 10 blocks come from though.

于 2012-12-11T03:08:37.200 回答