----------文章参考自王道论坛视频
进程控制主要功能是对系统中的所有进程实施有效的管理,它具有创建新进程、撤销已有进程、实现进程状态转换等功能;
创建进程: 需要初始化 PCB 、分配系统资源;
创建态转换为就绪态需要修改 PCB 内容和相应队列;
就绪态转换为运行态需要恢复进程运行环境、修改 PCB 内容和相应对列;
运行态转换成就绪态需要保存进程运行环境、修改 PCB 内容和相应队列;
运行态转换阻塞态需要保存进程运行环境、修改 PCB 内容和相应对类;
运行态转换成终止态需要收回进程拥有的资源,撤销 PCB ;
堵塞态转换成就绪态需要修改 PCB 内容和相应对类,如果等待的是资源,则还需要为进程分配系统资源;
用原语实现进程控制,原语的特点是执行期间不允许中断,只能一气呵成,这种操作叫原语操作;
原语采用 " 关中断指令 " 和 " 开中断指令 " 实现;
原语做的三类事情:
1. 更新 PCB 中的信息(如修改进程状态标志、将运行环境保存到 PCB 、从 PCB 恢复运行环境)
a. 所有的进程控制原语一定都会修改进程的状态标志;
b. 剥夺当前执行进程的 CPU 使用权必然需要保存其运行环境;
c. 某进程开始运行前必然要恢复其运行环境;
2. 将 PCB 插入合适的队列;
3. 分配 / 回收资源;
创建原语:
申请空白 PCB;
为新进程分配所需资源;
初始化 PCB ;
将 PCB 插入就绪队列;
撤销原语:
从 PCB 集合中找到终止进程的 PCB ;
若进程正在运行,立即剥夺 CPU ,将 CPU 分配给其他进程
终止其所有子进程;
将该进程拥有的所有资源归还给父进程或操作系统
删除 PCB ;
阻塞原语:
找到要阻塞的进程对应的 PCB ;
保护进程运行现场,将 PCB 状态信息设置为 " 阻塞态 " ,暂时停止进程运行;
将 PCB 插入相应事件的等待队列;
唤醒原语 :
在事件等待队列中找到 PCB ;
将 PCB 从等待队列移除,设置进程为就绪态;
将 PCB 插入就绪队列,等待被调度;
切换原语:
将运行环境信息存入 PCB ;
PCB 移入相应队列;
选择另一个进程执行,并更新其 PCB ;
根据 PCB 恢复新进程所需的运行环境;