Appearance
题目
文件系统用位图法表示磁盘空间的分配情况,位图存于磁盘的 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。