shi*_*ang 3 cpu operating-system process mmu
这是我的系统讲座的PowerPoint中的一句话,但我不明白为什么上下文切换会使MMU失效。我知道它会使缓存无效,因为缓存包含另一个进程的信息。然而,对于MMU来说,它只是将虚拟内存映射到物理内存。如果上下文切换使其失效,这是否意味着MMU在不同进程中使用不同的映射机制?
这是否意味着MMU在不同的进程中使用不同的映射机制?
你的结论基本上是正确的。
每个进程都有其从虚拟地址到物理地址的映射(称为上下文)。
例如,地址 0x401000 对于进程 A 可以转换为 0x01234567,对于进程 B 可以转换为 0x89abcdef。
拥有不同的上下文可以轻松隔离进程、轻松按需分页并简化重定位。
因此,每次上下文切换都必须使 TLB 无效,否则 CPU 将继续使用旧的转换。
然而,有些页面是全局的,这意味着它们具有独立于当前进程地址空间的相同转换。
例如,每个进程的内核代码都以相同的方式映射,因此不需要重新映射。
所以最终只是TLB的一部分失效了。
您可以阅读Linux 如何处理进程地址空间的应用理论的真实示例。