聊聊Linux中CPU上下文切换

💡 原文中文,约5900字,阅读约需15分钟。
📝

内容提要

在多任务操作系统中,CPU上下文是一个重要的概念。操作系统通过CPU寄存器和程序计数器保存和恢复任务的执行进度信息。上下文切换分为进程、线程和中断上下文切换。进程的上下文保存在内核空间,而线程的上下文切换只需要保存私有数据。中断上下文切换不涉及进程的用户态资源。上下文切换消耗大量CPU时间,但Linux的上下文切换时间消耗较少。可以使用vmstat和pidstat命令查看系统和进程的上下文切换情况。

🎯

关键要点

  • 在多任务操作系统中,CPU上下文是一个重要概念,允许多个进程在一个CPU上运行。
  • 操作系统通过CPU寄存器和程序计数器保存和恢复任务的执行进度信息。
  • CPU上下文切换分为进程上下文切换、线程上下文切换和中断上下文切换。
  • 进程的上下文保存在内核空间,而线程的上下文切换只需保存私有数据。
  • 中断上下文切换不涉及进程的用户态资源。
  • 上下文切换消耗大量CPU时间,但Linux的上下文切换时间消耗较少。
  • 可以使用vmstat和pidstat命令查看系统和进程的上下文切换情况。
  • 进程上下文切换涉及保存和恢复进程的虚拟内存、栈和全局变量等资源。
  • 系统调用是进程从用户态切换到内核态的过程,涉及两次CPU上下文切换。
  • 线程上下文切换时共享虚拟内存和全局变量,只需保存线程的私有数据。
  • 中断上下文切换是由硬件中断触发,不涉及用户态资源。
  • 上下文切换是计算密集型操作,可能是操作系统中时间消耗最大的操作。
  • 使用vmstat命令可以查询系统的上下文切换情况,pidstat命令可以查看进程的上下文切换情况。

延伸问答

什么是CPU上下文切换?

CPU上下文切换是操作系统在切换运行任务时,将当前任务的上下文保存并加载新任务的上下文的过程。

CPU上下文切换分为哪几种类型?

CPU上下文切换分为进程上下文切换、线程上下文切换和中断上下文切换。

进程上下文切换和系统调用有什么区别?

进程上下文切换是从一个进程切换到另一个进程,而系统调用是在同一个进程内进行的上下文切换。

如何查看Linux系统的上下文切换情况?

可以使用vmstat和pidstat命令来查看系统和进程的上下文切换情况。

上下文切换对CPU性能有什么影响?

上下文切换是计算密集型操作,消耗大量CPU时间,可能是操作系统中时间消耗最大的操作。

中断上下文切换是如何触发的?

中断上下文切换是由硬件中断触发的,表示硬件设备发生了事件,需要内核响应。

➡️

继续阅读