进程之间的上下文切换是否会使 MMU(内存控制单元)失效?

Does context switch between processes invalidate the MMU(memory control unit)?

这是我系统讲座的PowerPoint中的一句话,但我不明白为什么上下文切换会使MMU失效。我知道它会使缓存无效,因为缓存包含另一个进程的信息。然而,对于MMU,它只是将虚拟内存映射到物理内存。如果上下文切换使它无效,这是否意味着 MMU 在不同进程中使用不同的映射机制?

Does this mean the MMU use different mechanism of mapping in different processes?

你的结论基本上是正确的。
每个进程都有其从虚拟地址到物理地址的映射(称为 context)。
例如,地址 0x401000 可以转换为进程 A 的 0x01234567 和进程 B 的 0x89abcdef。
拥有不同的上下文可以简化 isolation 流程、轻松按需分页和简化重定位。

因此每个上下文切换都必须使 TLB 无效,否则 CPU 将继续使用旧的翻译。

然而有些页面是 全局的,这意味着它们具有相同的翻译,独立于当前进程地址 space。
例如,内核代码以相同的方式映射到每个进程,因此不需要重新映射。

所以最后只有一部分TLB失效了
您可以阅读 Linux handles the process address space 如何获得应用理论的真实示例。

您所描述的完全是系统特定的。

首先,他们指的可能是使MMU缓存失效。假设 MMU 有一个缓存(最近可能但不能保证)。

当发生上下文切换时,处理器已将 MMU 置于一种状态,在这种状态下,前一个进程的遗留物会搞砸新进程。如果没有,缓存会将新进程的逻辑页映射到旧进程的物理页框。

例如,一些处理器为系统 space 使用一个页面 table,为用户 space 使用一个或多个其他页面 table。在上下文切换之后,处理器最好使用户 space 页面 table 的任何缓存无效,但保留系统 table table 的任何缓存。

请注意,在大多数处理器中,所有这些都是完全在幕后完成的。甚至 OS 程序员也不需要处理(甚至不需要注意)MMU 的任何刷新或失效。有一个单一的 switch process context 指令可以处理所有事情。其他处理器需要 OS 程序员处理额外的任务作为上下文切换的一部分,在一些古怪的处理器中,包括显式刷新 MMU 缓存。