Skip to content

2010年 408 计算机组成原理 第 17 题

计算机组成原理2010年选择题2分

题目

下列命中组合情况中,一次访存过程中不可能发生的是( )。

错因

A

直觉觉得"三个全没命中太罕见",于是选 A。但这恰好对应首次访问某个新地址的常见场景:TLB 没缓存这个映射、页表里这页还没装入主存(刚启动或被换出)、Cache 自然也没有这块——三层全 miss,触发缺页中断 + Cache miss 处理,完全可能

B

可能觉得"TLB 没命中怎么 Cache 能命中"——错在认为 TLB miss 就意味着 Cache 也得 miss。TLB 和 Cache 是独立的两个缓存:TLB 缓存"虚→实地址映射",Cache 缓存"内存数据"。一个虚地址哪怕第一次访问 TLB(miss)、走页表得到物理地址后,物理地址可能恰好命中 Cache(之前别的虚地址映射过来同物理位置)。所以 B 完全可能。

C

误以为"Cache miss 一定意味着 Page miss"。但 Page 在主存里 ≠ 数据在 Cache 里——Cache 容量远小于主存,主存的某页存在,但其内容不一定正好被装进 Cache。日常访存里"页在主存、Cache miss"是非常普通的情况(Cache 替换、初次访问等)。

总解析

核心结论TLB 命中 → Page 必然命中。所以"TLB 命中 + Page 未命中"自相矛盾,D 不可能

为什么 TLB 命中蕴含 Page 命中

TLB(Translation Lookaside Buffer)是页表的高速缓存,缓存的是"已经成功映射且当前有效"的页表项。一个 TLB 表项存在 ≠ 它过期——当主存中对应的页被换出时,操作系统会同步把 TLB 中相应表项失效(invalidate)。所以:

  • TLB 中能查到 → 该页表项有效 → 该页正在主存

如果有人不及时同步失效,那是 OS 设计 bug,不是题目讨论的范围。

三个层次的关系图

层次缓存的内容失效后退路
TLB最近用过的"页表项"(虚→实映射)查页表(在主存)
Cache最近用过的"主存数据块"访问主存
Page当前进程虚地址空间中已装入主存的页缺页中断,从磁盘换入

TLB / Cache / Page 的全部 8 种组合 与可能性:

TLBPageCache可能性说明
missmissmiss✓ A首次访问/缺页
missmisshit页都缺了,Cache 不可能命中(Cache 装的是主存的副本)
misshitmissTLB 第一次见,但页在内存、Cache 未缓存
misshithit✓ BTLB 第一次见,但页和 Cache 都已就绪
hitmiss*D自相矛盾——TLB 有效 ⇒ 页必然在主存
hithitmiss✓ C映射有缓存、页在主存、Cache 没装
hithithit全命中(最快路径)

结论:D 那一行不可能存在。

最终答案是 D(TLB 命中,Cache 命中,Page 未命中)

记忆口诀

  • "TLB 是页表的子集,页表项必须有效才入 TLB" —— 所以 TLB 命中 ⇒ Page 命中
  • Cache 与 TLB / Page 都独立 —— Cache 命中与否和 TLB / Page 是否命中可以任意组合(除了"页都没装进主存,Cache 却有"那种自我矛盾的)
  • 这道题的"反向措辞"是"不可能发生"——审题时圈出来,避免选成"可能发生但少见"的 A

最后更新:

🎬 可视化演示
加载中...

提示:可在可视化区直接操作播放、步进、修改参数