Skip to content

2016年 408 操作系统 第 47 题

操作系统2016年综合题9分

题目

某磁盘文件系统使用链接分配方式组织文件,簇大小为 4 KB。目录文件的每个目录项包括"文件名 + 文件的第一个簇号",其余簇号存放在文件分配表(FAT)中

(1) 假定目录树结构与各文件占用的簇号顺序如下图所示(dir、dir1 是目录;file1、file2 是用户文件)。请给出所有目录文件的内容

dirdir1file1file2文件名簇号dir1dir148file1100、106、108file2200、201、202

(2) 若 FAT 的每个表项仅存放簇号,占 2 个字节,则 FAT 的最大长度为多少字节?该文件系统支持的文件长度最大是多少?

(3) 系统通过目录文件和 FAT 实现对文件的按名存取,说明 file1 的 106、108 两个簇号分别存放在 FAT 的哪个表项中。

(4) 假设仅 FAT 和 dir 目录文件已读入内存,若需将文件 dir/dir1/file1 的第 5000 个字节读入内存,则要访问哪几个簇?

解析

(1)两个目录文件的内容

关键点:链接分配下,目录项里只存文件的"首簇号",剩余簇号链在 FAT 里。所以目录文件内容只关心"每个直接子项的名字 + 它的首簇号"。

从树结构看:

  • dir 的直接子项只有 dir1(首簇号 48)
  • dir1 的直接子项有 file1(首簇号 100)、file2(首簇号 200)

所以两个目录文件的内容如下:

dir 目录文件

文件名簇号
dir148

dir1 目录文件

文件名簇号
file1100
file2200

编者注(易错点):题目给的"簇号(按顺序)"那一列里,file1 是「100、106、108」三个簇——但目录项里写第一个簇 100,后两个簇的位置由 FAT 接力告诉你。这就是"链接分配"的精髓。把全部簇号一股脑塞进目录项,是读到题没看清"链接分配"四个字的常见错。

(2)FAT 最大长度 + 文件最大长度

  • FAT 表项 = 2 B = 16 比特 → FAT 最多有 个表项
  • 每个表项对应一个簇 → 文件系统最多管理 个簇

由此:

编者注(评分提示):考虑到 FAT 实际还要保留若干表项作"文件结束符"、"坏块标志"、"保留簇 0/1" 等,理论可用簇数会略小。题目明示"仅存放簇号"时按 算即可,但若你在答题中标注了这一点并按""计算,标准答案给"答案正确同样给分"。

(3)106 和 108 存在 FAT 哪个表项

链接分配的核心规则:

FAT[i] 的内容 = 文件中"i 号簇的下一个簇号"

file1 占用簇序列是 100 → 106 → 108

在 file1 里的位置簇号"下一个"簇号写入 FAT 哪一格
第 1 簇100106FAT[100] = 106
第 2 簇106108FAT[106] = 108
第 3 簇(末簇)108EOFFAT[108] = EOF

所以:

  • 簇号 106 存在 FAT 的 100 号表项中
  • 簇号 108 存在 FAT 的 106 号表项中

编者注(易错点):很多同学把"簇号 106 存在 FAT[106]"这种"对号入座"思维带进来——错。FAT 是"上一格指向下一格"的链表,不是"哈希表"。FAT[N] 永远存的是"N 号簇之后该读哪一簇",不是 N 号簇本身。

(4)读取 dir/dir1/file1 第 5000 字节要访问哪些簇

题面已说"FAT 和 dir 目录文件已在内存",所以dir 自己的簇不用再读磁盘。剩下要做的:

  1. 找 dir1:在内存中的 dir 里查到 dir1 的首簇号 = 48 → 读磁盘 48 号簇 拿到 dir1 目录文件
  2. 找 file1:在 dir1 里查到 file1 的首簇号 = 100。注意:FAT 在内存,所以从 100 出发追链 100 → 106 → 108 不用读磁盘,纯查表
  3. 定位第 5000 字节:簇大小 4 KB = 4096 B
    • 即第 5000 字节落在 file1 的第 2 簇(编号从 0 算)—— 也就是簇号 106
  4. 读数据:读磁盘 106 号簇

最终需要访问的磁盘簇是 48 号簇(dir1 目录)和 106 号簇(file1 数据),共 2 个簇。

编者注(易错点)

  • 不要算成 100 号簇——5000 > 4096 已经越过了第 1 簇
  • 不要漏算"读 dir1"——题面只说 dir 在内存,dir1 仍要从磁盘读
  • FAT 在内存所以追链不算盘 I/O,但 FAT 不在内存的题型(如 2022-26)就要把每次"看一格 FAT"也算成读磁盘

最后更新:

🎬 可视化演示
加载中...

提示:可在可视化区直接操作播放、步进、修改参数