Appearance
题目
下列选项中,可被文件系统用于外存空间使用情况的是( )。
错因
A
把"目录"和"磁盘块占用记录"功能混起来。目录的工作是文件名 → 文件位置的映射("哪个文件叫什么名"),它不回答"哪些磁盘块空闲、哪些已分配"。要列出根目录下所有文件,目录够用;但要找"还剩多少 GB 可写",目录帮不上。
B
记成"系统打开文件表能反映磁盘整体状态"。系统打开文件表只跟踪当前打开的文件——它的表项是"哪些文件正在被某个进程使用",是个内存中的运行时结构。机器关机时这张表清空,外存空间分布不会因此消失。它只关心"用着的",不关心"空闲的"。
D
把 FCB 的覆盖范围放大了。FCB 是单个文件的元数据集合(文件名、大小、属主、数据块指针等),它能告诉你"这一个文件占了哪些块",但不知道整个磁盘上其他块的状态。把所有 FCB 加起来理论上能反推已分配的块——但效率极低,更关键的是:还没用过、从未分配给任何文件的块根本没有 FCB 与之对应,FCB 集合无法直接列出空闲块。
总解析
问题本质:题目要找的是能告诉 OS "整个外存上哪些块空闲、哪些已分配" 的数据结构。
对比四类结构的覆盖范围:
| 选项 | 是什么 | 跟踪粒度 | 能否反映外存空闲/已用 |
|---|---|---|---|
| A 目录 | "文件名 → 文件位置"的映射表 | 单个目录下的文件列表 | ✗(不记块状态) |
| B 系统打开文件表 | OS 内核中的"当前打开文件"集合 | 运行时打开的文件 | ✗(与磁盘块占用无关) |
| C FAT(文件分配表) | 每个磁盘块一个表项的全局表 | 整个磁盘所有块 | ✓ |
| D FCB(文件控制块) | 单个文件的元数据 | 单个文件 | ✗(不能直接列空闲块) |
FAT 为什么能做这件事:
FAT 是一张以磁盘块为索引的全局表——每个表项对应磁盘上一个物理块。表项的取值约定如下:
| FAT 表项值 | 含义 |
|---|---|
0(或特殊"FREE"标记) | 该块空闲,可被分配给新文件 |
| 正整数 N | 已分配,且下一个块是 N(FAT 用链表表示一个文件的块序列) |
| 特殊"EOF"标记 | 已分配,且这是文件最后一块 |
| 特殊"BAD"标记 | 坏块,不可用 |
这就回答了"外存空间使用情况"两件事:
- 空闲空间管理:扫一遍 FAT,所有"FREE"标记的表项即空闲块清单
- 文件分配信息:从某文件的起始块号开始,跟着 FAT 的链表跳到 EOF,就拿到该文件占用的全部块
所以 FAT 同时承担了"哪些块归谁用"(文件分配)和"哪些块没人用"(空闲管理)两项职责——这正是题目问的"可被用于外存空间使用情况"。
编者注(生僻术语):题目原文"可被文件系统用于外存空间使用情况的"读起来有点拗口,正常理解就是"可用于反映/记录/管理外存空间使用情况的数据结构"。FAT 在 FAT12/16/32 文件系统中扮演这个角色,对应到 inode 系(如 ext4)则由位图(block bitmap)承担同等职责——不过题面给的选项里只有 FAT 是直接命中的。
最终答案是 C。