Appearance
题目
某计算机主存地址为 24 位,采用分页虚拟存储管理方式,虚拟地址空间大小为 4GB,页大小为 4KB,按字节编址。某进程的页表部分内容如下表所示。当 CPU 访问虚拟地址 00082840H,虚-实地址转换的结果是( )。
| 虚页号 | 实页号(页框号) | 存在位 |
|---|---|---|
| 82 | 024H | 0 |
| ... | ... | ... |
| 129 | 180H | 1 |
| 130 | 018H | 1 |
错因
A
把虚拟地址里"00082"这一段直接当成 VPN,对应表里"虚页号 82"那一行(实页号 024H),同时忽略了存在位 = 0——也就是无视了"该虚页其实没装入主存"的事实。两个错叠加:① VPN 不应是十进制 82(应是 0x82 = 130),② 即便确实是 VPN 82,存在位 0 也意味着缺页而不是直接给出物理地址。
B
VPN 算错了 1。可能把"00082840H"右移 12 位算成 0x81 = 129,或目测页表只看到了 129 那行(紧挨着)就直接用了。正确做法:(十进制)。看表时找 VPN = 130 那行才对。
D
误以为 VPN = 82(十进制,从地址前缀直接读)→ 查表发现存在位 = 0 → 缺页。问题同 A:VPN 应该是 (十进制),不是 82(十进制)。表中的"82""129""130"是十进制 VPN,必须把虚拟地址的高位部分按 16 进制 → 10 进制换算后再查。
总解析
第一步:拆分虚拟地址(页内偏移 + VPN)
页大小 = 4 KB = B → 页内偏移 12 位(低 12 位)。
虚拟地址 00082840H:
- 页内偏移(低 12 位):
- 虚页号 VPN(高 20 位):(十进制)
第二步:查页表
| 查找的 VPN | 表中行 | 实页号 | 存在位 | 结论 |
|---|---|---|---|---|
| 130 | 130 → 018H | 018H | 1 | 命中,直接拼接物理地址 |
第三步:拼接物理地址
物理地址 = 实页号 × 页大小 + 页内偏移
也可以理解为"低 12 位偏移不变,高位换成实页号"——VPN 字段(20 位)→ 实页号字段(24 - 12 = 12 位),然后拼上原偏移。
注意主存地址 24 位、按字节编址 → 物理页号 = 24 − 12 = 12 位,刚好放得下 0x018。
最终答案是 C(018840H)。
关键易错点:
- VPN 是十进制 130,不是从地址前缀直接读出来的"82"。表中的列要看头部说明
- 页内偏移在虚-实转换中保持不变(只换高位的页号)
- 主存物理地址只有 24 位(题面给定)—— 实页号最多 12 位,0x018 没问题;如果某选项给出的实页号超过 0xFFF 一定是错(如 0x180 在表里出现是实页号字段最多 12 位 = 0xFFF,180 = 0x180 = 384,仍合法)
速查公式: