Appearance
题目
某计算机主存按字节编址,采用二级分页存储管理,地址结构如下所示:
| 页目录号(10 位) | 页号(10 位) | 页内偏移(12 位) |
|---|
虚拟地址 20501225H 对应的页目录号、页号分别是( )。
错因
B
页目录号算对了(081H),但页号算错。可能是把"中间 10 位"按十六进制简单切——直接拿 2050 1225H 中"5012"附近某 10 位的低位算成 401H,没意识到 10 位不是 4 位的整数倍,必须先转二进制再切。
C
把"页目录号 10 位"误按"前 12 位 ÷ 4 = 前 3 位十六进制"切——直接取 205H 当页目录号、再凑出页号。这是把 16 进制和 10 位的位数关系混了:每 4 位二进制对应 1 位十六进制,10 位横跨 2.5 个十六进制数字,不能整切。
D
页目录号、页号双错,多半是按 12 位 + 12 位 + 12 位(每段 3 位十六进制数字)这种"看着整齐"的切法做的——但题面明确是 [10][10][12],不能凑成方便切的整数倍。
总解析
地址结构 [页目录号 10 位][页号 10 位][偏移 12 位] = 32 位。关键点:10 位不是 4 的倍数,必须先把整个虚拟地址展开成二进制再切。
第 1 步:32 位虚拟地址 → 二进制
20501225H 每位十六进制展开 4 位二进制:
二进制布局:
| 16进制 | 2 | 0 | 5 | 0 | 1 | 2 | 2 | 5 |
|---|---|---|---|---|---|---|---|---|
| 4 位二进制 | 0010 | 0000 | 0101 | 0000 | 0001 | 0010 | 0010 | 0101 |
连起来 32 位:0010 0000 0101 0000 0001 0010 0010 0101
第 2 步:按 [10][10][12] 切
| 字段 | 二进制位段 | 二进制 | 十六进制 |
|---|---|---|---|
| 页目录号(高 10 位) | bit[31:22] | 00 1000 0001 | 081H |
| 页号(中 10 位) | bit[21:12] | 01 0000 0001 | 101H |
| 页内偏移(低 12 位) | bit[11:0] | 0010 0010 0101 | 225H |
验证算法(不展开二进制时的捷径):
- 页内偏移 = 低 12 位 = 后 3 位十六进制 =
- 剩余高 20 位 =
- 把 按 (即 )除:
- 因此页目录号 = (即 )✓,页号 = ✓
最终答案是 A。