操作系统之进程控制

进程控制

  • 进程控制是进程管理中最基本的功能,主要包括创建新进程、终止已完成的进程、将因发生异常情况而无法继续运行的进程置于阻塞状态、负责进程运行中的状态转换等功能。 如当一个正在执行的进程因等待某事件而暂时不能继续执行时,将其转变为阻塞状态,而在该进程所期待的事件岀现后,又将该进程转换为就绪状态等。
  • 进程控制一般是由os的内核中的原语来实现的。

进程的创建

一)引起创建进程的事件

为使程序之间能并发运行,应先为它们分别创建进程。导致一个进程去创建另一个进程的典型事件有四类:

  1. 用户登录。在分时系统中,用户在终端键入登录命令后,若登录成功,系统将为该用户建立一个进程,并把它插入就绪队列中。
  2. 作业调度。在多道批处理系统中,当作业调度程序按一定的算法调度到某个(些)作业时,便将它(们)装入内存,为它(们)创建进程,并把它(们)插入就绪队列中。
  3. 提供服务。当运行中的用户程序提出某种请求后,系统将专门创建一个进程来提供用户所需要的服务,例如,用户程序要求进行文件打印,操作系统将为它创建一个打印进程,这样不仅可使打印进程与该用户进程并发执行,而且还便于计算为完成打印任务所花费的时间。
  4. 应用请求。在上述三种情况下,都是由系统内核为用户创建一个新进程;而这类事件则是由用户进程自己创建新进程,以便使新进程以同创建者进程并发运行的方式完成特定任务。例如,某用户程序需要不断地先从键盘终端读入数据,继而再对输入数据进行相应的处理,然后,再将处理结果以表格形式在屏幕上显示。该应用进程为使这几个操作能并发执行,以加速任务的完成,可以分别建立键盘输入进程、表格输出进程。
二)创建新进程的过程

在系统中每当出现了创建新进程的请求后,OS便调用进程创建原语Creat按下述步骤 创建一个新进程:

  1. 申请空白PCB,为新进程申请获得唯一的数字标识符,并从PCB集合中索取一个空白PCB。
  2. 为新进程分配其运行所需的资源,包括各种物理和逻辑资源,如内存、文件、I/O 设备和CPU时间等。这些资源或从操作系统或仅从其父进程获得。新进程对这些资源的需求详情一般也要提前告知操作系统或其父进程。例如,为新进程的程序和数据以及用户栈分配必要的内存空间时,操作系统必须知道新进程所需内存的大小:
    ①对于批处理作业, 其大小可在用户提出创建进程要求时提供;
    ②若是为应用进程创建子进程,也应是在该进程提出创建进程的请求中给出所需内存的大小;
    ③对于交互型作业,用户可以不给出内存 要求而由系统分配一定的空间;如果新进程要共享某个己在内存的地址空间(即已装入内存的共享段),则必须建立相应的链接。
  3. 初始化进程控制块(PCB)o PCB的初始化包括:
    ①初始化标识信息,将系统分配的标识符和父进程标识符填入新PCB中;
    ②初始化处理机状态信息,使程序计数器指向程序的入口地址,使栈指针指向栈顶;
    ③初始化处理机控制信息,将进程的状态设置为就绪状态或静止就绪状态,对于优先级,通常是将它设置为最低优先级,除非用户以显式方式提出高优先级要求。
  4. 如果进程就绪队列能够接纳新进程,便将新进程插入就绪队列。

进程的终止

一)引起进程终止的事件
  1. 正常结束,表示进程的任务已经完成,准备退出运行。在任何系统中,都应有一个用于表示进程已经运行完成的指示。在批处理系统中,通常会在程序的最后安排一条Holt 指令,用于向OS表示运行已结束。当程序运行到Holt指令时,将产生一个中断,去通知OS本进程已经完成;在分时系统中,用户可利用Logs off去表示进程运行完毕,此时同样可产生一个中断,去通知OS进程已运行完毕。
  2. 异常结束,是指进程在运行时发生了某种异常事件,使程序无法继续运行。常见的异常事件有:
    ①越界错,这是指程序所访问的存储区,已越出该进程的区域;
    ②保护错,指进程试图去访问一个不允许访问的资源或文件,或者以不适当的方式进行访问,例如,进程试图去写一个只读文件;③ 非法指令,指程序试图去执行一条不存在的指令。出现该错误的原因可能是程序错误地转移到数据区,把数据当成了指令;
    ④特权指令错,指用户进程试图去执行一条只允许OS执行的指令;
    ⑤ 运行超时,指进程的执行时间超过了指定的最大值;
    ⑥等待超时,指进程等待某事件的时间超过了规定的最大值;
    ⑦算术运算错,指进程试图去执行一个被禁止的运算,例如,被0除;
    ⑧I/O故障,这是指在I/O 过程中发生了错误等。
  3. 外界干预,是指进程应外界的请求而终止运行。这些干预有:
    ①操作员或操作系统干预,指如果系统中发生了某事件,例如,发生了系统死锁,由操作员或操作系统釆取终止某些进程的方式使系统从死锁状态中解救出来;
    ②父进程请求,指当子进程已完成父进程所 要求的任务时,父进程可以提出请求结束该子进程;
    3)因父进程终止,指当父进程终止时, 它的所有子进程也都应当结束,因此,OS在终止父进程的同时,也将它的所有子孙进程终止。
二)进程的终止过程

如果系统中发生了要求终止进程的某事件,OS便调用进程终止原语,按下述过程去终 止指定的进程:

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

进程的阻塞与唤醒

一)引起进程阻塞和唤醒的事件:
  1. 向系统请求共享资源失败。进程在向系统请求共享资源时,由于系统已无足够的资源分配给它,此时进程因不能继续运行而转变为阻塞状态。例如,一进程请求使用打印 机,由于系统已将打印机分配给其它进程,已无可以再可分配的打印机,这时请求者进程 只能被阻塞,仅在其它进程释放出打印机时,请求进程才被唤醒。
  2. 等待某种操作的完成。当进程启动某种操作后,如果该进程必须在该操作完成之后才 能继续执行,则应先将该进程阻塞起来,以等待操作完成。例如,进程启动了某I/O设备, 如果只有在I/O设备完成了指定的I/O操作任务后进程才能继续执行,则该进程在启动了 I/O 设备后便应自动进入阻塞状态去等待。在I/O操作完成后,再由中断处理程序将该进程唤醒。
  3. 新数据尚未到达。对于相互合作的进程,如果一个进程需要先获得另一进程提供的数据后才能对该数据进行处理,只要其所需数据尚未到达,进程便只有阻塞。例如,有两个进程,进程A用于输入数据,进程B对输入数据进行加工。假如A尚未将数据输入完毕,则进程B将因没有所需处理的数据而阻塞;一旦进程A把数据输入完毕,便可去唤醒进程B。
  4. 等待新任务的到达。在某些系统中,特别是在网络环境下的OS,往往设置一些特定的系统进程,每当这种进程完成任务后便把自己阻塞起来,等待新任务的到来。例如, 在网络环境中的发送进程,其主要任务是发送数据包,若已有的数据包已全部发送完成, 而又无新的数据包发送,这时发送进程将把自己阻塞起来;仅当有新的数据包到达时,才将发送进程唤醒。
二) 进程阻塞过程

正在执行的进程,如果发生了上述某事件,进程便通过调用阻塞原语block将自己阻 塞。可见,阻塞是进程自身的一种主动行为。进入block过程后,由于该进程还处于执行 状态,所以应

  1. 先立即停止执行,把进程控制块中的现行状态由“执行"改为阻塞,
  2. 并将PCB 插入阻塞队列。
    如果系统中设置了因不同事件而阻塞的多个阻塞队列,则应将本进程插入到具有相同事件的阻塞队列。最后,转调度程序进行重新调度,将处理机分配给另一就绪进程,并进行切换,亦即,保留被阻塞进程的处理机状态,按新进程的PCB中的处理机状态设置CPU的环境。
三) 进程唤醒过程

当被阻塞进程所期待的事件发生时,比如它所启动的I/O操作已完成,或其所期待的数据已经到达,则由有关进程(比如提供数据的进程)调用唤醒原语wakeup,将等待该事件 的进程唤醒。wake叩执行的过程是:

  1. 首先把被阻塞的进程从等待该事件的阻塞队列中移出, 将其PCB中的现行状态由阻塞改为就绪,
  2. 然后再将该PCB插入到就绪队列中。
    应当指出,block原语和wake叩原语是一对作用刚好相反的原语。在使用它们时,必 须成对使用,即如果在某进程中调用了阻塞原语,则必须在与之相合作的、或其它相关的 进程中安排一条相应的唤醒原语,以便能唤醒被阻塞进程;否则,阻塞进程将会因不能被 唤醒而永久地处于阻塞状态,再无机会继续运行。

进程的挂起与激活

一)进程的挂起

当系统中出现了引起进程挂起的事件时,OS将利用挂起原语suspend将指定进程或处 于阻塞状态的进程挂起。suspend的执行过程是:

  1. 首先检查被挂起进程的状态,若处于活动 就绪状态,便将其改为静止就绪;对于活动阻塞状态的进程,则将之改为静止阻塞;为了方便用户或父进程考查该进程的运行情况,而把该进程的PCB复制到某指定的内存区域;
  2. 最后,若被挂起的进程正在执行,则转向调度程序重新调度。
二) 进程的激活过程

当系统中发生激活进程的事件时,OS将利用激活原语active,将指定进程激活。激活原语:
先将进程从外存调入内存,检査该进程的现行状态,若是静止就绪,便将之改为活动 就绪;若为静止阻塞,便将之改为活动阻塞。假如釆用的是抢占调度策略,则每当有静止就绪进程被激活而插入就绪队列时,便应检查是否要进行重新调度,即由调度程序将被激活的进程与当前进程两者的优先级进行比较,如果被激活进程的优先级低,就不必重新调度;否则,立即剥夺当前进程的运行,把处理机分配给刚刚被激活的进程。

发布了10 篇原创文章 · 获赞 5 · 访问量 149

猜你喜欢

转载自blog.csdn.net/weixin_44715384/article/details/105008374