操作系统(九)进程控制

☆樱花仙子☆ 提交于 2020-03-03 06:31:36

2.1.3 进程控制

目录

2.1.3 进程控制

2.1.3.1 基本概念

2.1.3.2 进程创建原语

2.1.3.3 进程终止原语

2.1.3.4 进程的阻塞与唤醒

2.1.3.5 进程的切换

2.1.3.6 小结

 

2.1.3.1 基本概念

  在书中,进程控制的定义是这样的:进程控制是进程管理中最基本的功能。它用于创建一个新进程,终止一个已完成的进程,或终止一个因出现某事件而使其无法运行下去的进程,还可负责进程运行中的状态转换。其实简单来说,进程控制就是为了实现进程状态之间的转换。

  那么进程控制是怎么实现的呢?进程控制一般来说是通过OS内核中的原语来实现的。原语(Primitive)是由若干条指令组成的,用于完成一定功能的一个过程,它是一个不可分割的基本单位,因此,在执行过程中不允许被中断。原子操作在管态下执行,常驻内存。

  为什么要使用原子操作(一气呵成)呢?如果系统对进程的控制如不使用原语,就会造成其状态的不确定性,从而达不到进程控制的目的。比如说将执行态变为阻塞态需要两步,首先将state的值改变之后再将此PCB放在阻塞队列,如果非原子操作,在改变state值之后发生中断,那么在执行队列就出现了阻塞态的PCB,这是不正确的。

  如何保证操作的原子性呢?这里我们需要引出两个特权指令:开中断指令和关中断指令。顾名思义,开中断就是将中断打开,关中断就是将中断关闭。我们将要执行的操作放在开中断与关中断指令的中间,CPU执行了关中断指令之后,就不再例行检查中断信号,直到执行开中断指令之后才会恢复检查。这样,关中断、开中断 之间的这些指令序列就是不可被中断的,这就实现了“原子性”。

           

  2.1.3.2 进程创建原语

   引起进程创建的事件:(1) 用户登录。在分时系统中,用户在终端键入登录命令后,如果是合法用户,系统将为该终端建立一个进程,并把它插入就绪队列中。(2) 作业调度。在批处理系统中,当作业调度程序按一定的算法调度到某作业时,便将该作业装入内存,为它分配必要的资源,并立即为它创建进程,再插入就绪队列中。(3) 提供服务。当运行中的用户程序提出某种请求后,系统将专门创建一个进程来提供用户所需要的服务。(4) 应用请求。在上述三种情况下,都是由系统内核为它创建一个新进程;而第 4 类事件则是基于应用进程的需求,由它自己创建一个新进程,以便使新进程以并发运行方式完成特定任务。

  进程创建原语Create( )所执行的步骤: 申请空白 PCB-->为新进程分配资源-->初始化进程控制块-->将新进程插入就绪队列(创建态转变为就绪态)

2.1.3.3 进程终止原语

  引起进程终止的事件:1) 正常结束  2) 异常结束  3) 外界干预

  进程终止原语所执行的步骤:(1) 根据被终止进程的标识符,从 PCB 集合中检索出该进程的 PCB,从中读出该进程的状态。(2) 若被终止进程正处于执行状态,应立即终止该进程的执行,并置调度标志为真,用于指示该进程被终止后应重新进行调度。(3) 若该进程还有子孙进程,还应将其所有子孙进程予以终止,以防它们成为不可控的进程。(4) 将被终止进程所拥有的全部资源,或者归还给其父进程,或者归还给系统。(5) 将被终止进程(PCB)从所在队列(或链表)中移出,等待其他程序来搜集信息。(这样就由其他状态转为终止态

2.1.3.4 进程的阻塞与唤醒

  引起进程阻塞(block)的事件:需要等待系统分配资源、需要等待相互合作的进程完成工作

  进程阻塞原语所执行的步骤:找到相应的PCB-->保护现场并将PCB设置为阻塞态,暂停进程的运行-->将PCB插入到相应的队列中(运行态变为阻塞态)

  引起进程唤醒(wakeup)的事件:引起阻塞的事件已经解决(何事引起的阻塞就要由何事进行唤醒,所以阻塞原语与唤醒原语往往是成对出现的)。

  进程唤醒原语所执行的步骤:把被阻塞的进程从等待该事件的阻塞队列中移出-->将其PCB 中的现行状态由阻塞改为就绪-->然后再将该 PCB 插入到就绪队列中。(阻塞态变为就绪态

2.1.3.5 进程的切换

  进程的切换我们可以理解为进程的挂起与激活,就是执行态与就绪态之间的相互转换。

  引起切换的事件:当前进程时间片到、有更高优先级的进程到达、当前进程主动阻塞、当前进程终止。

  切换原语执行的步骤:将运行环境存储到PCB-->将PCB更换存储队列选择其他PCB执行并更新其状态-->根据PCB存储的运行环境恢复其运行环境。

2.1.3.6 小结

  本节各个状态之间的转换是比较多的,进程控制会导致进程状态的转换。无论哪个进程控制原语,要做的无非三类事情:

1. 更新PCB中的信息(a. 所有的进程控制原语一定都会修改进程状态标志 b. 剥夺当前运行进程的CPU使用权必然需要保存其运行环境 c.某进程开始运行前必然要恢复期运行环境)

2. 将PCB插入合适的队列

3. 分配/回收资源
 
 
如下图:

 

 
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!