【发布时间】:2020-03-18 13:54:38
【问题描述】:
我很困惑 OS 和 MMU 之间的虚拟内存管理界限在哪里。
如果 MMU 负责将虚拟地址转换为物理地址,并且有内部页表,为什么操作系统也需要有页表?
【问题讨论】:
标签: operating-system mmu
我很困惑 OS 和 MMU 之间的虚拟内存管理界限在哪里。
如果 MMU 负责将虚拟地址转换为物理地址,并且有内部页表,为什么操作系统也需要有页表?
【问题讨论】:
标签: operating-system mmu
MMU 需要被告知操作系统希望它如何将虚拟地址转换为物理地址(并且通常,什么时候根本不转换 - 例如,如果需要从磁盘获取位于虚拟地址的页面,或者如果访问页面应被视为程序员错误 - 例如取消引用 NULL 指针)。
为此,操作系统提供页表,MMU 使用页表将虚拟地址转换为操作系统的物理地址。
本质上,操作系统和 MMU 共享页表(而 MMU 没有自己的)。
请注意,MMU 可能会缓存转换(例如 TLB 条目)以提高性能,但(有限大小)缓存与完整的原始表不同。还有一些(不太常见的)架构,其中 MMU 只有一个缓存,根本不使用页表(当出现“TLB 未命中”时,CPU/MMU 会要求操作系统确定翻译应该是什么) ,这更灵活(操作系统可以使用它喜欢的任何页表,因为它不必匹配 MMU 期望的内容)但速度较慢(更高的 TLB 未命中成本)。
【讨论】:
mmap()或brk(),或者数据被传输到/从交换空间,或者数据被传输时到/从内存映射文件,或...)。