文件系统
引入
词汇
| English | 释义 | 拼音 |
|---|---|---|
| inode | 索引节点 | suǒ yǐn jié diǎn |
| journaling | 日志 | rì zhì |
名字、索引节点、块
- 索引节点 inode 存文件的元数据与 4 个直接指针加一个间接块(1 KiB 块装 256 个指针);目录本身是名字到 inode 条目组成的文件。
- 尺寸上界:$(4 + 256) \times 1\,\mathrm{KiB} = 260$ KiB。4 KiB 块时:$(4 + 1024) \times 4\,\mathrm{KiB} = 4112$ KiB,约 4 MiB。

{exercise:uni-cs0705-layout}
练习
1 KiB 块、4 个直接指针、一个 256 指针间接块,最大文件为——
难度 1/5 · 今日首次完成可获 100 金币及少量额外奖励
(4 + 256) × 1 KiB = 260 KiB。
第 6 块的价钱
- 读 /notes/x 的第 6 块:目录查找找到 inode(已缓存);第 6 块超出四个直接指针——先读间接块(指针 2),再读数据块:一个逻辑块花两次磁盘读。
- 顺序读 100 块的文件要 $100 + 1$ 次读(间接块一次)。删除只清指针不清数据——字节留到被复用。
{exercise:uni-cs0705-price}
练习
读第 6 块(超出直接指针)要——次磁盘读。
难度 1/5 · 今日首次完成可获 100 金币及少量额外奖励
先间接块(指针 2),再数据块。
崩溃问题
- 追加先写数据、再写空闲位、最后写 inode 大小。两次写之间崩溃:先数据后 inode 只丢空间(孤儿块);先 inode 后数据则虚报大小(读出垃圾)。
- 日志 journaling 先写意图、崩溃后重放——现代文件系统为崩溃一致性付的小额写税。
{exercise:uni-cs0705-crash}
练习
日志法扛住崩溃靠——
难度 1/5 · 今日首次完成可获 100 金币及少量额外奖励
日志先记将要发生的;崩溃后重放完成。