进程运行总伴随着模式切换,模式切换指的就是进程从用户态切换到内核态,而进程切换则指的是从进程A切换到进程B,进程切换的过程当中一定会发生模式切换,因为进程切换是需要操作系统的调度处理的。
下面,我们具体分析一下模式切换和进程切换发生的时机以及其发生的整个过程。
模式切换和进程切换的时机
进程何时发生模式切换或者进程切换呢?
- 系统调用
- 中断(外设中断、时钟中断)
- 异常(内存访问出错、除法溢出)
是否发生进程切换取决于中断处理程序,如发生时钟中断时会使操作系统检测进程时间片是否用完,如果用完就会发生进程切换,以及内存访问出错可能会造成程序崩溃回收或者将虚拟内存对应的内容调入物理内存中,这时也可能发生进程切换。外设中断可能会引起准备数据就绪,使得挂起进程变成就绪,调度器再决定继续运行当前进程还是调度
模式切换的过程
- 栈指针的切换
- 保存CPU寄存器信息
- 切换程序计数器
进程切换的过程
- 保存处理器上下文信息
- 更新处于进程状态及其其他记账信息和离开原因
- 将当前进程移动到对应队列
- 调度另外一个进程执行
- 改变进程运行状态
- 更新内存管理的信息
- 恢复进程运行的寄存器上下文信息
进程的创建过程
- 为新进程分配唯一的进程描述符
- 为新进程分配内存空间
- 创建并初始化进程控制块
- 链接到合适的进程队列(就绪)
- 创建或扩充其他信息