【发布时间】:2015-05-02 19:08:26
【问题描述】:
在操作系统的 32 位实现中,页表具有固定的结构(两个级别 - 页目录和页表)。但在 x86_64 系统中,一般实现了多级页表(Linux 中为 4 级)。系统如何知道正在使用多少级别?这需要什么命令?我们如何让 CPU 知道全局页面目录等结构?
【问题讨论】:
标签: kernel paging x86-64 bare-metal mmu
在操作系统的 32 位实现中,页表具有固定的结构(两个级别 - 页目录和页表)。但在 x86_64 系统中,一般实现了多级页表(Linux 中为 4 级)。系统如何知道正在使用多少级别?这需要什么命令?我们如何让 CPU 知道全局页面目录等结构?
【问题讨论】:
标签: kernel paging x86-64 bare-metal mmu
简答:
权威文本:参见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。
【讨论】: