目录
一、引起创建进程的事件
二、进程的创建
三、进制的终止
1.引起进程终止的事件
2.进程的终止过程
四、进程的阻塞和唤醒
1.引起进程阻塞和唤醒的事件
2.进程阻塞过程
3.进程唤醒过程
五、进程的挂起和激活
1.进程的挂起
2.进程的激活
◆ 创建进程 ◆ 终止进程 ◆ 进程状态转换
进程控制是由OS的内核完成的。
一、引起创建进程的事件
用户登录
作业调度
提供服务
当用户进程提出某种请求后,系统将专门创建一个进程来提供用户所需的服务。如,文件打印。
应用请求
是基于应用进程的需求,由应用进程自己创建一个新进程,以便新进程以并发运行方式完成特定任务。
二、进程的创建
调用进程创建原语Create(),按下述步骤创建一个进程:
(1)申请空白PCB;
(2)为新进程分配资源。主要是内存空间。
(3)初始化PCB。包括:
初始化标识信息
初始化处理机状态信息:程序计数器,堆栈指针等
初始化处理机控制信息:进程状态——就绪或静止就绪、优先级等。
(4)将新进程插入就绪队列。
Win32中创建进程的API函数是CreateProcess( );
创建线程的API是CreateThread( )函数;
三、进制的终止
1.引起进程终止的事件
正常结束
异常结束
常见的异常——结束事件
越界错误保护错 —— 试图访问不允许访问的资源或文件,或者以不适当方式访问非法指令特权指令错 —— 用户程序试图执行只允许 OS 执行的指令运行超时等待超时算术运算错 —— 被 0 除I/O 故障
外界干预
操作员或操作系统干预(如发生死锁)
父进程请求
父进程终止
2.进程的终止过程
OS调用终止原语,按下述过程终止进程
Win32中终止进程的API函数是TerminateProcess( );
终止线程的API函数是TerminateThread( )。
四、进程的阻塞和唤醒
1.引起进程阻塞和唤醒的事件
请求系统服务
当执行进程请求OS服务时,由于某种原因,OS并不立即满足该进程的请求时,该进程只能转变为阻塞状态来等待。
如,进程请求打印机
启动某种操作
当进程启动某种操作后,如果该进程必须在该操作完成后才能继续执行,则必须先使该进程阻塞,以等待操作完成。
如,启动了某I/O设备
新数据尚未到达
对于相互合作的进程,如果其中一个进程需要获得另一个(合作)进程提供的数据才能运行以对数据进行处理,则只要其所需数据尚未到达,该进程只有阻塞(等待)
无新工作可做
系统往往设置一些具有特定功能的系统进程,每当这种进程完成任务后,便把自己阻塞起来以等待新任务到来。
如,系统中发送数据的进程
2.进程阻塞过程
调用阻塞原语block把自己阻塞。(主动行为)
阻塞(block)过程:
立即停止执行;把PCB中进程状态 由 “ 执行 ” 改为 “ 阻塞 ” ;将 PCB 插入具有相同事件的 阻塞队列;转进程调度程序,将处理机分配给某个就绪进程,并进行进程切换 —— 保留被阻塞进程的处理机状态(在PCB中) ,再按新进程的 PCB 中处理机状态设置 CPU 的环境。
3.进程唤醒过程
调用唤醒原语wakeup( ),将等待事件的进程唤醒。
唤醒原语执行过程:
将被唤醒进程的PCB从阻塞队列移出;
将其PCB中进程状态由“阻塞”改为“就绪”;
将改PCB插入到就绪队列中。
block()和wakeup()是成对的。
Win32中线程阻塞的API函数是SuspendThread( );唤醒线程的API函数是ResumeThread ( )。
Windows中一般没有挂起状态,即线程“挂起”后并不调到外存,而只是阻塞。唤醒也称为释放。
五、进程的挂起和激活
1.进程的挂起
当出现了引起进程挂起的事件时(用户进程请求将自己挂起,或父进程请求将子进程挂起),系统将用挂起原语suspend( )将指定进程或处于阻塞状态的进程挂起。
挂起原语的执行过程:
1、检查被挂起进程的状态:
若处于活动就绪或执行状态,则将其转为静止就绪;
若处于活动阻塞,则将其转为静止阻塞
2、把该进程的PCB复制到某指定内存区域 -----为方便用户或父进程考查该进程的运行状态。
3、若该进程正在执行,则转进程调度程序重新调度。
2.进程的激活
当发生激活进程的事件时(如父进程或用户请求激活指定进程,而内存中已有足够空间时),系统利用激活原语active( )将指定进程激活。
激活过程是:
1、将进程从外存调入内存;
2、检查该进程现行状态:
若是静止就绪,则改为活动就绪;
若是静止阻塞,则改为活动阻塞。
3、若采用的是抢占式调度策略,则应检查被激活就绪进程的优先级,若其优先级比先行执行进程高,则应将处理机分配给被激活进程。