目录
Intel® 5-level 导论
CR3
PML5
PML4
Page Directory Pointer
Page Directory
Page Table
5-level 分页下的线性地址空间
4KiB/2MiB/1Gig 物理区域
5 级分页页表与 Linux 页表
5 级页表应用场景
5 级分页模式映射 1Gig
5 级分页模式映射 2MiB
5 级分页模式映射 4KiB
Intel® 5-level 导论
当 CR0.PG = 1、CR4.PAE = 1、IA32_EFER.LME = 1 且 CR4.LA57 = 1, 那么硬件将采用 5-level 分页模式,4 级分页模式将 57 位线性地址空间转换为 52 位的物理地址空间,尽管 52 位物理地址空间对应 4PB(拍字节),但线性地址被限制在 57 位,因此最终只能同时访问 128PB 的线性空间。5 级分页使用一系列分页结构来对线性地址进行转换。5 级分页可以将线性地址映射到 4KB 页面、2MiB 页表和 1Gig 页面. Intel X86 架构可以采用 5 级分页模式. CR3 用于定位第一个分页结构(PML5 页表),其结构如下:
CR3
当进程运行之前,都会将自己的页目录基地址加载到 CR3 寄存器里,统一由 CR3 寄存器指向页表目录的基地址. 在 4 级分页模式下,CR3 寄存器是一个 64 位寄存器,当 CR4.PCIDE = 0 其字段含义如下:
- Address Filed: 该字段 [12: M] 记录了 PML5 页表页的基地址对应的 Page Frame
- PCD/PWT: 与 PCD/PWT/PAT 组合用于选择 PML5 页表页的 Memory Type
- Ignore: 其余字段均忽略
- Address Filed: 该字段 [12: M] 记录了 PML5 页表页的基地址对应的 Page Frame
- PCID: 进程相关的 PCID 标识
- Reserved: 预留字段必须为 0
当 CR4.PCIDE = 1 时,CR3 寄存器的布局为上图,原先的 PWT/PCD 字段则由 PCID 字段替代,那么 PML5 页表页的 Memory Type 则在最终的 Memory Type 表的索引默认为 0. 另外 M 的值与 MAXPHYADDR 有关. 通过 CR3 寄存器最终可以获得 PML5 页表页的物理地址.
PML5
当通过 CR3 寄存器获得 PML5 页表页之后,其内部包含多个 64 位的 PML4E,PML4E 用于映射 PML4 页表。可以使用虚拟地址的 [48 : 55] 作为索引,在 PML5 也表里找到对应的 PML5E, 每个 PML5E 映射 256TiB 的区域,上图为 PML5E 的位图:
- Address Filed: 该字段 [MAXPHYADDR : 12] 记录 PML4 页表页物理基地址对应的 Page Frame
- XD: IA_EFER.NXE = 1 时用于控制 256TiB 区域不可执行使能.
- A(Access): 访问标志位,用于记录 PML4 页表页是否被访问过
- PCD/PWT: PCD/PWT/PAT 标记集合用于设置 PML4 页表页映射的 Memory Type
- U/S: U/S 标志位, 当置位说明 256TiB 区域 user-mode 可以访问; 反之 super-mode 访问
- P: PageSize 标志位必须为 0.
- R/W: 读写标志位, 当置位说明 256TiB 区域可读可写; 反之 256TiB 区域只读
- P: Present 标志位, 当置位说明 PML4 存在; 反之说明不存在.
- Ignore: 忽略