进程控制
进程控制
概述
进程控制的主要功能是对系统中的所有进程实施有效的管理,它具有创建新进程、撤销已有进程、实现进程状态转换等功能。
如何实现进程控制
用原语实现:原语是一种特殊的程序,它的执行具有原子性。也就是说,这段程序的运行必须一气呵成,不可被中断。
假设PCB中的变量stste表示进程当前所属的状态。1表示就绪态,2表示阻塞态。
假设此时进程2等待的时间发送,则操作系统中,负责进程控制的内核程序至少需要做这两件事:
- 将PCB2的state设为1。
- 如果收到了中断信号,那么PCB2力的state=1,但是它会被放到阻塞队列里面。
- 将PCB2从阻塞队列放到就绪队列。
如何实现原语的原子性
原语的执行具有原子性,即执行过程只能一气呵成,期间不允许被中断。可以用关中断指令和开中断指令这两个特权指令实现原子性。
在正常情况下:CPU每执行完一条指令都会例行检查是否有中断信号需要处理,如果有,则暂停运行当前这段陈程序,转而执行相应的中断处理程序。
在CPU执行关中断指令后就不在例行检查中断信号,知道执行打开中断指令之后才会恢复检查。
进程控制相关的原语
无论哪个进程控制的原语,无非要做3件事情:
- 更新PCB中的信息
- 所有进程控制原语一定会修改进程状态标志。
- 剥夺当前运行进程的CPU使用权必然要保存其运行环境
- 某进程开始运行之前必然要恢复其运行环境。
- 将PCB插入合适的队列。
- 分配/回收资源。
进程创建
- 创建原语:
- 申请空白PCB
- 为进程分配所需资源
- 初始化PCB
- 将PCB插入就绪队列
- 引起进程创建的事件
- 用户登录:分时系统中,用户登陆成功,系统会为其建立一个新的进程
- 作业调度:多道批处理系统,有新的作业放入内存是,会为其建立和新的进程
- 提供服务:用户向操作系统提出某些请求时,会新建一个进程处理该请求。
- 应用请求:有由用户进程主动请求创建一个子进程。
进程的阻塞和等待
- 进程的阻塞
- 阻塞原语:
- 找到要阻塞的进程对应的PCB。
- 保护进程运行现场,将PCB状态信息设置为阻塞态,暂时停止进程运行。
- 将PCB插入相应事件的等待队列。
- 引起进程阻塞的事件:
- 需要等待系统分配某种资源。
- 需要等待相互合作的其他进程完成工作。
- 阻塞原语:
- 进程的唤醒:
- 唤醒原语:
- 在事件等待队列中找到PCB
- 将PCB从等待队列移除,设置进程为就绪态。
- 将PCB插入就绪队列。
- 引起进程唤醒事件:
- 等待事件发生。
- 唤醒原语:
进程控制相关原语
- 切换原语:
- 将运行环境信息存入PCB。
- PCB移入相应队列。
- 选择另一个进程执行,并更新其PCB。
- 根据PCB恢复新进程所需的运行环境。
- 引起进程切换的事件:
- 当前进程时间片到。
- 有更高优先级的进程到达。
- 当前进程主动阻塞。
- 当前进程终止。
如何实现进程控制
- 操作系统创建一个进程:先初始化PCB,分配系统资源。
- 此时进程由创建态变为就绪态,插入到就绪队列中,等待CPU处理。
- 这个进程上CPU运行时,进程的状态由就绪态变为运行态。
- 如果这个进程直接运行完毕,那么会由运行态变为终止态。
- 如果这个进程运行过程中需要等待IO输入,那么会由运行态变为阻塞态,挂到阻塞队列中去,就绪队列中的另一个进程上CPU运行。
- 如果这个进程运行过程中被其他进程抢占,那么会由运行态变为就绪态,挂到就绪队列中去。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 MyAKDreamのBlog!