OS-进程控制

674 阅读1分钟

如何实现进程控制

用原语实现进程控制。 原语代码在执行期间不会被中断,具有原子性。

原语是什么

原语由关中断指令开中断指令实现。


【关中断~~~开中断】之间的代码,在遇到外中断信号时,不会被打断。

进程控制的原语做三件事:

  • 更新PCB信息(修改状态、保存运行环境到PCB、从PCB恢复环境)
  • 将PCB放入相应队列
  • 分配/回收资源

创建进程
使用创建原语:

  • 申请空白PCB
  • 为新进程分配资源
  • 初始化PCB
  • 将PCB插入就绪队列

撤销进程
使用撤销原语

  • 找到PCB
  • 若正在运行,立即剥夺CPU,将CPU分配给其他进程
  • 终止所有子进程
  • 将进程拥有的资源,归还父进程或操作系统
  • 删除PCB

以下情况会引起进程终止:

  • 正常结束
  • 异常结束
  • 外界干预

阻塞/唤醒进程
使用阻塞原语/唤醒原语:
阻塞:

  • 找到PCB
  • 保护进程运行线程,设置PCB状态为阻塞态,停止运行
  • 将PCB插入相应事件的等待队列

唤醒:

  • 在事件等待队列中找到PCB
  • 将PCB从等待队列中移除,设置状态为就绪
  • 将PCB插入就绪队列,等待被调度

因何事阻塞,就应该因何事唤醒。

进程切换 使用切换原语:

  • 运行环境存入PCB
  • PCB进入相应队列
  • 选择另一个进程执行,更新其PCB
  • 根据PCB恢复进程所需运行环境

引起切换的事件

  • 当前进程时间片到
  • 有高优先级的进程
  • 当前进程主动阻塞
  • 当前进程终止