物理地址在页式虚存系统不同 Cache 映射方式组合下,有以下几种拆分形态:

1. 虚存视角的物理地址(绝对通用)

只要操作系统/体系结构采用页式管理,物理地址高低位划分就固定为两段:

  • 页内偏移位数:由页面大小(Page Size)决定,等于

  • 页框号位数

2. Cache 视角的物理地址(按映射方式分类)

Cache 硬件对物理地址进行拆分时,低位永远是“块内地址”,高位根据映射规则进一步细分:

Cache 映射方式物理地址切分结构关键字段位数计算
直接映射[ Cache Tag ] + [ Cache 行号 ] + [ 块内地址 ]









K 路组相联映射[ Cache Tag ] + [ Cache 组号 ] + [ 块内地址 ]









全相联映射[ Cache Tag ] + [ 块内地址 ]




(无行号/组号)

3. 两大视角在不同映射下的联合等式

  • 在直接映射下

  • 在 K 路组相联映射下

  • 在全相联映射下

4. 硬件重叠的关键结论(VIPT 技巧)

由于页面大小(如 4KB/8KB 12/13 位) Cache 块大小(如 32B/64B 5/6 位):

  • 块内地址必然落在页内偏移的低位区间内。

  • Cache 组号/行号也完全落在页内偏移范围内(即 ),则可以直接使用虚拟地址的低位去检索 Cache 组号/行号,而不需要等待虚实地址翻译(TLB/MMU)完成。

虚拟地址不能直接找cache或者主存;要先转换成物理地址,通过快表或者页表找,然后cache里面如果没有(没命中的话)才去找主存

按硬件执行的先后顺序,整条链路可以精炼为下面两条路:

  • 第一阶段:地址翻译(虚 实)

    • CPU 带着 虚拟地址 出发。

    • 先查 快表(TLB)

      • TLB 命中 瞬间拿到 物理地址

      • TLB 缺失 去主存查 页表(慢表)

        • 页表命中(在内存) 拿到 物理地址,并顺手更新 TLB。

        • 页表未命中(有效位=0) 触发 缺页中断/异常,由操作系统去外存(磁盘)把页面调入主存,再生成物理地址。

  • 第二阶段:数据获取(查 Cache 访主存)

    • 拿到 物理地址 后,去检索 Cache

      • Cache 命中 极其高速地直接把数据/指令送给 CPU。

      • Cache 缺失 由硬件去 主存 对应地址调出一个数据块(Block)填入 Cache,并把目标数据送给 CPU。

408 考场上的一个“终极推论”(经常出选择题):

TLB 命中,页面一定在主存中吗?

一定在! 因为 TLB 是主存页表的缓存副本,TLB 命中说明页表项有效位必为 1,绝不可能缺页。

Cache 命中,TLB 一定命中吗?

不一定! Cache 是主存数据的副本,TLB 是地址映射的副本,两者的替换策略独立。有可能数据早在 Cache 里,但对应页表项刚从 TLB 里被淘汰了。

一、为什么“TLB 命中,页面一定在主存中”?

核心原因:TLB 里存的永远是“合法有效的主存页表项”。

  1. 装入时机:只有当一个页面已经在物理主存中(或者刚从磁盘调入主存成功,页表有效位置 1)时,硬件才会把这个虚页到实页的映射关系写进 TLB。

  2. 换出同步:如果操作系统要把某个页面淘汰换出到磁盘(发生 Page Out),操作系统会强制执行一条特权指令(如 TLB Invalidate / 清除对应 TLB 项),把 TLB 里对应的项直接抹掉或置为无效。

  3. 推导链条

二、为什么“Cache 命中,TLB 不一定命中”?

核心原因:TLB 和 Cache 缓存的对象完全不同,且各自独立工作、独立淘汰。

  • TLB 缓存的是“地址翻译结果”:虚页号 物理页号(告诉 CPU 东西在哪)。

  • Cache 缓存的是“真实数据内容”:物理地址 数据块(真正的变量、指令)。

经典生活比喻

  • Cache 就像你的书包(里面装着实体书)。

  • TLB 就像你的便签纸(上面记着“高等数学在书包第 2 层”)。

你先把高数书装进了书包(数据进入了 Cache),并在便签纸上记了位置(映射进了 TLB)。

过了一会儿,便签纸写满了,你把关于高数书的那条笔记擦掉了(TLB 项被 LRU 算法替换淘汰)。

但此时,高数书依然稳稳当当地躺在你的书包里(Cache 里的数据没有被替换)

下次你想读高数书时:

  1. 先看便签纸(查 TLB) 发现没记(TLB 未命中)。

  2. 去翻总目录/大字典(查主存页表) 查到了在书包第 2 层,并重新在便签上记一笔(更新 TLB)。

  3. 伸手去掏书包(查 Cache) 一掏就拿到了(Cache 命中)!

408 考场状态组合速查(四种情况)

组合状态是否可能出现?场景解释
TLB 命中 + Cache 命中可能最理想状态,虚实转换极速,数据秒读。
TLB 命中 + Cache 未命中可能页面在内存中,但具体的数据块还没调入 Cache。
TLB 未命中 + Cache 命中可能TLB 表项被替换淘汰了,但之前读过的数据仍留在 Cache 中。
TLB 命中 + 缺页异常绝对不可能只要 TLB 命中,页面必定在物理内存中。
缺页异常 + Cache 命中绝对不可能页面都没进内存,Cache 作为内存的子集绝不可能有该页的数据。