Appearance
题目
某计算机采用页式虚拟存储管理方式,按字节编址。CPU 进行存储访问的过程如题 44 图所示。

根据题 44 图回答下列问题。
(1) 主存物理地址占多少位?
(2) TLB 采用什么映射方式?TLB 用 SRAM 还是 DRAM 实现?
(3) Cache 采用什么映射方式?若 Cache 采用 LRU 替换算法和回写(Write Back)策略,则 Cache 每行中除数据(Data)、Tag 和有效位外,还应有哪些附加位?Cache 总容量是多少?Cache 中有效位的作用是什么?
(4) 若 CPU 给出的虚拟地址为 0008C040H,则对应的物理地址是多少?是否在 Cache 中命中?说明理由。若 CPU 给出的虚拟地址为 0007C260H,则该地址所在主存块映射到的 Cache 组号是多少?
解析
本题在题图给出的虚拟存储器结构上做"反向解读":物理地址位数 → TLB 性质 → Cache 性质 → 给定虚拟地址做地址转换 + Cache 命中判定。所有信息都从图里读出来,不要凭空构造。
(1) 主存物理地址位数 [1 分]
物理地址 = 实页号 + 页内偏移。从题图读出:
- 实页号 16 位(图中 Cache 输入处的字段);
- 页内偏移 12 位(与虚拟地址的页内偏移共享)。
或者从 Cache 字段反推:Cache Tag 20 位 + 组号 3 位 + 块内偏移 5 位 = 28 位。
(2) TLB 的映射方式与实现介质 [2 分]
映射方式:全相联。
判据:TLB 中每项都有独立的比较器,与待匹配的虚页号 并行比较——这是全相联的硬件特征。组相联只比较"该组的若干项",直接映射只比较"该行"。
实现介质:SRAM。
理由:
- TLB 频繁访问(每次访存都查),必须极快 → 几 ns 级;
- DRAM 需要刷新、访问慢(几十 ns);
- SRAM 用 6 管单元、无需刷新,读写都快,但容量受限——TLB 容量小(几十到几千项),SRAM 完美匹配。
(3) Cache 的映射方式 + 附加位 + 总容量 + 有效位作用 [6 分]
映射方式:2 路组相联——题图每组显示 2 行。
附加位(除 Data / Tag / 有效位之外):
- LRU 位:每行 1 位。2 路组相联用 1 位即可记录"哪一行最近最少使用"(更高路数才需要更多位);
- 脏位(Dirty / Modified):每行 1 位。回写策略下,行被换出时检查脏位决定是否真要写回主存——脏位 = 0 直接丢,= 1 才写回。
Cache 总容量计算。
- 组号 3 位 → 组数 = ;
- 每组 2 行;
- 每行:有效位 1 + LRU 1 + 脏位 1 + Tag 20 + Data 位 = 279 位。
有效位作用。
指示该 Cache 行中的内容是否真实可用。系统启动时 Cache 全无效(即使物理上有"脏数据残留"),有效位为 0;从主存调入数据后置为 1。有效位 0 时不能与 Tag 匹配认作命中——Tag 字段可能是上次断电前的残留。
易错点: Cache 容量计算最常见的错误是只算数据区(256 × 8 × 2 = 4096 位 = 512B),忘了 Tag、LRU、脏位、有效位的开销。本题这些"管理位"加起来 = 23 位 / 行,占总比特 5%。
(4) 两个虚拟地址的转换与 Cache 判定 [5 分]
地址 0008C040H 的转换 + Cache 命中判定。
Step 1. 拆分虚拟地址。
页大小 4KB → 页内偏移 12 位。把 0008C040H 转二进制再切:
- 虚页号(高位)=
0000 0000 1000 1100B=008CH; - 页内偏移 =
0000 0100 0000B=040H。
Step 2. 查 TLB。
按题图 TLB 内容,虚页号 008CH 命中、有效位 = 1,对应实页号 = 0040H。
Step 3. 拼物理地址。
Step 4. Cache 字段切分。
物理地址 28 位,按 Tag 20 / 组号 3 / 块内偏移 5:
- Tag(高 20)=
0000 0000 0100 0000 0000B=00400H; - 组号(中 3)=
010B= 2; - 块内偏移(低 5)=
00000B= 0。
Step 5. 查 Cache 第 2 组。
题图中第 2 组的两行:
- 行 1:Tag =
00400H✓ 但有效位 = 0 → 不算命中; - 行 2:Tag ≠
00400H→ 不命中。
结论:访问 Cache 不命中。
地址 0007C260H 映射的 Cache 组号。
物理地址低 12 位 = 虚拟地址低 12 位(页内偏移共享)。
物理地址的最低 5 位是块内偏移、再上 3 位是组号:
- 块内偏移 =
0 0000B= 0; - 组号 =
011B= 3。
结论:映射到 Cache 组 3。
编者注(生僻术语): "页内偏移在虚拟地址和物理地址中相同"是页式存储管理的根本性质——地址翻译只换"页号"那部分。所以即使没拿到 TLB 命中信息,也能从虚拟地址直接读出物理地址低 12 位,进而算出 Cache 组号。这是本题第 (4) 问后半段的关键。