名词解释:因为不同进程之间共享CPU的资源,所以在不同进程切换到CPU里面被执行时,我们称一个进切换到另一个进程运行为:进程的上下文切换
这里涉及到CPU寄存器和程序计数器:CPU寄存器是容量很小的速度非常快的内存,类比:寄存器是口袋,内存是书包,硬盘是图书馆书柜,把东西放在口袋速度最快
程序计数器是用来存储CPU正在执行的指令位置,或者即将执行下一条指令位置
由CPU寄存器和程序计数器所一起提供的环境叫做:CPU上下文
CUP上下文切换:先把前一个任务的CPU上下文(CPU寄存器和程序计数器)保存起来,然后加载新任务的上下文到这些寄存器和程序计数器,最后再跳转到程序计数器所指的新位置运行新任务。
上面的任务主要包括:进程,线程,中断。根据任务的不同可以,把CPU上下文切换分成:进程上下文切换,线程上下文切换,中断上下文切换。
进程的上下文切换不仅包含了虚拟内存、栈、全局变量等用户空间的资源2,还包括了内核堆栈、寄存器等内核空间的资源。通常会把交换的信息保存在进程的PCB,当要运行另一个 进程的时候,需要从这个进程的PCB中取出上下文,然后加载到CPU中,这样子能恢复继续这个进程执行
注意:需要尽可能的减少进程上下文的开销,把事件用在执行程序上,而不耗费在上下文切换上。
上下文切换发生在哪些场景:1
1 为了保证所有进程可以得到公平调度,CPU时间被划分为一段段的时间片,这些时间片再被轮流分配给各个进程,这样当某个进程的时间片耗尽,进程就从运行状态变为就绪状态,系统从就绪队列选择另外一个进程运行。
2进程在系统资源不足(如内存不足)时,要等待资源满足后才能运行,这个时候进程也会被挂起,并且由系统调度其他进程运行。
3当进程通过睡眠函数sleep方法将自己主动挂起时,自然会重新调度
4当有优先级更高的进程运行时,为了保证高优先级进程的运行,当前进程会被挂起,由高级优先级进程来运行
5发生硬件中断时,CPU上的进程会被中断挂起,转而执行内核中的中断服务程序。