各个进程之间是共享CPU资源的,在不同的时候进程之间需要切换,让不同的进程可以在CPU执行,那么这个一个进程切换到另一个进程运行,称为进程的上下文切换

CPU上下文切换就是先把前⼀个任务的 CPU 上下⽂(CPU 寄存器和程序计数器)保存起来,然后加载新 任务的上下⽂到这些寄存器和程序计数器,最后再跳转到程序计数器所指的新位置,运⾏新任务。

进程是由内核管理和调度的,所以进程的切换只能发⽣在内核态。 所以,进程的上下⽂切换不仅包含了虚拟内存、栈、全局变量等⽤户空间的资源,还包括了内核堆栈、寄存器等内核空间的资源。

进程的上下文切换_程序计数器

进程上下文切换的场景:

1.为了保证所有进程可以得到公平调度,CPU 时间被划分为⼀段段的时间片,这些时间片再被轮流分配 给各个进程。这样,当某个进程的时间⽚耗尽了,进程就从运⾏状态变为就绪状态,系统从就绪队列 选择另外⼀个进程运行;

2.进程在系统资源不足(比如内存不足)时,要等到资源满足后才可以运行,这个时候进程也会被挂起,并由系统调度其他进程运⾏;

3.当进程通过睡眠函数 sleep 这样的⽅法将⾃⼰主动挂起时,⾃然也会重新调度;

4.当有优先级更高的进程运行时,为了保证高优先级进程的运行,当前进程会被挂起,由高优先级进程来运行;

5.发生硬件中断时,CPU 上的进程会被中断挂起,转而执行内核中的中断服务程序;