MMU 如何知道操作系统正在使用的页面 table 的级别?
how do MMU knows the level of page table being used by operating system?
Afaik,在 x86 中,操作系统所做的所有工作就是设置 CR3 寄存器并让 MMU 执行左侧操作以将线性地址转换为物理地址。但是既然这个工作是由MMU完成的,那么MMU应该知道multi-level pagetable如何划分的规则。但是我从来没有看到任何文件谈论这样的细节。我有什么误解吗?
page-table 格式是硬件(包括每个 CPU 内核内置的 page-walker)实现的 ISA 的一部分,因此应该遵循哪些软件.
因此 x86 中的页面遍历硬件 CPU 只是为了以 x86 方式分割地址而构建的。您可以查看描述页面 table 格式的 ISA 文档,以记录硬件将要查找的内容。
当可以选择页面-table 格式时(例如 PAE 每级 9 位或传统 32 位每级 10 位,或 x86-64 PML5 5 级页面 tables对于 57 个虚拟位与标准 PML4),选择由控制寄存器设置。
“MMU”在 x86(或其他现代 CPUs)中并不是真正独立的东西;它是 CPU 内核的一部分,可能会受到控制寄存器位的影响。如果它是一个完全独立的芯片,您可以使用 out
指令或存储到特殊 MMIO 地址来设置顶级页面目录,而不是 mov
到 cr3
。
Afaik,在 x86 中,操作系统所做的所有工作就是设置 CR3 寄存器并让 MMU 执行左侧操作以将线性地址转换为物理地址。但是既然这个工作是由MMU完成的,那么MMU应该知道multi-level pagetable如何划分的规则。但是我从来没有看到任何文件谈论这样的细节。我有什么误解吗?
page-table 格式是硬件(包括每个 CPU 内核内置的 page-walker)实现的 ISA 的一部分,因此应该遵循哪些软件.
因此 x86 中的页面遍历硬件 CPU 只是为了以 x86 方式分割地址而构建的。您可以查看描述页面 table 格式的 ISA 文档,以记录硬件将要查找的内容。
当可以选择页面-table 格式时(例如 PAE 每级 9 位或传统 32 位每级 10 位,或 x86-64 PML5 5 级页面 tables对于 57 个虚拟位与标准 PML4),选择由控制寄存器设置。
“MMU”在 x86(或其他现代 CPUs)中并不是真正独立的东西;它是 CPU 内核的一部分,可能会受到控制寄存器位的影响。如果它是一个完全独立的芯片,您可以使用 out
指令或存储到特殊 MMIO 地址来设置顶级页面目录,而不是 mov
到 cr3
。