我对虚拟内存管理的操作系统和 MMU 之间的界限在哪里感到困惑。
如果MMU负责将虚拟地址转换为物理地址并且有内部页表,那么为什么操作系统也需要有页表呢?
需要告诉 MMU 操作系统希望它如何将虚拟地址转换为物理地址(通常,当根本不转换时 - 例如,如果需要从磁盘获取虚拟地址处的页面,或者如果访问页应该被视为程序员错误 - 例如取消引用 NULL 指针)。
为此,操作系统提供页表,MMU 使用页表将虚拟地址转换为操作系统的物理地址。
本质上,操作系统和 MMU 共享页表(MMU 没有自己的页表)。
请注意,MMU 可以缓存转换(例如 TLB 条目)以提高性能,但(有限大小)缓存与完整的原始表不同。还有一些(不太常见的)架构,其中 MMU 仅具有缓存,根本不使用页表(当出现“TLB 未命中”时,CPU/MMU 会要求操作系统找出应该进行的转换) ,它更灵活(操作系统可以使用它喜欢的任何页表,因为它不必匹配 MMU 的期望),但速度较慢(更高的 TLB 未命中成本)。