进程控制
1、进程控制
1.1 进程的创建
进程控制是进程管理中最基本的功能,它用于创建和撤消进程,并对进程在整个生命周期中各种状态之间的转换进行有效控制。
进程控制是由操作系统的内核通过原语来实现的。
原语:系统状态下执行的某些具有特定功能的程序段称为原语。 (原语的执行具有原子性,执行时不可分割)。
进程的控制主要包括:
创建进程、阻塞进程、唤醒进程、挂起进程、激活进程、终止进程、撤销进程等
1.1.1进程图(Process Graph):
用于描述一个进程的家族关系的有向树。
- 子进程可以继承父进程的所有资源,当子进程被撤消时,应将从父进程那里获得的资源归还给父进程。
- 撤消父进程时也必须同时撤消其所有的子进程。
1.1.2 引起创建进程的原因
1) 用户登陆
2)作业调度
3)提供服务:由系统内核创建新进程
4)应用请求:由请求的应用程序自行创建新进程
1.1.3 进程创建的过程(Creation of Progress)
1)申请空白PCB
2)为新进程分配资源
3)初始化进程控制块
4)将新进程插入就绪队列
创建新进程通过进程创建原语creat()来完成。
进程创建原语的主要任务是进程创建控制块 PCB。
1.2 进程的终止
-
终止事由:
-
正常结束
-
异常结束
如Protect error、overtime等
-
外界的干预
- 系统员kill进程;
- 父进程终止
- 父进程请求
-
-
终止流程
OS通过调用进程终止原语完成进程的终止。
- 第一步:根据被终止进程的标识符,从PCB集合中查找对应进程控制块并读出该进程的状态;
- 第二步:若进程还有子孙进程,应将其所有子孙进程终止,以防它们成为不可控制的。
- 第三步:将进程所占有的全部资源释放(还给父进程或系统),释放进程控制块(若该进程为执行态,要进行进程调度)。
- 第四步:将被终止进程(它的PCB)从所在队列(或链表)中移出,等待其他程序来收集相关信息。
- 第五步:若被终止进程正处于执行状态,则终止该进程的执行,并设置调度标志为真,用于指示该进程被终止后应重新进行调度,选择一新进程,把处理机分配给它。
进程终止的具体原因
- 正常结束
- 超时终止,终止时间超过预计时间
- 内存不足,无法为进程分配所需的内存空间
- 越界访问
- 企图使用未允许使用的数据,或操作方式错
- 计算错,如除零,或企图存储硬件允许的最大数
- 超时等待某事件发生。
- I/O失败,如找不到文件或多次重试仍无法读写文件,或无效操作。
- 无效指令,企图执行不存在的指令。
- 特权指令,企图执行特权指令
- 数据类型不符,或未初始化。
- 操作员或OS干预,如发生死锁的时候
- 父进程终止
- 父进程请求
进程的终止过程:
- 查找对应的PCB
- 终止该进程及子孙进程
- 释放资源
- 释放PCB
终止原语流程图
通过进程终止原语来终止进程。
终止进程的实质是收回 PCB。
1.3 进程的阻塞与唤醒
1.3.1 进程的阻塞
当正在执行的进程需要等待某种事件的完成或本身无新工作可做时,应调用阻塞原语将自己从执行状态转换成阻塞状态。
进程阻塞是进程的一种主动行为。通过阻塞原语block()来完成。
引发的事件
- 请求系统服务得不到满足时:如问系统请求打印。
- 启动某种操作而需同步时:如该操作和请求该操作的进程需同步运行(即非异步操作)。
- 新数据尚未到达:如进程A写,进程B读,则A未写完,B不能读。
- 无新工作可做
阻塞具体的操作过程:
(1)停止进程的执行
(2)将其状态改为阻塞状态
(3)把它的 PCB 插入相应的阻塞(等待)队列
(4)转调度程序进行重新调度。
阻塞原语流程图
1.3.2 进程的唤醒
当阻塞进程所等待的事件完成时,应调用唤醒原语将该进程的状态从阻塞状态转换成就绪状态。通过唤醒原语wakeup()来完成。
处于阻塞状态的进程是绝不可能叫醒自己的,必须由它的合作进程用唤醒原语唤醒它。
唤醒具体的操作过程:
1)在等待队列中移出该进程的PCB
2)将其置成就绪状态
3)把它插入就绪队列
1.4 进程的挂起与激活
1.4.1 进程的挂起
当出现了引起进程挂起的事件时,用户请求将自己挂起,或者父进程请求挂起自己的子进程。
系统通过挂起原语suspend()将指定进程挂起。
挂起具体的执行过程:
(1)检查被挂起进程的状态,如果处于活动就绪状态,就将它改为静止就绪;如果处于活动阻塞,则改为静止阻塞。
(2)将 PCB 复制到指定的内存区域供用户或父进程考查。若挂起前进程正在执行,则转调度程序重新进行进程调度。
1.4.2 进程的激活
当发生激活事件后,系统利用激活原语Active( )将指定进程激活。
激活具体的操作过程是:
(1)若进程处于静止阻塞状态,则将它转换成活动阻塞状态,否则将它转换成活动就绪状态。
(2)若进程转换成活动就绪状态,而系统又采用抢占调度策略,则应检查该进程是否有权抢占 CPU,若有则应进行进程调度。
1.5 进程切换
- 时钟中断
- I/O中断
- 内存访问出错
- 陷阱
步骤:
- 保护进程A的现场
- 恢复进程B的现场
本文作者:codeFiler
本文链接:https://www.cnblogs.com/coderD/p/13735184.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步