Kernel x86-64体系结构中的分页

Kernel x86-64体系结构中的分页,kernel,paging,x86-64,bare-metal,mmu,Kernel,Paging,X86 64,Bare Metal,Mmu,在操作系统的32位实现中,页表具有固定的结构(两级-页目录和页表)。但在x86_64系统中,通常会实现多个级别的页表(Linux中为4)。系统如何知道使用了多少个级别?这需要什么命令?如何让CPU知道全局页面目录和其他结构?简短回答: 在编写本文时,x86-64页表格始终为4级。将来,可能会实现5级和6级以覆盖整个64位地址空间 操作系统通过使用各种参数执行CPUID指令来查询硬件功能 操作系统通过写入控制寄存器CR3来设置全局页面目录指针 权威文本:见第3A卷“系统编程指南,第1部分”,第

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

简短回答

  • 在编写本文时,x86-64页表格始终为4级。将来,可能会实现5级和6级以覆盖整个64位地址空间
  • 操作系统通过使用各种参数执行CPUID指令来查询硬件功能
  • 操作系统通过写入控制寄存器CR3来设置全局页面目录指针
权威文本:见第3A卷“系统编程指南,第1部分”,第4.5节“IA-32e分页”

(略加编辑):

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