Appearance
题目
下列选项中,可用于文件系统管理空闲磁盘块的数据结构是( )。
Ⅰ. 位图 Ⅱ. 索引结点 Ⅲ. 空闲磁盘块链 Ⅳ. 文件分配表 (FAT)
错因
A
把 Ⅱ 索引结点(inode)也算成空闲块管理,可能因为 inode 的名字里有"索引"二字。但 inode 是已分配文件的元数据容器——里面记的是文件大小、权限、时间戳、指向数据块的指针等等,它管的是"哪些块属于这个文件",不是"哪些块还空着"。空闲块和 inode 是不同的两套结构。
C
只承认 Ⅰ Ⅲ 这种"专门记空闲块的结构",把 FAT 排除了。其实 FAT 的表项除了存"下一个簇号"外,还预留了特殊值标识空闲簇(FAT16 里用 0x0000 表示空闲、0xFFFF 表示文件结束)——FAT 同时承担了"文件链表 + 空闲块表"两个角色。漏掉这一点是 FAT 内部细节没看清。
D
把 inode 也选进来,同时漏掉了位图,错配最严重。位图是经典的空闲块管理结构(每位 0/1 对应一个块的空 / 占),高效到几乎所有现代 FS(ext2/3/4、NTFS)都在用。漏掉位图基本相当于把空闲块管理的标志性结构忘了。
总解析
文件系统里"管哪些块还空着"和"管已用块属于哪个文件"是两套不同的数据结构。先把候选拆开归类:
| 结构 | 用途 | 是否管空闲块 |
|---|---|---|
| Ⅰ 位图 | 每位对应一个块,1=已用 / 0=空闲(或反之) | ✓ |
| Ⅱ 索引结点 inode | 存单个文件的元数据 + 数据块指针 | ✗(管已分配的,不管空闲的) |
| Ⅲ 空闲磁盘块链 | 空闲块用链表/成组链法串起来,分配从头取、回收挂回去 | ✓ |
| Ⅳ FAT | 文件分配表既是文件链表又登记空闲簇(特殊值 0x0000) | ✓ |
关键区分:inode 记的是"这个文件的块在哪里",跟"哪些块还没人用"是相反方向的两件事。
Ⅰ Ⅲ Ⅳ 都能管空闲块,Ⅱ 不能。
最终答案是 B。