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

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

目录
  • Intel® 32-Bit 页表导论

    • CR3

    • Page Directory

    • Page Table

    • 4KiB/4MiB 物理区域

    • 32-Bit 分页页表与 Linux 页表

  • 32-Bit 分页使用场景

    • 32-Bit 分页模式映射 4MiB

    • 32-Bit 分页模式映射 4KiB

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


Intel® 32-Bit 页表导论

CR0.PG = 1CR4.PAE = 0, 那么硬件将采用 32-Bit 分页模式,32-Bit 分页模式将 32 位线性地址空间转换为 40 位的物理地址空间,尽管 40 位物理地址空间对应 1TiB,但线性地址被限制在 32 位,因此最终只能同时访问 4GiB 的线性空间。32-Bit 分页使用一系列分页结构来对线性地址进行转换。32-Bit 分页可以将线性地址映射到 4KB 页面或 4MB 页面. Intel i386 架构默认采用 32-Bit 分页模式. CR3 用于定位第一个分页结构(页目录),其结构如下:

CR3

当进程运行之前,都会将自己的页目录基地址加载到 CR3 寄存器里,统一由 CR3 寄存器指向页表目录的基地址. 在 32-Bit 分页模式下,CR3 寄存器是一个 32 位寄存器,其字段含义如下:

  • Address Filed: 该字段 [12: 31] 记录了 Page Directory 页表页的基地址对应的 Page Frame
  • PCD/PWT: 与 PCD/PWT/PAT 组合用于选择 Page Directory 页表页的 Memory Type
  • Ignore: 其余字段均忽略
Page Directory

当通过 CR3 寄存器获得 Page Directory 页表页之后,其内部包含了多个 32 位的 PDE,PDE 可以用于映射 4KiB 页面,也可以映射 4MiB 页面. 可以使用线性地址的 [22: 31] 作为索引,在 Page Directory 里找到对应点 PDE,当映射 4KiB 页表时 PDE 的位图如上图:

  • Address Filed: 该字段 [12: 31] 记录了 Page Table 页表页的基地址对应的 Page Frame
  • PS(Page Size): 页表大小标志位(Bit7), 在映射 4KiB 页面的 PDE 里必须清零.
  • A(Access): Access 标志位,用于记录 Page Table 页表页是否被访问过
  • PCD/PWT: PCD/PWT/PAT 标记集合用于设置 Page Table 页表页映射的 Memory Type
  • U/S: U/S 标志位(Bit2), 当置位说明 4MiB 区域 user-mode 可以访问; 反之 super-mode 访问
  • R/W: 读写标志位(Bit1), 当置位说明 4MiB 区域可读可写; 反之 4MiB 区域只读
  • P: Present 标志位(Bit0), 当置位说明 Page Table 存在; 反之说明不存在.
  • Ignore: 忽略

当通过 CR3 寄存器获得 Page Directory 页表页之后,其内部包含了多个 32 位的 PDE,PDE 可以用于映射 4KiB 页面,也可以映射 4MiB 页面. 可以使用线性地址的 [22: 31] 作为索引,在 Page Directory 里找到对应点 PDE,当映射 4MiB 页表时 PDE 的位图如上图:

  • Address Filed: 该字段 [22: 31] 记录了 4MiB 物理页基地址的 [22: 31]; 该字段 [13: M] 字段记录了 4MiB 物理页基地址 [32: M]
  • G(Global): 全局页标志,当该标志置位那么对所有进程可见; 反之清零只能对当前进程所见
  • PS(Page Size): 页表大小标志位(Bit7), 在映射 4MiB 页面的 PDE 里必须置位.
  • A(Access): Access 标志位,当置位表示 4MiB 物理页被访问过; 反之表示没有被访问过
  • D(Dirty): Dirty 标志位,当置位表示 4MiB 物理页被写入; 反之表示没有写入
  • PCD/PWT: PCD/PWT/PAT 标记集合用于设置 4MiB 物理页映射的 Memory Type
  • U/S: U/S 标志位(Bit2), 当置位说明 4MiB 物理页 user-mode 可以访问; 反之 super-mode 访问
  • R/W: 读写标志位(Bit1), 当置位说明 4MiB 物理页可读可写; 反之 4MiB 区域只读
  • P: Present 标志位(Bit0), 当置位说明 4MiB 物理页存在; 反之说明不存在.
  • Ignore: 忽略
  • Reserved: 预留区域必须清零.

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

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

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