xv6操作系统——三重间接的实现

xv6 operating system - Implementation of triple indirection

xv6 mkfs.c 文件声明变量:

int nblocks = 985;
int nlog = LOGSIZE;
int ninodes = 200;
int size = 1024;

该声明应该适用于具有 12 个直接块和 1 个间接块的 inode,我不明白的是为什么 nblocks 被定义为 985? 一个 inode 中的块数是 140(间接 128 + 直接 12),所以我不完全理解 985 来自哪里以及 1024 的大小。

如果我能理解那部分,我想我将能够更改变量以支持三重间接寻址。

谢谢!

一个 inode 在磁盘上只占用 32 个字节 (sizeof(struct inode))。仅当写入 inode 时,它​​才开始在磁盘上占用更多 space(块)。

注意这段代码:

bitblocks = size/(512*8) + 1;
usedblocks = ninodes / IPB + 3 + bitblocks;
...
assert(nblocks + usedblocks + nlog == size);