进程控制
什么是进程控制?
进程控制的主要功能是对系统中的所有进程实施有效的管理,它具有创建新进程,撤销已有进程,实现进程状态转换等功能
简化理解:进程控制就是要实现进程状态的转换。
怎么实现进程控制?
使用“原语”来实现进程控制。
原语是一种特殊的程序,它的执行具有原子性。也就是说,这段程序的运行必须是一气呵成的,不可中断。
可以使用开中断指令和关中断指令这两个特权指令实现原子性。
关中断指令和开中断指令之间的指令序列是不可被中断的。这就实现了“原子性”。
进程控制相关的原语
- 创建原语:
- 申请空白PCB
- 为新进程分配所需资源
- 初始化PCB
- 将PCB插入到就绪队列
- 撤销原语:
- 从PCB集合中找到终止进程的PCB
- 若进程正在运行,立即剥夺CPU,将CPU分配给其他进程
- 终止其所有子进程
- 将该进程拥有的所有资源归还给父进程或操作系统
- 删除PCB
- 阻塞原语:
- 找到要阻塞的进程的PCB
- 保护进程运行现场,将PCB状态信息设置为阻塞态,暂时停止进程运行
- 将PCB插入到相应事件的等待队列。
- 唤醒原语:
- 在事件等待队列中找到PCB
- 将PCB从等待队列中一处,设置进程为就绪态
- 将PCB插入就绪队列,等待被调度
- 一个进程被什么事件阻塞就应该被什么事件唤醒,阻塞与唤醒原语是成对使用的
- 切换原语:
- 将运行环境信息存入PCB
- PCB移入相应队列
- 选择另一个进程执行,并更新其PCB
- 根据PCB恢复新进程所需的运行环境
- 在进程切换时先在PCB中保存这个进程的运行环境(保存一些必要的寄存器信息)
总结
无论是哪个进程控制原语,要做的无非是三件事情:
- 更新 PCB中的信息(修改进程状态,保存/回复运行环境)
- 将PCB插入到合适的队列
- 分配/回收资源