【问题标题】:Paging in x86-64 architecturex86-64 架构中的分页
【发布时间】:2015-05-02 19:08:26
【问题描述】:

在操作系统的 32 位实现中,页表具有固定的结构(两个级别 - 页目录和页表)。但在 x86_64 系统中,一般实现了多级页表(Linux 中为 4 级)。系统如何知道正在使用多少级别?这需要什么命令?我们如何让 CPU 知道全局页面目录等结构?

【问题讨论】:

    标签: kernel paging x86-64 bare-metal mmu


    【解决方案1】:

    简答

    • 在撰写本文时,x86-64 页表始终为 4 级。将来,可能会实现 5 和 6 级以覆盖完整的 64 位地址空间。
    • 操作系统通过执行带有各种参数的 CPUID 指令来查询硬件功能。
    • 操作系统通过写入控制寄存器 CR3 来设置全局页面目录指针。

    权威文本:参见Intel® 64 and IA-32 Architectures Software Developer Manuals,第 3A 卷“系统编程指南,第 1 部分”,第 4.5 节“IA-32e 寻呼”。

    Wikipedia text(稍作修改):

    64 位寻址模式(“长模式”)是物理地址扩展 (PAE) 的超集。与 PAE 模式下的系统使用的三级页表系统不同,长模式下运行的系统使用四级页表:PAE 的 Page-Directory Pointer Table 从 4 个条目扩展到 512 个条目,以及一个额外的 Page-Map Level 4 (PML4) 添加表,包含 48 位实现中的 512 个条目。在提供更大虚拟地址的实现中,后一个表将增长以容纳足够的条目来描述整个地址范围,对于 64 位实现,理论上最多可达 33,554,432 个条目,或者被一个新的映射级别过度排序,例如作为 PML5。

    【讨论】:

      猜你喜欢
      • 2016-10-11
      • 1970-01-01
      • 1970-01-01
      • 2019-07-19
      • 2022-08-24
      • 2015-06-06
      • 2013-10-12
      • 2021-09-18
      • 1970-01-01
      相关资源
      最近更新 更多