您的位置:首页 > 其它

操作系统——进程控制(二)

2017-03-05 17:14 211 查看
进程控制一般是由原语来实现的,原语是由若干指令组成,原语是“原子操作”,原子操作在管态下执行,常驻内存。

管态就是特权态,CPU执行状态有管态和目态两种,当CPU处理系统程序的时候,CPU会转为管态,CPU在管态下可以执行指令系统的全集(包括特权指令与非特权指令)。可以这样理解:当一个用户进程在运行过程中,它一直是目态,当需要系统服务时,就必须从当前PC运行的用户地址空间转移到内核代码地址空间,这个转移可以通过exception来完成,这个过程是这样的syscall——> exception triggered —> exception handler –> kernel function最终的kernel function是处于管态的,具体细节如图:





系统调用是用户态到内核态唯一的入口。

进程的创建:

进程树:进程A创建进程B,A是B的父进程,B是A的子进程。子进程可以继承父进程所拥有的资源,例如,继承父进程打开的文件,继承父进程所分配到的缓冲区等。当子进程被撤消时,应将其从父进程那里获得的资源归还给父进程。此外,在撤消父进程时,也必须同时撤消其所有的子进程。 PCB 中都设置了家族关系表项,以标明自己的父进程及所有的子进程。

引起进程创建的事件:

(1) 用户登录。在分时系统中,用户在终端键入登录命令后,如果是合法用户,系统将为该终端建立一个进程,并把它插入就绪队列中。

(2) 作业调度。在批处理系统中,当作业调度程序按一定的算法调度到某作业时,便将该作业装入内存,为它分配必要的资源,并立即为它创建进程,再插入就绪队列中。

(3) 提供服务。当运行中的用户程序提出某种请求后,系统将专门创建一个进程来提供用户所需要的服务,例如,用户程序要求进行文件打印,操作系统将为它创建一个打印进程,这样,不仅可使打印进程与该用户进程并发执行,而且还便于计算出为完成打印任务所花费的时间。

(4) 应用请求。在上述三种情况下,都是由系统内核为它创建一个新进程;而第 4 类事件则是基于应用进程的需求,由它自己创建一个新进程,以便使新进程以并发运行方式完成特定任务。

进程的创建:一旦操作系统发现了要求创建新进程的事件后,便调用进程创建原语 Creat( )按下述步骤创建一个新进程。

(1) 申请空白 PCB。为新进程申请获得惟一的数字标识符,并从 PCB 集合中索取一个空白 PCB。

(2) 为新进程分配资源。为新进程的程序和数据以及用户栈分配必要的内存空间。显然,此时操作系统必须知道新进程所需内存的大小。对于批处理作业,其大小可在用户提出创建进程要求时提供。若是为应用进程创建子进程,也应是在该进程提出创建进程的请求中给出所需内存的大小。对于交互型作业,用户可以不给出内存要求而由系统分配一定的空间。如果新进程要共享某个已在内存的地址空间(即已装入内存的共享段),则必须建立相应的链接。

(3) 初始化进程控制块。PCB 的初始化包括:① 初始化标识信息,将系统分配的标识符和父进程标识符填入新 PCB 中;② 初始化处理机状态信息,使程序计数器指向程序的入口地址,使栈指针指向栈顶;③ 初始化处理机控制信息,将进程的状态设置为就绪状态或静止就绪状态,对于优先级,通常是将它设置为最低优先级,除非用户以显式方式提出高

优先级要求。

(4) 将新进程插入就绪队列,如果进程就绪队列能够接纳新进程,便将新进程插入就绪队列。

进程的终止:

引起进程终止的事件:

<1,正常结束:在任何计算机系统中,都应有一个用于表示进程已经运行完成的指示。

<2,异常结束:

(1) 越界错误。这是指程序所访问的存储区已越出该进程的区域。

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

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

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

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

(6) 等待超时。这是指进程等待某事件的时间超过了规定的最大值。

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

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

<3,外界干预

(1) 操作员或操作系统干预。由于某种原因,例如,发生了死锁,由操作员或操作系统终止该进程。

(2) 父进程请求。由于父进程具有终止自己的任何子孙进程的权力,因而当父进程提出请求时,系统将终止该进程。

(3) 父进程终止。当父进程终止时,OS 也将它的所有子孙进程终止。

进程终止过程:

(1) 根据被终止进程的标识符,从 PCB 集合中检索出该进程的 PCB,从中读出该进程的状态。

(2) 若被终止进程正处于执行状态,应立即终止该进程的执行,并置调度标志为真,用于指示该进程被终止后应重新进行调度。

(3) 若该进程还有子孙进程,还应将其所有子孙进程予以终止,以防它们成为不可控的进程。

(4) 将被终止进程所拥有的全部资源,或者归还给其父进程,或者归还给系统。

(5) 将被终止进程(PCB)从所在队列(或链表)中移出,等待其他程序来搜集信息。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: