![Linux内核使用多少级页表? 4还是5?](https://linux22.com/image/9638/Linux%E5%86%85%E6%A0%B8%E4%BD%BF%E7%94%A8%E5%A4%9A%E5%B0%91%E7%BA%A7%E9%A1%B5%E8%A1%A8%EF%BC%9F%204%E8%BF%98%E6%98%AF5%EF%BC%9F.png)
这文章说Linux使用三级页表。
然而,书中专业Linux内核架构,在3.3.1章节中,说Linux使用五级页表。
还,这文章说“相反,4.11-rc2 的五级页表(合并窗口之外)的合并几乎没有引起人们的注意。”
我的问题是内核实际使用多少个页表级别?如果历史有改变,是哪个版本?
答案1
问题是,这取决于内核版本和处理器体系结构(因为您必须在硬件中支持给定数量的页表)。在没有 PAE 的 32 位 x86 上,它是 2 个级别。在具有 PAE 的 32 位 x86 上,它有 3 个级别。在 64 位 x86 上,通常为 4 个级别,但最近合并了对 5 个级别的支持(但是,只有真正高端的 Intel 服务器处理器支持此功能,而且只有最近的处理器)。在64位SPARC上,我认为从一开始就已经是5个级别了,我认为64位s390和PPC也使用5个级别,但我不确定。
答案2
我检查了 linux 内核代码,得到了与 Austin 的答案不同的东西。
arch/x86/Kconfig
config PGTABLE_LEVELS
int
default 5 if X86_5LEVEL
default 4 if X86_64
default 3 if X86_PAE
default 2