Appearance
题目
某计算机存储器按字节编址,虚拟(逻辑)地址空间大小为 16MB,主存(物理)地址空间大小为 1MB,页面大小为 4KB:Cache 采用直接映射方式,共 8 行:主存与 Cache 之间交换的块大小为 32B。系统运行到某一时刻时,页表的部分内容和 Cache 的部分内容分别如题 44-a 图、题 44-b 图所示,图中页框号及标记字段的内容为十六进制形式。

请回答下列问题∶
(1) 虚拟地址共有几位,哪几位表示虚页号?物理地址共有几位,哪几位表示页框号(物理页号)?
(2) 使用物理地址访问 Cache 时,物理地址应划分成哪几个字段?要求说明每个字段的位数及在物理地址中的位置。
(3) 虚拟地址 001C60H 所在的页面是否在主存中?若在主存中,则该虚拟地址对应的物理地址是什么?访问该地址时是否 Cache 命中?要求说明理由。
(4) 假定为该机配置一个 4 路组相连的 TLB,该 TLB 共可存放 8 个页表项,若其当前内容(十六进制)如题 44-c 图所示,则此时虚拟地址 024BACH 所在的页面是否在主存中?要求说明理由。

解析
本题是地址转换 + Cache 检索 + TLB 检索 的组合大题。三层存储抽象:
- 虚拟地址 ↔ 物理地址:通过页表(或 TLB 加速);
- 物理地址 ↔ Cache:直接映射,分 Tag / 行号 / 块内偏移 三段;
- TLB:组相联结构,靠"组号 + 标记"匹配。
每一步的关键都是 对地址做位段划分——把字节地址按位宽切成几个字段。
(1) 虚拟地址 / 物理地址的位数 [2 分]
虚拟地址位数。 虚拟地址空间 16MB,按字节编址:
虚页号位数。 页面大小 4KB:
故虚页号 = 24 − 12 = 12 位,即虚拟地址的高 12 位([23:12])。
物理地址位数。 主存空间 1MB,按字节编址:
页框号位数。 页内偏移仍是 12 位,故页框号 = 20 − 12 = 8 位,即物理地址的高 8 位([19:12])。
| 字段 | 虚拟地址(24 位) | 物理地址(20 位) |
|---|---|---|
| 高位 | 虚页号 [23:12](12 位) | 页框号 [19:12](8 位) |
| 低位 | 页内偏移 [11:0](12 位) | 页内偏移 [11:0](12 位) |
(2) 物理地址访问 Cache 的字段划分 [2 分]
直接映射 Cache 把物理地址划分为 Tag / 行号 / 块内偏移 三段(高 → 低):
- 块内偏移:块大小 32B → 位,占 [4:0];
- Cache 行号:共 8 行 → 位,占 [7:5];
- Tag:剩余高位 = 20 − 5 − 3 = 12 位,占 [19:8]。
| 字段 | Tag | Cache 行号 | 块内偏移 |
|---|---|---|---|
| 位数 | 12 | 3 | 5 |
| 物理地址位 | [19:8] | [7:5] | [4:0] |
(3) 虚拟地址 001C60H 是否在主存?是否 Cache 命中?[4 分]
Step 1. 拆解虚拟地址。
虚页号 = 001H。
Step 2. 查页表判断是否在主存。
题干的页表 001H 项:有效位 = 1 → 该页在主存中。其页框号 = 04H。
Step 3. 拼物理地址。
Step 4. 把物理地址按 Cache 字段切分。
04C60H = 0000 0100 1100 0110 0000B,按 [Tag 12 | 行号 3 | 偏移 5] 切:
| 字段 | 二进制 | 十六进制 / 十进制 |
|---|---|---|
| Tag([19:8]) | 0000 0100 1100 | 04CH |
| 行号([7:5]) | 011 | 3 |
| 块内偏移([4:0]) | 00000 | 0 |
Step 5. 查 Cache 行 3。
题干 Cache 第 3 行:有效位 = 1,但 Tag = 105H ≠ 04CH → Cache 不命中。
易错点: 看到"有效位为 1"不代表命中,还要比 Tag。直接映射下,主存块只能落到一个固定的 Cache 行,所以只比这一行就够了;但若 Tag 不匹配,说明这行装的是另一个主存块,必须把当前块换进来。
(4) 虚拟地址 024BACH 是否在主存?(用 TLB)[3 分]
Step 1. 算 TLB 的组号 / 标记位宽。
TLB 共 8 项,4 路组相联 → 组数 = 8/4 = 2 组 → 组号 1 位,TLB 标记 = 12 − 1 = 11 位。
Step 2. 拆解虚拟地址。
虚页号(高 12 位)= 0000 0010 0100B,再切:
- TLB 标记(高 11 位):
0000 0010 010B=012H - TLB 组号(最低 1 位):
0 - 页内偏移(低 12 位):
B AC H
Step 3. 查 TLB 第 0 组(4 路)。
题干 TLB 第 0 组中存在 有效位 = 1、TLB 标记 = 012H 的项 → TLB 命中。
结论: 虚拟地址 024BACH 所在页面 在主存中。
易错点: 组相联 TLB 的查找不需要遍历所有项,只需查 (组号) 命中的那一组里的 4 路。本题之所以能直接得出"在主存中",是 TLB 命中省去了访问页表这一步。
编者注(生僻术语): TLB(Translation Lookaside Buffer,地址转换后备缓冲)专门缓存"虚页号 → 页框号"的映射,通常组相联,命中后直接拼出物理地址。它和数据 Cache 是两套独立硬件——TLB 缓存"地址翻译",Cache 缓存"数据"。