操作系统之进程管理3

来源:互联网 发布:个体网络销售营业执照 编辑:程序博客网 时间:2024/05/21 09:20

进程控制

进程管理中最基本功能是进程控制

进程控制任务:进程的创建、终止、进程状态的转变等

进程控制一般由OS内核来实现

引起创建进程的事件

①用户登陆:在分时操作系统中,用户一旦登陆成功,系统就会为该用户创建一个进程。

②作业调度(作业调度的基本任务是从后备队列中按照一定的算法,选择出若干个作业,为它们分配运行所需的资源(首先是分配内存)。在将它们调入内存后,便分别为它们建立进程,使它们都成为可能获得处理机的就绪进程,并按照一定的算法将它们插入就绪队列。进程调度的任务是从进程的就绪队列中, 按照一定的算法选出一个进程,把处理机分配给它,并为它设置运行现场,使进程投入执行。值得提出的是,在多线程 OS中,通常是把线程作为独立运行和分配处理机的基本单位,为此,须把就绪线程排成一个队列,每次调度时,是从就绪线程队列中选出一个线程,把处理机分配给它。)

③提供服务:当运行中的用户程序提出某种请求后,系统将专门创建一个进程来提供用户所需要的服务。

④应用请求:用户进程自己创建新进程,以便使新进程以同创建者进程并发运行的方式完成特定任务。

前三种都是有系统内核创建,第四种是由应用程序自己创建。

进程的创建--由原语完成

原语按下属步骤创建一个新进程:

①申请空白PCB

②为新进程分配资源

③初始化进程控制块

1.初始化标识信息,将系统分配的标识符和父进程标识符填入新PCB中;

2.初始化处理机状态信息,是程序计数器指向程序的入口地址,使栈指针指向栈顶

3.初始化处理机控制信息,将进程的状态设置为就绪状态或静止就绪状态,对于优先级,通常是将它设置为最低优先级,除非用户以显式方式提出高优先级要求

④将新进程插入就绪队列

引起进程终止的事件

①正常结束:任务完成

②异常结束

1、越界错误(程序所访问的存储区,已跃出该进程的区域)

2、保护错(指进程试图去访问一个不允许访问的资源或文件,或者以不适当的方式进行访问)

3、非法指令(指程序试图去执行一条不存在的指令)

4、特权指令错(指用户进程试图去执行一条只允许OS执行的命令)

5、运行超时(指进程的执行时间超过了指定的最大值)

6、等待超时(指进程等待某事件的额时间查过了规定的最大值)

7、算术运算错(指进程试图去执行一个被禁止的运算,例如,除零)

8、I/O故障(这是指在I/O过程中发生了错误)

③外界干预

1、操作员或OS干预(例如,发生了死锁,有操作员或操作系统采取终止某些进程的方式使系统从死锁状态中解救出来)

2、被父进程终止(子进程完成父进程所要求的任务时,父进程可以提出请求结束该子进程)

3、父进程终止(因父进程终止,它的所有子进程也都应该结束)

进程的终止过程

①从PCB集合中检索出该进程的PCB,从中读出该进程的状态

②若处于执行状态,终止该进程的执行,并置调度标志为真,重新调度

③若有子孙进程,将所有子孙进程终止

④将进程全部资源归还其父进程或系统

⑤将其PCB从所在队列(或链表)中移出

引起阻塞和唤醒的事件

①向系统请求共享资源失败。(进程在向系统请求共享资源时,由于系统已无足够的资源分配给它,此时进程因不能继续运行而转变为阻塞状态)

②等待某操作的完成。(当进程启动某种操作后,如果该进程必须在该操作系统完成之后才能继续执行,则应先将该进程阻塞起来,以等待操作完成)

③新数据尚未到达。(对于相互合作的进程,如果一个进程需要先获得另一进程提供的数据后才能对该数据进行处理,之哟啊其所需数据尚未到达,进程便只有阻塞)

④等待新任务的到达(在某些系统中,特别是在网络环境下的OS,往往设置一些特定的系统进程,每当这种进程完成任务后便将自己阻塞起来,等待新任务的到来)

进程阻塞过程:正在执行的进程,如果发生了上某事件,进程便通过调用阻塞原语BLOCK将自己阻塞。可见,阻塞是进程自身的一种主动行为。进入BLOCK过程后,由于该进程还处于执行状态,所以应先立即停止执行,把进程控制块中的现行状态由“执行”改为阻塞,并将PCB插入阻塞队列。如果系统中设置了因不同时间而阻塞的多个阻塞队列,则应将本进程插入到具有相同事件的阻塞队列。最后转调度程序进行重新调度,将处理机分配给另一就绪进程,并进行切换,亦即,保留被阻塞进程的处理机状态,按新进程的PCB中的处理机状态设置CPU的环境。

进程唤醒过程:当被阻塞进程所期待的事件发生时,比如他所启动的I/O操作已完成,或其所期待的数据已经到达,则由有关进程(比如提供数据的进程)调用唤醒原语WAKEUP,将等待该事件的进程唤醒。WAKEUP执行的过程是:首先将被阻塞的进程从等待该事件的阻塞队列中移出,将其PCB中的现行状态由阻塞改为就绪,然后再将该PCB插入到就绪队列中。

注意

如果在某进程中调用了阻塞原语,则必须在与之想合作的另一进程中或其他相关的进程中,安排唤醒原语,以能唤醒阻塞进程;否则,被阻塞进程将会因不能被唤醒而长久的处于阻塞状态,从而再无机会继续运行。

进程的挂起

挂起原语:SUSPEND

检查被挂起进程的状态,若处于活动i就绪状态,改为静止就绪;若处于活动阻塞状态,则改为静止阻塞;若正在执行,则转向调度程序重新调度。

进程的激活

激活原语:ACTIVE

激活原语先将进程从外存调入内存,

检查该进程的现行状态,若是静止就绪,便将之改为活动就绪;若为静止阻塞,便将之改为活动阻塞。