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?
你的结论基本上是对的。
每个进程都有其从虚拟地址到物理地址的映射(称为上下文)。
例如,地址 0x401000 可以转换为进程 A 的 0x01234567 和进程 B 的 0x89abcdef。
拥有不同的上下文可以轻松隔离进程、轻松按需分页和简化重定位。
因此每次上下文切换都必须使 TLB 无效,否则 CPU 将继续使用旧的转换。
然而,有些页面是全局的,这意味着它们具有独立于当前进程地址空间的相同转换。
例如,内核代码以相同的方式映射到每个进程,因此不需要重新映射。
所以最终只有一部分 TLB 无效。
您可以阅读 Linux 如何处理进程地址空间以获得应用理论的真实示例。
您所描述的完全是系统特定的。
首先,他们可能指的是使 MMU 缓存无效。假设 MMU 有缓存(现在可能,但不能保证)。
当发生上下文切换时,处理器已将 MMU 设置为前一个进程的剩余部分会搞砸新进程的状态。如果没有,缓存会将新进程的逻辑页映射到旧进程的物理页框。
例如,某些处理器将一个页表用于系统空间,将一个或多个其他页表用于用户空间。在上下文切换之后,处理器最好使用户空间页表的任何缓存无效,但不理会系统表表的任何缓存。
请注意,在大多数处理器中,所有这些都是完全在幕后完成的。甚至 OS 程序员也不需要处理(甚至意识到)任何 MMU 的刷新或失效。有一个单一的切换进程上下文指令可以处理所有事情。其他处理器要求操作系统程序员处理附加任务作为上下文切换的一部分,在一些奇怪的处理器中,这包括显式刷新 MMU 缓存。