上下文切换(Context Switch) 介绍

查看原文

上下文切换也叫进程切换,或者任务切换,指的是 CPU 从一个进程或线程切换去执行另外一个。上下文切换只会发生在内核态中。上下文(context) 指的是 CPU 寄存器数据和 Program Counter。我们知道寄存器是 CPU 内部的可以超级快速存取数据的一个硬件,不过能存储的数据量很小。PC 则是一个特殊的寄存器,存储的是当前 CPU 运行到的具体指令序列的地址。发生上下文切换的时候,具体的行为有:

  1. 进程执行 suspend, 上下文被暂时存在内存中
  2. 从内存中取出下一个执行的进程的上下文,恢复到 CPU 寄存器上
  3. 根据刚恢复的 PC 继续执行指令序列,即执行下一个进程。

上下文切换是操作系统实现多任务的基石。即使 CPU 只有单核,操作系统依然可以实现多任务,靠得就是切分 CPU 时间片,再加进程数据暂存和恢复。尽管有硬件级别的上下文切换,大多数现代操作系统提供的还是软件上下文切换,这样可以使操作系统运行在任何 CPU 上。

一般来说,上下文切换是计算密集操作,需要占用不少处理器时间,大约每秒可以进行几十到上百次上下文切换。事实上,上下文切换可以说是一个操作系统上最耗时的操作了。从实现上,操作系统一般会尽量避免不必要的上下文切换。Linux 相比别的 Unix-like 操作系统的一个大优势,是上下文切换的消耗要小的多。