X86 MMU如何知道操作系统正在使用的页表的级别?

X86 MMU如何知道操作系统正在使用的页表的级别?,x86,operating-system,cpu-architecture,virtual-memory,mmu,X86,Operating System,Cpu Architecture,Virtual Memory,Mmu,好的,在x86中,操作系统所做的就是设置CR3寄存器,让MMU做左边的操作,将线性addr转换为物理addr。但由于这项工作是由MMU完成的,所以MMU应该知道如何划分多级页表的规则。然而,我从未见过任何文件谈论这样的细节。有什么我误解了吗?页表格式是ISA的一部分,硬件(包括每个CPU内核内置的页遍历器)实现了ISA,因此应该遵循哪个软件 因此,x86 CPU中的页漫游硬件就是为了以x86方式分割地址而构建的。您可以查看描述页表格式的ISA文档,以记录硬件将要查找的内容 当页表格式有选择时(如

好的,在x86中,操作系统所做的就是设置CR3寄存器,让MMU做左边的操作,将线性addr转换为物理addr。但由于这项工作是由MMU完成的,所以MMU应该知道如何划分多级页表的规则。然而,我从未见过任何文件谈论这样的细节。有什么我误解了吗?

页表格式是ISA的一部分,硬件(包括每个CPU内核内置的页遍历器)实现了ISA,因此应该遵循哪个软件

因此,x86 CPU中的页漫游硬件就是为了以x86方式分割地址而构建的。您可以查看描述页表格式的ISA文档,以记录硬件将要查找的内容

当页表格式有选择时(如PAE每级9位或传统32位每级10位,或x86-64 PML5 5级页表57个虚拟位与标准PML4),选择由控制寄存器设置


在x86(或其他现代CPU)中,“MMU”并不是一个单独的东西;它是CPU核心的一部分,可受控制寄存器位的影响。如果它是一个完全独立的芯片,您可以设置一个带有
out
指令的顶级页面目录,或者将存储设置为一个特殊的MMIO地址,而不是
mov
cr3

关于这个答案,页面表格式似乎主要由具体的cpu架构决定。但这里有一个答案,表明操作系统可以决定使用多少级别,而不考虑cpu体系结构。所以让我困惑的是,内核在页表级别扮演了多少角色。内核只是设置了一些寄存器还是做了一些不只是设置寄存器的事情,比如在地址转换过程中调用一些内核回调?@scottxiao:这是第一个答案(关于“三级”页表),可能是关于内核如何跟踪“逻辑”映射,与硬件查看的数据结构分离。(请注意,
/proc//maps
在页面被逐出并调出时不会更改。)或者它指的是一个2级(传统x86?)硬件页面表数组,每个进程一个。我不知道内核是如何精确地跟踪其数据结构的,但我100%确定它最后告诉硬件做什么/如何做。@scottxiao:内核只设置寄存器;x86页面漫游是完全硬件化的,软件是不可见的。(与MIPS不同,在MIPS上,TLB未命中会回调操作系统提供的TLB未命中处理程序)。同样相关:显示了x86-64页表格式,并显示了如何设置它(包括旧式x86 2级)。对于您记忆中的x86-64 PML5 5级页表这样的体系结构,您的意思是内核必须在这种体系结构中提供5级表吗?