为什么 OS 需要一个页面 table 如果 MMU 已经有一个?

Why does the OS need a page table if the MMU already has one?

我对 OS 和用于虚拟内存管理的 MMU 之间的界限在哪里感到困惑。

如果 MMU 负责将虚拟地址转换为物理地址并且有一个内部页面 table,为什么 OS 也需要有一个页面 table?

需要告诉 MMU OS 希望它如何将虚拟地址转换为物理地址(通常,什么时候根本不转换——例如,如果需要获取虚拟地址的页面来自磁盘,或者如果访问页面应被视为程序员错误 - 例如取消引用 NULL 指针)。

为此,OS 提供页表,MMU 使用页表将虚拟地址转换为 OS 的物理地址。

本质上,OS 和 MMU 共享页表(MMU 没有自己的页表)。

请注意,MMU 可能会缓存翻译(例如 TLB 条目)以提高性能,但(有限大小)缓存与完整的原始缓存不同 table/s。还有一些(不太常见的)架构,其中 MMU 只有一个缓存,根本不使用页表(当有 "TLB miss" 时,CPU/MMU 要求 OS 计算找出翻译应该是什么),它更灵活(OS 可以使用它喜欢的任何页表,因为它不必匹配 MMU 期望的内容)但速度较慢(更高的 TLB 未命中成本)。