首先,我们要了解,进程切换是个什么过程?
进程切换概念
其实很简单,进程切换就是从正在运行的进程中,收回CPU的使用权利,交给下一个要运行的进程。
实际上,因为被切换的进程下一次可能还要继续运行,所以这个过程又是被切换进程和将要运行进程的上下文切换,这个上下文就包括进程正在运行时的一些信息。
进程切换引起的方法
知道进程切换是个什么概念后,我们需要知道,什么情况下回引起进程间的切换呢?
一般来说,进程切换发生在中断/异常/系统调用处理过程中,一般有以下几种情况:
1、阻塞式系统调用、虚拟地址异常。
导致被中断进程进入等待态。
2、时间片中断、I/O中断后发现更改优先级进程。
导致被中断进程进入就绪态。
3、终止用系统调用、不能继续执行的异常。
导致被中断进程进入终止态。
最常见的可能还是时间片中断,因为进程之间是并发执行的,在时间片使用完之后,进行进程间的切换还是比较常见的。
进程切换步骤
知道大概的概念后,其实进程切换就简单的几步:
- 保存之前运行的进程上下文
- 调用准备运行的进程的上下文
- CPU使用权交接
首先,是保存之前运行进程的上下文,这里有几个关键的处理器中的寄存器,一个是PC寄存器,指向当前运行时的进程,一个是PSW,程序状态寄存器,记录计算的记过以及一些控制信息,然后就是处理器的堆栈指针SP(Stack Point)用来记录当前运行进程的PCB控制信息。
在记录被切换的进程上下文时,要将PC寄存器,PSW以及其他相关寄存器的数据存入进程的私有堆栈中,以及SP存入PCB中。
然后调用准备运行的进程上下文也是类似的过程,将PCB信息存入SP中,从即将运行的进程的私有堆栈中恢复各个处理器寄存器的数据。
具体的一些过程还是能查阅一些资源或者书籍,能有更详细更底层的说明,会涉及到更多中断的知识。