Appearance
题目
假设计算机 M 的主存地址为 24 位,按字节编址;采用分页存储管理方式,虚拟地址为 30 位,页大小为 4KB;TLB 采用 2 路组相联方式和 LRU 替换策略,共 8 组。请回答下列问题。
(1) 虚拟地址中哪几位表示虚页号?哪几位表示页内地址?
(2) 已知访问 TLB 时虚页号高位部分用作 TLB 标记,低位部分用作 TLB 组号,M 的虚拟地址中哪几位是 TLB 标记?哪几位是 TLB 组号?
(3) 假设 TLB 初始时为空,访问的虚页号依次为 10、12、16、7、26、4、12 和 20,在此过程中,哪一个虚页号对应的 TLB 表项被替换?说明理由。
(4) 若将 M 中的虚拟地址位数增加到 32 位,则 TLB 表项的位数增加几位?
解析
本题考查 TLB 作为"存放页表项的 Cache" 的解读方式:把 TLB 当 Cache 来分析它的字段、命中、替换。关键映射:
- 虚页号 → 像主存块号一样被切成 TLB 标记 + TLB 组号;
- 2 路组相联 → 每组容纳 2 项;
- LRU → 当组满且新项要进时,替换掉"最近最少使用"的那一项。
(1) 虚拟地址的字段划分 [2 分]
页大小 4KB = B → 页内偏移 12 位。虚拟地址 30 位:
| 字段 | 位数 | 地址位 |
|---|---|---|
| 虚页号 | 18 | [29:12] |
| 页内偏移 | 12 | [11:0] |
(2) TLB 标记与 TLB 组号 [2 分]
TLB 共 8 组、2 路组相联:
虚页号 18 位拆成:
| TLB 字段 | 来源(取自虚页号) | 位数 | 在虚拟地址中的位 |
|---|---|---|---|
| TLB 标记 | 虚页号高 15 位 | 15 | [29:15] |
| TLB 组号 | 虚页号低 3 位 | 3 | [14:12] |
(3) 哪个虚页号被替换?[4 分]
Step 1. 算每个虚页映射到哪个 TLB 组。 公式:组号 = 虚页号 mod 8。
| 访问序号 | 虚页号 | TLB 组号(mod 8) |
|---|---|---|
| 1 | 10 | 2 |
| 2 | 12 | 4 |
| 3 | 16 | 0 |
| 4 | 7 | 7 |
| 5 | 26 | 2 |
| 6 | 4 | 4 |
| 7 | 12 | 4 |
| 8 | 20 | 4 |
Step 2. 跟踪每个 TLB 组的状态。
只有组 4 被多次命中,且访问数 > 2 路容量。其他组都不超过 2 次访问,不需替换。集中跟踪组 4:
| 步骤 | 访问 | 组 4 内容([最旧,..最新]) | 动作 |
|---|---|---|---|
| 2 | VPN=12 | [12] | 装入 |
| 6 | VPN=4 | [12, 4] | 装入(组内 2 路填满) |
| 7 | VPN=12 | [4, 12] | 命中,更新 LRU 顺序 |
| 8 | VPN=20 | [12, 20](4 被替换出) | 替换 VPN=4(最近最少用) |
结论:访问第 8 次(VPN=20)时,VPN=4 的 TLB 项被替换。
易错点(LRU 跟踪): 步骤 7 访问 VPN=12,此时组 4 命中(不引发装入),但需要更新 LRU 顺序——把 12 标为最新使用,4 滑落为"最近最少用"。这是步骤 8 替换 4 的关键铺垫。
(4) 虚拟地址扩到 32 位时 TLB 表项增几位 [3 分]
虚拟地址 30 → 32 位,多出 2 位都加在虚页号上:
虚页号被划分为 TLB 标记 + TLB 组号。组号位数由 TLB 容量决定(8 组 → 3 位,不变),所以 多出来的 2 位全部进入 TLB 标记字段:
每个 TLB 表项 = 标记 + 实页号 + 控制位(有效位、LRU 等)。其中:
- TLB 标记 + 2 位;
- 实页号位数 = 物理地址 24 - 12 = 12 位(不变,物理地址未变);
- 控制位(有效位、LRU、脏位等)也不变。
编者注(生僻术语): 虚拟地址扩展不影响物理地址也是页式管理的常见操作——比如 x86-64 一开始用 48 位虚拟地址、52 位物理地址,后来虚拟扩到 57 位,物理扩到 56 位,但 TLB 标记字段变化的幅度只对应虚页号宽度差。