什么是进程控制
进程控制的主要功能是对系统中的所有进程实施有效的管理,它具有创新进程、撤销已有进程、实现进程转换等功能。
简化理解:反正进程控制就是要实现进程状态转换。
如何实现进程控制
用原语实现进程控制。原语的特点是执行期间不允许中断,只能一气呵成。
这种不可能被中断的操作即原子操作。
原语采用“关中断指令”和“开中断指令”实现
显然,关/开中断指令的权限非常大,必然是只允许在核心态下执行的特权指令。
进程控制相关的原语
原语:进程控制用的程序段。
原语的特点:执行期间不允许中断,是一个不可分割的基本单位。
学习技巧:进程控制会导致进程状态的转换。无论哪个原语,要做的无非三类事情:
- 更新PCB中的信息(如修改进程状态标志、将运行环境保存到PCB、从PCB恢复运行环境)
a.所有的进程控制原语一定都会修改进程状态标志
b.剥夺当前运行进程的CPU使用权必然需要保存其运行环境
c.某进程开始运行前必然要恢复期运行环境 - 将PCB插入合适的队列
- 分配/回收资源
进程的创建
允许一个进程创建另一个进程。
父进程:此时创建者。
子进程:被创建的进程。
子进程可以继承父进程所拥有的资源。
当子进程被撤销时,应将其从父进程那里获得的资源归还给父进程。
在撤销父进程时,必须同时撤销其所有的子进程。
操作系统创建一个新进程的过程:
1)为新进程分配一个唯一的进程标识号,并申请一个空白的PCB。若PCB申请失败,则创建失败。
2)为进程分配资源:为新进程的程序和数据及用户栈分配必要的内存空间。若资源不足,则并不是创建失败,而是处于“等待态”或称“阻塞态”,等待的是内存这个资源。
3)初始化PCB:主要包括初始化标志信息、初始化处理机状态信息、初始化处理机控制信息、设置进程的优先级等。
4)若进程就绪队列能够接纳新进程,则将新进程插入就绪队列,等待被调度运行。
进程的终止
引起进程终止的事件主要:
正常结束:表示进程的任务已经完成并准备退出运行。
异常结束:表示进程在运行时,发生了某种异常事件,使程序无法继续运行,如存储区越界、保护错、非法指令、特权指令错、I/O故障等。
外界干预:进程应外界的请求而终止运行,如操作员或操作系统干预、父进程请求和父进程终止。
操作系统终止进程的过程如下(撤销原语):
1)根据被终止进程的标识符,检索PCB,从中读出该进程的状态。
2)若被终止进程处于执行状态,立即终止该进程的执行,将处理机资源分配给其他进程。
3)若该进程还有子进程,则应将其所有子进程终止。
4)将该进程所拥有的全部资源归还给其父进程,或归还给操作系统。
5)将该PCB从所在队列(链表)中删除。
进程的阻塞和唤醒
阻塞(Block):正在执行的进程,由于期待的某些事件未发生,如请求系统资源失败、等待某种操作的完成、新数据尚未到达或无新工作可做等,由系统自动执行阻塞原语,使自己由运行态变为阻塞态。
唤醒(Wakeup):当被阻塞进程所期待的事件出现时,如它启动的I/O操作已完成或其所期待的数据已到达,由有关进程调用唤醒原语,将等待该事件的进程唤醒。
Block原语和Wakeup原因是一对作用相反的原语,必须成对使用。
Block原语:是由被阻塞进程自我调用实现的。
Wakeup原语:是由一个与被唤醒进程合作或被其他相关的进程调用实现的。
进程切换
进程切换:处理机从一个进程的运行转到另一个进程上运行,在这个过程中,进程的运行环境产生了实质性的变化
进程切换的过程
1)保存处理机上下文,包括程序计数器和其他寄存器
2)更新PCB信息
3)把进程的PCB移入相应的队列,如就绪、在某事件阻塞等队列
4)选择另一个进程执行,并更新其PCB
5)更新内存管理的数据结构
6)恢复处理机上下文