[MMU] Table walk flow详解
Table walk flow详解
摘要:我将基于计算机体系结构(特别是 x86-64 架构中的分页机制)来解释table walk flow,因为4级页表(4-level page table)最常见于 Intel/AMD 的64位模式(也称为 IA-32e 或 long mode)。如果您指的是其他架构(如 ARM64 的4级页表),请提供更多细节,我可以调整。
我会先简要介绍4级页表的概念,然后详细描述 table walk flow(页表遍历流程)。最后我会解释如何基于 PDE 的 base address 计算下一个页表的物理地址或最终的物理页帧地址。
响应基于标准的 x86-64 分页机制,使用4KB 页大小(最常见)。如果涉及更大页(如2MB或1GB),流程会略有不同,我会注明。
一、4级页表的简介
在 x86-64 架构中,虚拟地址(VA, Virtual Address)到物理地址(PA, Physical Address)的转换使用多级页表来实现内存分页和保护。4级页表结构如下(从最高级到最低级):
- PML4 (Page Map Level 4 Table):第1级,顶级页表。
- PDP (Page Directory Pointer Table):第2级。
- PD (Page Directory Table):第3级。
- PT (Page Table):第4级,最终指向物理页帧。
每个表包含512个条目(entries),每个条目64位(8字节)。虚拟地址被拆分成索引位,用于逐级查找。
-
虚拟地址分解(48位有效VA,在64位地址空间中;假设4KB页):
- Bits 47-39: PML4 索引(9位,512 entries)。
- Bits 38-30: PDP 索引(9位)。
- Bits 29-21: PD 索引(9位)。
- Bits 20-12: PT 索引(9位)。
- Bits 11-0: 页内偏移(12位,4KB页)。
-
CR3 寄存器:存储 PML4 表的物理基地址(base address),这是 table w