Direct与Indirect-Blocks
这是 xv6 Inode 如何索引数据块的机制。设计目标是:小文件访问快,大文件也能存。
结构设计 (addrs 数组)
xv6 的 struct dinode 中有一个 uint addrs[NDIRECT+1] 数组 (12+1)。
-
Direct Blocks (直接块):
addrs[0] ~ addrs[11](前 12 个)。- 机制: 数组里存的就是数据块的 Block Number。
- 容量:
12 * 1KB = 12KB。 - 优势: 访问速度极快,读一次 Inode 就能直接定位数据。
-
Indirect Block (间接块):
addrs[12](第 13 个)。- 机制: 这里存的不是数据,而是一个索引块 (Index Block) 的编号。
- 索引块: 这个块里存满了
uint类型的 Block Number。 - 计算: 一个 Block 是 1024 字节,一个
uint是 4 字节。所以一个索引块能存1024 / 4 = 256个地址。 - 容量:
256 * 1KB = 256KB。
总容量限制
xv6 默认的最大文件大小 = (12 + 256) * 1024 字节 ≈ 268 KB。
- 对于现代应用,这太小了。
- Lab 9 (File System) 的核心任务就是实现 Doubly Indirect Block (二级间接索引),让文件支持到
256 * 256 * 1KB = 64MB。