所以我正在做一些考试复习问题,其中一个说“在UNIX系统V中,一个块的长度是1 KB,每个块可以容纳总共256个块地址。使用inode方案,什么是文件的最大大小?“
现在具有讽刺意味的是教授提供的解决方案,我理解单,双和三重间接分配背后的数学/逻辑,这是让我搞砸的直接分配。
根据解决方案,直接分配方案使用10个块,因为2 ^ 10个字节= 1个KB。为什么?这个公式背后的原因是什么?这是UNIX System V inode的发明者梦寐以求的一些任意数字吗?因为对10个指针来说1024个字节是没有意义的,因为1024/10 =每102.4个字节一个地址,所以8或其他数字更合乎逻辑。
教授暗示在我们的决赛中很可能会有这样的问题,而且我宁愿不冒险使用我不理解的千篇一律的公式。
答案 0 :(得分:5)
我确信谷歌本可以给你一个非常完整的答案,比在这里提出的要快得多,甚至在这里,甚至在这里我得到了包含“inode间接块”的帖子的3,145个搜索结果,但是你确实在这里问过,这里有一个回复:
嗯,磁盘上的inode结构只能容纳一定数量的块地址,以及它必须包含的所有其他信息,如果它适合一个块本身。
在SysV inode的情况下,可以存放40个字节的数据块地址,并将其分解为13个3字节地址,并留下一个字节用于“文件生成号”(这里可以忽略)。
那么,你有13个地址,你将如何有效地使用它们来处理包含超过13个数据块的文件的文件数据块?
决定使用前10个作为直接地址 - 即它们直接识别哪个块是文件的第1-10个数据块。第11个,第12个和第13个地址指向间接块:单个间接块,双间接块和三个间接块。
正如问题所述,每个间接块可以容纳256个地址。因此,考虑到第一个间接块的地址集直接指向数据块,并且双间接块首先指向更多的数据块地址块,并且三重 - ,所以,您只需要将它们相乘并将它们相加。间接块指向指向数据块地址的更多指针块的指针块。
这个页面有一个很好的图表,在这种情况下,如果没有这样的图表,你的混淆可能不会被清除。请注意,此页面讨论的细节与严格的SysV磁盘格式略有不同(它具有更多直接块,并且:
答案 1 :(得分:0)
使用1024字节和4字节指针的单个块,可以存储1024/4 = 256个指针。如果每个文件对于i-nodes都有一个块,那么你得到256 * 1024,即256KB文件。我不知道那10个街区来自哪里。