首页/计算机组成原理/03-memory/地址转换过程 🔗 在 Obsidian 中打开
计算机组成原理 · 03-memory

地址转换过程

重要度 ⭐⭐⭐⭐⭐存储器层次结构地址转换虚拟地址TLBCache存储器
速查
一次访存的完整链路:虚地址 VA →(TLB / 页表)→ 物理地址 PA →(Cache)→ 主存。页内偏移在虚实地址中完全相同,只有页号被替换成页框号。

速查

项目
虚地址 → 实地址通过页表 / TLB 转换
虚地址 → Cache通过 Cache 映射(直接 / 全相联 / 组相联)
TLB页表的高速缓存,加速地址转换
页表基址存在页表基址寄存器(PTBR)中
多级页表减少页表占用的连续内存

核心概念

完整的地址访问过程

CPU 发出虚地址后,需要经过以下步骤获取数据:

虚地址(VA)
  │
  ├─→ TLB查页框号 ──→ 物理地址(PA) ──→ Cache查数据
  │     │                    │
  │     ├ TLB命中             ├ Cache命中→返回数据
  │     │                    └ Cache未命中→访问主存
  │     └ TLB未命中→查页表→更新TLB
  │                           │
  │                           └ 缺页→调页→重试
  └─→ 直接查页表(无TLB时)

虚地址结构

虚地址 = 虚页号(VPN) + 页内偏移(VPO)

物理地址结构

物理地址 = 物理页框号(PPN/PFN) + 页内偏移(PO)
虚地址 VA 虚页号 VPN 页内偏移 VPO 页框号 PPN 页内偏移 PO(不变) 页表 / TLB 转换 原样复制
图:地址转换只换页号、不换偏移——这是判断题与计算题的关键。

TLB(Translation Lookaside Buffer)

  • 存放最近使用的虚页号 → 物理页框号映射。
  • 类似于页表的 Cache。
  • 全相联或组相联。
  • 命中 → 直接得到物理地址,避免查页表。

Cache 查找

物理地址在 Cache 中的划分(组相联):

物理地址 = 标记(Tag) + 组号(Index) + 块内偏移(Offset)

三种命中组合

TLBPageCache说明
命中命中命中最快,直接取数据
未命中命中命中查页表得到 PA,Cache 命中取数据
未命中命中未命中查页表得 PA,Cache 未命中访问主存
未命中未命中缺页中断,OS 调页
⚠️ 两条铁律
  • TLB 命中 → Page 一定命中(TLB 是页表的 Cache)。
  • Page 未命中 → TLB 一定未命中

关键性质

性质说明
TLB 命中 → 页必命中TLB 是页表的子集
页未命中 → TLB 必未命中页表中没有,TLB 也不会有
Cache 命中需要 PA先完成虚→实转换才能查 Cache
地址偏移不变虚地址和物理地址的页内偏移相同
多级 CacheL1 → L2 → L3 → 主存,逐级查找

常见考法

考法解题套路
求有效访问时间根据 TLB 命中率、Cache 命中率、缺页率逐层计算
地址划分页号 + 页内偏移;标记 + 组号 + 块内偏移
TLB/页表/Cache 联合计算分情况讨论各种命中组合
缺页中断处理OS 介入,调页 → 更新页表 → 重试指令
地址转换过程描述按步骤画出完整流程

有效访问时间计算示例

TLB 命中率 98%,Cache 命中率 95%,缺页率 0.1%;TLB 访问 1 ns,Cache 访问 10 ns,主存访问 100 ns,磁盘 10 ms:

  • TLB 命中 + Cache 命中:$1+10=11\ \text{ns}$(概率 $0.98\times0.95$)
  • TLB 未命中 + 页命中 + Cache 命中:$1+100+10=111\ \text{ns}$
  • 缺页:$1+100+10\,000\,000 \approx 10\ \text{ms}$ 级
解题模板把所有路径列成"概率 × 耗时"再求和:$$T_{\text{eff}} = \sum_i p_i \cdot t_i$$ 缺页那一项虽然概率极小,但耗时是 ns 的 $10^7$ 倍,往往主导平均值,切勿直接忽略。

易错点

必记
  • TLB 命中 → 页必命中(逆命题不成立)。
  • Cache 查找需要物理地址(不是虚地址)。
  • 页内偏移在虚地址和物理地址中是相同的。
  • 缺页是 OS 处理的异常(不是硬件自动处理)。
  • TLB 和 Cache 可以同时命中、同时未命中,需分情况讨论。

核心结论

必背
  1. 地址转换:虚地址 →(TLB / 页表)→ 物理地址 →(Cache)→ 数据。
  2. TLB 命中 → 页必命中。
  3. Cache 查找需要物理地址。
  4. 页内偏移在虚实地址中相同。
  5. 有效访问时间需综合 TLB / Cache / 缺页率计算。

记忆卡片

TLB 命中则页表一定命中吗?
是。TLB 是页表的 Cache,TLB 中有则页表必有。
Cache 查找用虚地址还是物理地址?
物理地址(需先完成地址转换)。
页内偏移为什么不变?
虚页和物理页大小相同,偏移不变。
缺页时谁来处理?
操作系统(缺页中断处理程序)。
有效访问时间如何计算?
分 TLB 命中/未命中 $\times$ Cache 命中/未命中 $\times$ 缺页各种情况加权求和。
页表基址存放在哪?
页表基址寄存器 PTBR;进程切换时随之切换。

交互动画 · 四种命中组合的访问路径

虚地址 VAVPN + 偏移 TLB页表的 Cache 物理地址 PAPPN + 偏移 CacheTag/Index/Offset 页表PTBR 定位 主存取块回填 Cache 磁盘 · 调页OS 缺页中断 TLB 未命中 Cache 未命中 页未命中(缺页)
选择一种命中组合,查看访问路径与耗时
参数:TLB 1 ns,Cache 10 ns,主存 100 ns,磁盘 10 ms
示意图:橙色流动虚线为当前激活路径;红色框表示该部件本次未命中。注意任何路径都必须先拿到 PA 才能查 Cache。

相关知识点

virtual-memory cache-memory cache-mapping-methods

↑ 站内 HTML 相对链接(纯网页可浏览);本页右上「在 Obsidian 中打开」跳回源笔记。