进程控制是进程管理中最基本的功能,包括:
创建新进程
终止已完成的进程
将因发生异常情况而无法继续运行的进程置于阻塞状态
负责进程运行中的状态转换等功能
进程控制一般由OS的内核中的原语实现
1.操作系统内核
通常将与硬件密切相关的模块(如中断处理模块)、各种常用设备的驱动程序、运行频率较高的模块(如时钟管理、进程调度和许多模块所公用的一些基本操作),安排在紧靠硬件的软件层次,将他们常驻内存,即通常被称为的OS内核。
将处理机的执行状态分为系统态和用户态
(1)系统态:又称为管态、内核态。具有较高特权,能执行一切指令,访问所有寄存器和存储区,传统OS都在系统态运行。
(2)用户态:又称为目态,执行规定指令,访问指定寄存器和存储区。应用程序只能在用户态运行,防止对OS的破坏。
1.1OS内核功能:
(1)中断管理
(2)时钟管理
(3)原语操作。原语(primitive)就是由若干条指令组成的,用于完成一定功能的一个过程。它们是原子操作(Action Operation),即一个操作中的所有动作要么全做,要么不做。执行过程中不允许被打断。原子操作在系统态执行,常驻内存。
1.2资源管理功能:
(1)进程管理
(2)存储器管理
(3)设备管理
2.进程的创建
2.1进程的层次结构
OS中允许一个进程创建另一个进程
把创建进程的进程称为父进程,被创建的进程称为子进程,子进程可创建更多的孙进程。
子进程可继承父进程所拥有的资源,子进程撤销时,归还从父进程获得的资源,父进程撤销时,必须同时撤销子进程,PCB中设置了家族关系表项,以标明自己的父进程和所有的子进程。
进程不能拒绝其子进程的继承权。
但windows不存在任何进程层次结构,即所有进程地位相同。
一个进程创建另一个进程时获得一个句柄,其作用相当于令牌,用来控制创建的进程。
句柄可传递,有了句柄就能控制进程的权力。
进程之间不再是层次关系,而是获得句柄与否,控制与被控制的关系。
2.2进程图(Process Graph)
用于描述进程关系的一棵有向树
创建父进程的进程称为祖先进程,树的根节点作为进程家族的祖先(ancestor)
2.3引起进程创建的事件
(1)用户登录:分时系统中,用户登陆成功,为其建立进程,插入就绪队列
(2)作业调度:多道批处理系统中,作业调度程序调度到某些作业,将他们装入内存,为他们创建进程,插入就绪队列
(3)提供服务:运行中的用户程序提出请求,创建进程供用户服务,如打印。
(4)应用请求:上面三类都是系统创建进程,这类事件由用户进程自己创建新进程,以便新进程以同创建者进程并发运行的方式完成特定任务。
2.4进程的创建(Creation of Process)
在系统中出现了创建新进程的请求后,OS便调用进程创建原语Creat按下列步骤创建新进程
(1)申请空白PCB,为新进程申请获得唯一的数字标识符,并从PCB集合中索取一个空白PCB。
(2)为新进程分配其运行所需的资源,包括各种物理和逻辑资源,如内存、文件、I/O设备和CPU时间等。这些资源或从操作系统或仅从其父进程获得。
(3)初始化PCB
①初始化标识信息
②初始化处理机状态信息
③初始化处理机控制信息
(4)如果进程就绪队列能接纳新进程,便将新进程插入就绪队列。
3.进程的终止
3.1引起进程终止(Termination of Process)的事件
(1)正常结束
(2)异常结束
①越界错
②保护错
③非法指令
④特权指令错
⑤运行超时
⑥等待超时
⑦算术运算错
⑧I/O故障
(3)外界干预
①操作员或操作系统干预
②父进程请求
③因父进程终止
3.2进程的终止过程
调用终止原语,按下列过程终止
(1)根据被终止进程的标识符,从PCB集合中检索出该进程的PCB,从中读出该进程的状态
(2)若被终止进程处于执行状态,立即终止执行,并置调度标志为真,指示该进程被终止后应重新进行调度
(3)若该进程还有子孙进程,将所有子孙进程终止,防止他们成为不可控的进程
(4)将被终止进程所拥有的全部资源或者归还给其父进程,或系统
(5)将被终止进程PCB从所在队列(或链表)中移出,等待其他程序来搜集信息
4.进程的阻塞与唤醒
4.1引起进程阻塞和唤醒的事件
(1)请求共享资源失败/共享资源得到释放
(2)等待某种操作的完成/操作完成
(3)新数据尚未到达/新数据到达
(4)等待新任务到达/新任务到达
4.2进程阻塞过程(Block原语)
立即停止执行,把PCB中的现行状态由执行改为阻塞,并将PCB插入阻塞队列
转调度程序重新调度
4.3进程唤醒过程
从阻塞队列移出,将PCB先行状态改为就绪
插入就绪队列
5.进程的挂起和激活
5.1进程的挂起(Suspend原语)
检查状态
活动就绪->静止就绪
活动阻塞->静止阻塞
执行态->静止就绪
为方便用户或父进程考察该进程的运行情况,复制PCB到指定区域
若被挂起的进程正在执行,重新调度
5.2进程的激活过程(Activate原语)
将进程从外存调入内存
检查状态
静止就绪->活动就绪
静止阻塞->活动阻塞
若采用抢占调度策略,则比较被激活进程与当前进程优先级
被激活进程优先级低,不调度,否则,剥夺当前进程的运行并切换