Skip to content

2015年 408 操作系统 第 31 题

操作系统2015年选择题2分

题目

文件系统用位图法表示磁盘空间的分配情况,位图存于磁盘的 32~127 号块中,每个盘块占 1024 个字节,盘块和块内字节均从 0 开始编号。假设要释放的盘块号为 409612,则位图中要修改的位所在的盘块号和块内字节序号分别是( )。

错因

A

把位图相对位置(第 50 块)当成了实际盘块号——忘了位图本身是从盘块 32 号开始存放的。32 + 50 = 82 才对,少加偏移 32 就得到 81。这是没把"位图相对块号"和"磁盘实际块号"分开造成的。

B

把"块内字节"算成了 2——可能用了"位号 12 / 8 = 1,但取整方向看反",或者把"块内字节是第几位字节"和"第几个字节"混了。从 0 开始编号时 12 / 8 = 1 余 4,取商 1 = 字节序号 1(即第 2 个字节,但序号是 1,因为从 0 开始),不是 2。

D

两个都错:盘块号没加偏移 32(少加了 32),块内字节序号又算多了 1。可能用了 1-based 编号("第 N 个")而不是题面要求的 0-based 编号。题目明确"盘块和块内字节均从 0 开始编号",要严格按 0-based 算。

总解析

位图:每个 bit 对应 1 个盘块,1=已用 0=空闲(或反之)。要"释放盘块 409612"等于把它对应的那一位反转。需要算这一位在位图的哪个盘块、哪个字节

第 1 步:算出这一位在整个位图中的位序号

释放盘块号 = 409612 → 这一位是位图里的第 409612 位(从 0 开始)。

第 2 步:换算到位图相对块号 + 块内位偏移

每盘块 1024 B = = 8192 位

所以位图相对块号 = 50,块内第 12 位(从 0 开始)。

第 3 步:换算到磁盘的实际盘块号

位图存于磁盘 32~127 号块(从 32 开始):

第 4 步:算块内字节序号

每字节 8 位,从 0 开始:

所以是第 1 字节(即第 2 个字节,但 0-based 序号是 1)的第 4 位。

计算结果
位图相对块号50
实际盘块号82
块内字节序号1

最终答案是 C

最后更新:

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