最常发生什么,上下文切换还是模式切换?

最常发生什么,上下文切换还是模式切换?

上下文切换和模式切换哪一个发生得最多?

我自己有两个答案,但我不知道哪一个是正确的:

  1. 上下文切换发生在用户态,但这并不意味着需要系统调用;因此,当上下文切换发生时,模式不会发生变化。

  2. 上下文切换意味着需要调度。我认为这是特权,因此需要从用户模式更改为内核模式才能进行上下文切换。这意味着上下文切换伴随着模式切换。

有人对此有明确的答案吗?

答案1

进程之间的上下文切换始终涉及进入处理器级别的管理程序模式。调度程序需要访问进程表和下一个进程的内存映射,这两者对于旧进程来说是无法访问的,因此需要特权提升;然后调度程序需要将 MMU 指向新进程的内存映射,这仍然需要提升权限。

同一进程的线程之间的上下文切换根本不需要涉及内核。

因此哪一种最常发生取决于您的系统上是否有许多轻量级线程。

背景阅读:超越维基百科,本文(Linux 信息项目中的上下文切换)。而且当然了解 Linux 内核(第3章)。

相关内容