如何实现进程控制
用原语实现进程控制。 原语代码在执行期间不会被中断,具有原子性。
原语是什么
原语由关中断指令 、 开中断指令实现。

【关中断~~~开中断】之间的代码,在遇到外中断信号时,不会被打断。
进程控制的原语做三件事:
- 更新PCB信息(修改状态、保存运行环境到PCB、从PCB恢复环境)
- 将PCB放入相应队列
- 分配/回收资源
创建进程
使用创建原语:
- 申请空白PCB
- 为新进程分配资源
- 初始化PCB
- 将PCB插入就绪队列
撤销进程
使用撤销原语
- 找到PCB
- 若正在运行,立即剥夺CPU,将CPU分配给其他进程
- 终止所有子进程
- 将进程拥有的资源,归还父进程或操作系统
- 删除PCB
以下情况会引起进程终止:
- 正常结束
- 异常结束
- 外界干预
阻塞/唤醒进程
使用阻塞原语/唤醒原语:
阻塞:
- 找到PCB
- 保护进程运行线程,设置PCB状态为阻塞态,停止运行
- 将PCB插入相应事件的等待队列
唤醒:
- 在事件等待队列中找到PCB
- 将PCB从等待队列中移除,设置状态为就绪
- 将PCB插入就绪队列,等待被调度
因何事阻塞,就应该因何事唤醒。
进程切换 使用切换原语:
- 运行环境存入PCB
- PCB进入相应队列
- 选择另一个进程执行,更新其PCB
- 根据PCB恢复进程所需运行环境
引起切换的事件
- 当前进程时间片到
- 有高优先级的进程
- 当前进程主动阻塞
- 当前进程终止