x86-64 架构中的分页

问题描述 投票:0回答:1

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

kernel x86-64 paging mmu page-tables
1个回答
3
投票

简短回答

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

权威文本:请参阅英特尔® 64 和 IA-32 架构软件开发人员手册,第 3A 卷“系统编程指南,第 1 部分”,第 4.5 节“IA-32e 分页”。

维基百科文本(略有编辑):

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

© www.soinside.com 2019 - 2024. All rights reserved.