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

时间:2017-01-03 08:37:12

标签: process operating-system cpu mmu

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

2 个答案:

答案 0 :(得分:2)

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

首先,他们可能指的是无效MMU缓存。假设MMU有一个缓存(可能这些天但不保证)。

当发生上下文切换时,处理器已设置将MMU置于上一个进程的剩余会使新进程搞砸的状态。如果没有,缓存会将新进程的逻辑页面映射到旧进程的物理页面框架。

例如,某些处理器对系统空间使用一个页表,为用户空间使用一个或多个其他页表。在上下文切换之后,处理器理想的是使用户空间页表的任何缓存无效,但只保留系统表表的任何缓存。

请注意,在大多数处理器中,所有这些都完全在幕后完成。甚至OS程序员也不需要处理(甚至不知道)MMU的任何刷新或失效。有一个处理所有内容的开关进程上下文指令。其他处理器要求OS程序员处理其他任务,作为上下文切换的一部分,在某些奇怪的处理器中,它包括显式刷新MMU缓存。

答案 1 :(得分:1)

  

这是否意味着MMU在不同的进程中使用不同的映射机制?

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

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

但有些页面是全局,这意味着它们具有与当前进程地址空间无关的相同转换。
例如,对于每个进程adn,内核代码以相同的方式映射,因此不需要重新映射。

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