Skip to content

2018年 408 计算机组成原理 第 44 题

计算机组成原理2018年综合题14分

题目

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

image-20260501022503317

根据题 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) 问后半段的关键。

最后更新:

⚠️ 这道题暂未配可视化,欢迎在 CodeBrick 反馈区告诉我们你想看哪道题