【问题标题】:Why does the OS need a page table if the MMU already has one?如果 MMU 已经有页表,为什么操作系统还需要页表?
【发布时间】:2020-03-18 13:54:38
【问题描述】:

我很困惑 OS 和 MMU 之间的虚拟内存管理界限在哪里。

如果 MMU 负责将虚拟地址转换为物理地址,并且有内部页表,为什么操作系统也需要有页表?

【问题讨论】:

    标签: operating-system mmu


    【解决方案1】:

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

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

    本质上,操作系统和 MMU 共享页表(而 MMU 没有自己的)。

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

    【讨论】:

    • 所以MMU基本上只是为了加快翻译过程?并且操作系统已经知道每个虚拟到物理页面的映射?
    • 是的,MMU 让它足够快,可以实用(例如,软件不能为每条指令翻译“指令指针的虚拟地址”);并且操作系统知道操作系统想要什么(并且知道什么时候改变它想要的东西——例如,当一个进程启动或停止,或者调用mmap()brk(),或者数据被传输到/从交换空间,或者数据被传输时到/从内存映射文件,或...)。
    • 你提到的MMU(比缓存更多的存储)通常包含操作系统提供的完整页表吗?那个存储叫什么?
    • 我提到了 2 个替代方案 - 一个在 OS 和 MMU 之间共享页表(并且 MMU 也可能有缓存);还有一个(不太常见)MMU 只有缓存(没有别的)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-03
    • 2017-10-03
    • 2017-01-31
    • 2011-04-20
    • 2017-11-13
    相关资源
    最近更新 更多