Appearance
题目
若目录 dir 下有文件 file1,则为删除该文件内核不必完成的工作是( )。
错因
B
可能觉得 FCB(文件控制块)不算"占空间"的部分,删文件时可以留着。但 FCB 是文件的元数据本体——记着文件主、权限、磁盘块位置、大小等等。文件删了 FCB 还留着,磁盘上就多一堆"指向已释放数据块"的孤魂记录,下次要分配 FCB 时又少一个空间。释放是必做的。
C
误以为"文件删除"只动元数据、数据块原封不动地留在那("反正会被覆盖")。但释放磁盘空间——把数据块标回空闲位图——是文件删除的第一目的:腾地方让别的文件用。如果不释放,这些块永远占着不能再分配出去,磁盘很快就满了。
D
漏掉了目录项。可能想成"FCB 删了文件就不存在了"。但目录是个映射表:"文件名 → FCB 位置"——目录项不删掉,下次 ls dir 还是能看到 file1 的名字(虽然点开就报错)。删除文件必须把这个名字也从目录里摘掉,才算彻底。
总解析
题问"不必完成的"——也就是问哪一项不在内核删除流程里。
内核 unlink 文件时的标准动作(链接计数归 0 时):
| 动作 | 必做? | 为什么 |
|---|---|---|
| 删目录项(D) | ✓ | 否则文件名还挂在目录里 |
| 释放 FCB / inode(B) | ✓ | 元数据本身要回收 |
| 释放磁盘数据块(C) | ✓ | 让出磁盘空间给别的文件 |
| 删快捷方式 / 软链接(A) | ✗ | 不归内核管 |
为什么 A 不必做? 快捷方式(Windows)/ 软链接(Linux 的 ln -s)本身是独立的小文件,里面存的是"我指向 /path/to/file1"这条文本路径。它跟原文件是松耦合关系——内核没有反向索引可以从原文件追到所有指向它的快捷方式。
所以删除 file1 时:
- 内核只删 file1 本体(目录项 + FCB + 数据块)
- 别处那些指向
dir/file1的快捷方式留着不动 - 之后用户去点快捷方式才会发现"找不到目标文件",由用户自己清理
A 是用户层 / shell 层的事,内核完全不管。
最终答案是 A。