Appearance
题目
文件系统需要额外的外存空间记录空闲块的位置,占用外存空间大小与当前空闲块数量无关的是( )。
错因
B
没仔细想空闲表的结构。"空闲表"不是"剩多少块"的单一计数器,而是按连续空闲分区逐项登记的表(结构类似分区表,每条 <起始块号, 长度>):碎片越多 → 表项越多 → 占用越大。当磁盘有 100 个零散空闲块(散在不同位置)时,表项数 ≈ 100;100 个连续空闲块时表项 = 1。表大小随空闲分区数量变化,不固定。
C
误以为成组链接"组数固定"或"只用一个链表头"。成组链接每组容量固定(如 100 块号),但总组数 = ⌈空闲块数 / 100⌉——空闲块越多组数越多。OS 主存里只缓存当前组(节省内存),但外存里所有组都要保存,占用空间随空闲块总数线性增长。
D
误以为空闲链表的指针只占"几字节可以忽略"。题目问"占用外存空间大小"——空闲块越多,链上节点越多,记录指针字段(即便借用每个空闲块的前几字节)总数也越多。占用与空闲块数量正相关,不是定值。
总解析
判定思路:四种空闲空间管理方法逐一分析"管理结构本身的大小"和"空闲块数量"的关系。
| 方法 | 数据结构 | 占用空间随什么变化 |
|---|---|---|
| 位示图(A) | 一个 bit/块的位图(每个磁盘块对应一位 0/1) | 取决于磁盘总块数(固定),与当前空闲块数无关 |
| 空闲表(B) | 表项 <起始块号, 长度>,每个连续空闲区一条 | 取决于空闲分区数量(碎片越多表越大) |
| 成组链接(C) | 每组若干(如 100 个)空闲块号链成一组,组间链接 | 取决于空闲块总数(块多组多) |
| 空闲链表(D) | 每个空闲块开头存下一块的指针,连成链 | 取决于空闲块总数(块多链长) |
核心区分:
- 位示图描述"哪些块空闲"——是一张关于磁盘整体的全局位图,磁盘多大它就多大
- B/C/D 描述"目前还有哪些块空闲"——动态维护剩余空闲块的索引,剩多少 → 结构多大
位示图大小可量化:
- 设磁盘共 N 个块,位图占用 字节
- 例:磁盘有 个块,位图占 字节 = 128 KB(固定)
- 无论 0 个块空闲还是全部空闲,位图大小都是 128 KB——变的是 0/1 位的内容,不是位图大小
速记:
| 类型 | 大小决定者 |
|---|---|
| 位示图 | 磁盘总容量 |
| 空闲表 | 碎片数 |
| 成组链接 / 空闲链表 | 当前空闲块数 |
只有位示图与空闲块数量无关。
最终答案是 A。