Skip to content

2012年 408 操作系统 第 46 题

操作系统2012年综合题8分

题目

某文件系统空间的最大容量为 4 TB),以磁盘块为基本分配单位。磁盘块大小为 1 KB。文件控制块(FCB)包含一个 512 B 的索引表区。请回答下列问题:

(1) 假设索引表区仅采用直接索引结构,索引表区存放文件占用的磁盘块号。索引表项中块号最少占多少字节?可支持的单个文件最大长度是多少字节?

(2) 假设索引表区采用如下结构:第 0~7 字节采用 <起始块号, 块数> 格式表示文件创建时预分配的连续存储空间(其中起始块号占 6 B、块数占 2 B);剩余 504 字节采用直接索引结构,一个索引项占 6 B。那么:

  • 可支持的单个文件最大长度是多少字节?
  • 为了使单个文件长度达到最大,请指出起始块号和块数分别所占字节数的合理值并说明理由。

解析

(1)纯直接索引:算块号位宽 + 最大文件长度

Step 1:磁盘块总数

Step 2:块号需要多少位 / 多少字节

要给 个块唯一编号,需 32 位:

Step 3:索引表区能装多少索引项

每项指向 1 个磁盘块。

Step 4:最大文件长度

编者注(易错点)

  • 块号位宽取决于整个文件系统的总块数,不是单文件最大块数。即使单文件最多只有 128 块,块号仍要能区分整个 4 TB 上的 个块。
  • 4 B = 32 位 → 恰好够编 个块。如果系统再大一倍到 8 TB,块号就要 33 位,向上取整成 5 B(实际工程里通常一步取到 8 B 留余量)。

(2)混合索引:连续区 + 直接索引

拆解索引表区结构

字节范围字段大小用途
0 ~ 5起始块号6 B预分配连续区的起点块号
6 ~ 7块数2 B预分配连续区的块数
8 ~ 511直接索引区504 B = 84 项 × 6 B后续每块单独编址

Step 1:连续区的容量

  • 起始块号 6 B = 48 bit → 可寻址 个块(远超 4 TB 总数 没问题
  • 块数 2 B = 16 bit → 一段连续区最大

Step 2:直接索引区的容量

  • 索引区 504 B、每项 6 B →
  • 每项指向 1 块

Step 3:混合后的单文件最大长度

Step 4:起始块号 / 块数 的字段如何分配能让"连续区"撑满 4 TB?

题给"起始块号 6 B + 块数 2 B"= 8 B 总预算。但目前的 2 B 块数只能管 块 = 64 MB——离 4 TB( 块)差 16 个 bit,瓶颈在块数字段

调整方案:把 8 B 总预算对半分——起始块号 4 B、块数 4 B:

字段字节数可表示说明
起始块号4 B = 32 bit 个块号正好能寻址 4 TB 内任一块
块数4 B = 32 bit单文件连续区可撑满整个 4 TB

理由:起始块号 4 B 已经是寻址 4 TB 的最低需求——再少寻不到所有块;块数也 4 B → 连续区能从 0 一直占到 4 TB 末尾。两边都"刚好够",没有浪费、也没有不足。

调整后单文件最大长度 = (被整个文件系统容量约束)。

编者注(思路提炼)

  • 这类"字段位宽优化"题的统一思路:找出哪个字段是当前的瓶颈,在不增加总预算的前提下重新分配
  • 本题瓶颈是"块数 2 B 只能管 64 MB"——不是"起始块号不够"。所以从起始块号那里"借" 2 B 给块数。
  • 不能让块数超过 4 B。如果你激进地把"块数"扩到 6 B(块数 )、起始块号砍到 2 B(只能寻址 块 = 64 MB),那起始块号就寻不到整个文件系统了,反而退化。两个字段必须同时够大
  • 8 B 总预算下,4-4 分配是唯一最优解——这也是为什么本题可以"指出合理值"。

最后更新:

⚠️ 这道题暂未配可视化,欢迎在 CodeBrick 反馈区告诉我们你想看哪道题