Skip to content

2019年 408 计算机组成原理 第 46 题

计算机组成原理2019年综合题12分

题目

对于上题,若计算机 M 的主存地址为 32 位,釆用分页存储管理方式,页大小为 4KB,则第 1 行的 push 指令和第 30 行的 ret 指令是否在同一页中(说明理由)?若指令 Cache 有 64 行,采用 4 路组相联映射方式,主存块大小为 64B,则 32 位主存地址中,哪几位表示块内地址?哪几位表示 Cache 组号?哪几位表示标记(tag)信息?读取第 16 行的 call 指令时,只可能在指令 Cache 的哪一组中命中(说明理由)?

解析

本题是 2019-45 的延续:在同一段反汇编代码上,加上"页式管理 + 4 路组相联指令 Cache"的存储层结构。三个考点:

  1. 同页判定:高 20 位(虚页号)相同则在同一页;
  2. Cache 字段拆分:32 位地址分 [Tag | 组号 | 块内偏移];
  3. 由虚拟地址定位 Cache 组:利用"页内偏移在虚 / 物地址中相同"。

push 与 ret 是否在同一页?

页大小 4KB → 页内偏移 12 位 → 虚页号 = 高 20 位

指令虚拟地址高 20 位
push ebp100401000H00401H
ret300040104AH00401H

两者虚页号相同 → 在同一页中

32 位主存地址的字段划分

  • 块内偏移:64B → 6 位,占地址低 6 位([5:0]);
  • Cache 组号:64 行 / 4 路 = 16 组 → 4 位,占 [9:6];
  • Tag 标记:剩余高位 = 位,占 [31:10]。
字段Tag组号块内偏移
位数2246
地址位[31:10][9:6][5:0]

call 指令在 Cache 中映射的组号

call 指令虚拟地址 00401025H。利用 页内偏移在虚拟和物理地址中相同(页式管理的根本性质),物理地址低 12 位 = 虚拟地址低 12 位 = 025H

切分这 12 位(按 [Tag 高位 | 组号 4 位 | 偏移 6 位]):

  • 块内偏移(最低 6 位)= 100101B
  • 组号(中间 4 位,bit [9:6])= 0000B = 0

故 call 指令只可能在 Cache 组 0 中命中。

易错点: 不要被"虚拟地址"的高位部分迷惑——在 4 路组相联且 Cache 组数较少(16 组)的情况下,组号完全落在页内偏移的范围内,因此可以直接由虚拟地址推得 Cache 组号,不需要 TLB 翻译。这是"页大小 ≥ Cache 大小"时的常用快捷分析。

编者注(生僻术语): "虚拟索引、物理标签"(VIPT)就是这种用虚拟地址低位(位于页内偏移内)作 Cache 组号、用物理地址高位作 Tag 的设计。它能让 Cache 查找与 TLB 翻译并行进行,是现代 L1 Cache 的常见结构。

最后更新:

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