CPU的MMU中有TLB还需要TTW的快速查找~

TTW的定义

TTW 是 Table Walk 的缩写,中文常翻译为"页表遍历"或"查表"。 它是指内存管理单元 在翻译后备缓冲器 未命中时,根据当前进程的页表结构,一步步地查询物理内存中的页表,最终将虚拟地址转换为物理地址的过程。


要理解 T4TW,需要先了解几个背景知识:

  1. MMU:内存管理单元,是 CPU 的一个硬件部件,负责将软件使用的虚拟地址转换为物理内存使用的物理地址。这是实现虚拟内存、内存保护和多任务隔离的基石。
  2. 页表:一个存储在物理内存中的数据结构,就像是 MMU 用来查的"地址翻译字典"。它定义了虚拟页到物理页帧的映射关系。现代系统通常使用多级页表(如 x86-64 的四级页表),像一个多层的索引目录。
  3. TLB:翻译后备缓冲器,是 MMU 内部的一个小型高速缓存。它缓存了最近使用过的"虚拟页号 -> 物理页帧号"的映射关系。当 CPU 需要转换地址时,MMU 首先在 TLB 中查找,如果找到(TLB 命中),转换在一个时钟周期内即可完成,速度极快。

TTW 发生的时机:

当 CPU 需要访问一个内存地址(比如加载指令或数据)时,MMU 首先用该地址的虚拟页号去查找 TLB。如果 TLB 中没有对应的有效表项(即TLB Miss),这时就需要启动 TTW 过程。

TTW 的过程:

TTW 就是 MMU"翻阅"内存中完整页表的过程。以经典的 x86-64 四级页表为例:

  1. MMU 从 CR3 寄存器(现在叫 IA32_PML4)中获取当前进程的顶级页表(PML4)的物理基地址。
  2. 用虚拟地址的第 1 段索引位,在 PML4 表中找到一项,获取下一级页表(页目录指针表)的物理基地址。
  3. 用虚拟地址的第 2 段索引位,在 PDPT 中找到一项,获取下一级页表(页目录)的物理基地址。
  4. 用虚拟地址的第 3 段索引位,在页目录中找到一项,获取最后一级页表(页表)的物理基地址。
  5. 用虚拟地址的第 4 段索引位,在页表中找到最终的表项,这个表项中就包含了目标物理页帧号。
  6. 将物理页帧号与虚拟地址中的页内偏移组合,得到完整的物理地址。
  7. (关键步骤) 将这次查找到的映射关系(虚拟页号 -> 物理页帧号)写入 TLB 中,以便后续快速访问。

这个过程可能需要 4 次物理内存访问(每一级页表访问一次内存)。由于内存访问速度远慢于 CPU 和 TLB,所以一次 TTW 的代价非常高(通常是数百个 CPU 周期)。


为什么 TTW 如此重要?

  1. 性能关键路径:TTW 是处理 TLB 未命中的核心操作。如果程序访问的内存模式空间局部性很差(频繁访问大量不连续的地址),会导致大量的 TLB Miss 和随之而来的 TTW,性能会急剧下降。这种现象称为 TLB 颠簸。
  2. 硬件与软件的实现:
    · 硬件 TTW:现代 CPU 的 MMU 内置了硬件表遍历单元。当发生 TLB Miss 时,由这个硬件电路自动完成上述多级页表的查找过程,操作系统无需干预。这是最常见的方式。
    · 软件 TTW:在一些较旧的架构(如 MIPS)或某些优化场景下,发生 TLB Miss 时,CPU 会触发一个异常(TLB Fault),并跳转到操作系统内核预设的异常处理程序。由操作系统的代码来执行页表遍历,找到映射后,手动写回 TLB。这给了操作系统更大的灵活性,但速度比硬件 TTW 慢。
  3. 与缺页异常的区别:TTW 查找的是页表本身。如果 TTW 过程中发现某一级页表项是空的(Present 位为 0),或者权限检查失败,MMU 会触发一个 缺页异常 或访问权限异常。此时,操作系统的缺页异常处理程序会被调用,负责分配物理页、建立映射、从磁盘加载数据等更复杂的工作。可以说,TTW 是"找地图",而缺页处理是"绘制新地图"。

简单比喻:

· TLB 就像是你记在脑子里的常用电话号码(快速,但容量小)。

· 页表 就像是一本厚厚的电话簿(完整,但在书架上,找起来慢)。

· TTW 就是当你想拨一个号码但脑子里没记住时,去书架上翻开电话簿查找的过程。查完后,你很可能会把这个新号码背下来(填入 TLB),下次再打就快了。

相关推荐
小杨同学493 小时前
Linux 从入门到实战:常用指令与 C 语言开发全指南
linux
福尔摩斯张3 小时前
Linux的pthread_self函数详解:多线程编程中的身份标识器(超详细)
linux·运维·服务器·网络·网络协议·tcp/ip·php
2401_832298103 小时前
一云多芯时代:云服务器如何打破芯片架构壁垒
运维·服务器·架构
ArrebolJiuZhou3 小时前
02arm指令集(一)——LDR,MOV,STR的使用
linux·网络·单片机
一只旭宝3 小时前
Linux专题八:生产者消费者,读写者模型以及网络编程
linux·网络
Web极客码4 小时前
如何在 Linux 中终止一个进程?
linux·运维·服务器
大聪明-PLUS4 小时前
Linux 中的 GPIO 驱动程序
linux·嵌入式·arm·smarc
Clarence Liu4 小时前
虚拟机与容器的差异与取舍
linux·后端·容器
A13247053124 小时前
防火墙配置入门:保护你的服务器
linux·运维·服务器·网络