上下文切换和模式切换哪一个发生得最多?
我自己有两个答案,但我不知道哪一个是正确的:
上下文切换发生在用户态,但这并不意味着需要系统调用;因此,当上下文切换发生时,模式不会发生变化。
上下文切换意味着需要调度。我认为这是特权,因此需要从用户模式更改为内核模式才能进行上下文切换。这意味着上下文切换伴随着模式切换。
有人对此有明确的答案吗?
答案1
进程之间的上下文切换始终涉及进入处理器级别的管理程序模式。调度程序需要访问进程表和下一个进程的内存映射,这两者对于旧进程来说是无法访问的,因此需要特权提升;然后调度程序需要将 MMU 指向新进程的内存映射,这仍然需要提升权限。
同一进程的线程之间的上下文切换根本不需要涉及内核。
因此哪一种最常发生取决于您的系统上是否有许多轻量级线程。
背景阅读:超越维基百科,本文(Linux 信息项目中的上下文切换)。而且当然了解 Linux 内核(第3章)。