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),下次再打就快了。

相关推荐
你好潘先生7 小时前
别再记命令了,用 yeero do 说句人话就能跑脚本,而且不烧 token
服务器·python·命令行
orion5719 小时前
Missing Semester Class1:course overview and introduction of shell
linux
用户120487221611 天前
Linux驱动编译与加载
linux·嵌入式
程序员老赵1 天前
服务器文件不想 SFTP 上传?Docker 跑个 File Browser,浏览器就能管理
服务器·docker·开源
vivo互联网技术1 天前
从 10 分钟到 1 秒:ES 深度分页任意跳页的三轮优化实战
服务器·数据库·redis·elasticsearch·深度分页
用户805533698031 天前
Input 子系统架构:Core、Handler、Driver 三层是怎么协作的
linux·嵌入式
用户805533698031 天前
RK-Forge外设系列开篇 - 把板子从「能启动」变成「能用」:Ethernet/SPI/MMC 三个纯接线外设
linux·github·嵌入式
七歌杜金房2 天前
我终于又有了自己的 Linux 电脑
linux·debian·mac
tntxia3 天前
linux curl命令详解_curl详解
linux