Appearance
题目
某计算机主存地址空间大小为 256MB,按字节编址。虚拟地址空间大小为 4GB,采用页式存储管理,页面大小为 4KB,TLB(快表)采用全相联映射,有 4 个页表项,内容如下表所示。
| 有效位 | 标记 | 页框号 | … |
|---|---|---|---|
| 0 | FF180H | 0002H | … |
| 1 | 3FFF1H | 0035H | … |
| 0 | 02FF3H | 0351H | … |
| 1 | 03FFFH | 0153H | … |
则对虚拟地址 03FFF180H 进行虚实地址变换的结果是( )。
错因
B
把虚页号"03FFFH"误匹配到了第 2 行的"3FFF1H"。两个十六进制串看着像,但前 4 位 0x03FF 与 0x3FFF1 的前 4 位 0x3FFF 不同——前者第 4 位是 F、后者第 4 位是 F 但前面是 3FFF1(5 位),整体值不同。匹配虚页号必须整串严格相等,不能"模糊像"就算命中。第 2 行的 frame=0035H 配上 offset=180H 凑出 0035180H,看着合理却是错的。
C
误以为找不到匹配。诱因可能是:① 看到第 1、3 行有效位 = 0 就直接放弃;② 比较 tag 时被前导零干扰,没意识到 0x03FFF 与第 4 行的 0x03FFF 完全相等。第 4 行有效位=1、tag=03FFFH 与虚页号 03FFFH 完全匹配,TLB 命中,不缺失。
D
把"TLB 缺失"和"缺页"概念混淆。即使真的 TLB 没命中,也只是要去内存中查页表——只有页表项的有效位也是 0、即该虚页根本不在主存时,才发生缺页。本题里 TLB 命中(第 4 行),连查页表都没必要,更谈不上缺页。
总解析
第一步:拆地址字段——确定 offset 和 vpn 的边界
- 页面大小 4KB = 字节 → 页内偏移 12 位
- 虚拟地址 4GB = → 共 32 位
- 虚拟页号 = 32 − 12 = 20 位
物理地址侧:
- 主存 256MB = → 物理地址 28 位
- 物理帧号 = 28 − 12 = 16 位
第二步:把 03FFF180H 切成 vpn 和 offset
03FFF180H 二进制:
| 字段 | 位区间 | 十六进制 |
|---|---|---|
| 虚拟页号 vpn | [31:12](高 20 位) | 03FFFH |
| 页内偏移 offset | [11:0](低 12 位) | 180H |
注:低 12 位 = 0001 1000 0000 = 180H;高 20 位 = 0000 0011 1111 1111 1111 = 03FFFH。
第三步:在 TLB 里全相联查找 tag = 03FFFH
| 行号 | 有效位 | tag | 页框号 | 是否命中 |
|---|---|---|---|---|
| 1 | 0 | FF180H | 0002H | 无效,跳过 |
| 2 | 1 | 3FFF1H | 0035H | tag 不等(0x03FFF ≠ 0x3FFF1),失败 |
| 3 | 0 | 02FF3H | 0351H | 无效,跳过 |
| 4 | 1 | 03FFFH | 0153H | 完全匹配 → 命中 |
第四步:拼物理地址 = 帧号 × 页大小 + 偏移
帧号 0153H 对应物理地址的高 16 位,offset 180H 对应低 12 位:
直接拼接更直观:高位 0153 || 低位 180 = 0153180。
最终答案是 A(0153180H)。
全相联 TLB 三步法速记:
- 切地址:先按 page size 把虚拟地址切成 vpn || offset
- 遍历 TLB:只看 valid=1 的行,tag 与 vpn 整串严格相等才算命中
- 拼物理:命中 → frame || offset;未命中 → 查页表(再看有效位决定 TLB 缺失 vs 缺页)