图片无法显示,请右键点击新窗口打开图片

BiscuitOS 内存管理之分页大专题订阅入口

目录
  • 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 = 1CR4.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: 忽略

图片无法显示,请右键点击新窗口打开图片

BiscuitOS 内存管理之分页大专题订阅入口

图片无法显示,请右键点击新窗口打开图片