Faster, Higher, Stronger
更快,更高,更强

进程的状态及转换 两/三/五态模型、挂起、进程控制块

一、两状态进程模型

最简单的进程运行模型是基于这样一个事实:进程要么正在执行,要么没有执行。这样,一个进程就有两种状态:

  1. 运行(Running);
  2. 非运行(Not-running)。

当操作系统产生一个进程后,将该进程加入到非运行系统中,这样操作系统就知道该进程的存在,而该进程则等待机会执行。每隔一段时间,正在运行的进程就会被中断执行,此时分派程序将选择一个新进程投入运行(非运行状态的进程存放在一个排序队列中等待分派程序的调度运行),被中断运行的进程则由运行状态变为非运行状态,而投入运行的进程则由非运行状态变为运行状态。

二、进程的三态模型

两状态进程模型是有先天缺陷的,在等待执行的进程队列中,有一些非运行状态的进程在等待CPU的执行;而另一些非运行状态的进程除等待CPU之外还需要等待I/O的完成,在I/O尚未完成之前,即使分派程序将CPU分派给它们,这些进程也无法执行(这些进程称为阻塞进程)。因此分派程序不能只是在进程队列中选择等待时间最长的进程,而是应扫描整个进程队列寻找未被阻塞且等待时间最长的进程。

因此,将非运行状态分成就绪(Ready)和阻塞(Blocked)两种状态。这样,运行中的进程就有了三种基本状态:运行、阻塞和就绪。这三种状态构成了最简单的进程生命周期。

  1. 运行状态。进程获得了CPU和其他所需要的资源,目前正在CPU上运行。对单CPU系统而言,只能有一个进程处于运行状态。
  2. 阻塞状态。进程运行中发生了某种等待事件(如发生了等待I/O的操作)而暂时不能运行的状态。处于该状态的进程不能去竞争CPU,因为此时即使把CPU分配给它也无法运行。处于阻塞状态的进程可以有多个。
  3. 就绪状态。进程获得了除CPU之外的所需资源,一旦得到CPU就可以立即投入运行。不能运行的原因还是因为CPU资源太少,只能等待分配CPU资源。在系统中出于就绪状态的进程可能有多个,通常是将它们组成一个进程就绪队列。

这三种进程状态的变迁应注意以下5点:

  1. 进程由就绪状态变迁到运行状态是由进程调度程序(分派程序)完成的。也就是说,一旦CPU空闲,进程调度程序就会立即依据某种调度算法从进程就绪队列中选择一个进程占用CPU运行。
  2. 进程由运行状态变迁到阻塞状态,通常是由运行程序自身提出的。
  3. 进程由阻塞状态变迁为就绪状态总是由外界事件引起的。通常是当阻塞状态进程被阻塞的原因得到解除时(等待事件已完成),由当前正在运行的进程来响应这个外界事件的请求,唤醒相应的阻塞状态进程,将其转换为就绪状态并插入到进程就绪队列中,然后改运行进程继续完成自身的任务。
  4. 进程由运行状态变迁为就绪状态通常在分时操作系统中出现,即系统分配给运行进程所使用的CPU时间片用完,这时进程调度程序将CPU轮转给下一个就绪进程使用,由于被取消CPU使用权的进程仅仅是没有了CPU,而其他所需资源并不缺少,即满足就绪状态的条件,因此转为就绪状态并插入到进程就绪队列中。
  5. 进程不能有阻塞状态直接变迁到运行状态。

此外还要注意的是,虽然进程有三个基本状态,但对每个进程而言,其生命周期内不一定都要经历这三个状态。对于一些计算性的简单进程,运行很短的时间就结束了,也就无须进入阻塞状态了,所以个别进程可以不经历阻塞状态。

三、进程的五态模型(five-state process model)

1、进程的产生

当需要创建一个新进程时,系统为该进程分配一个进程控制块(PCB),并为该进程分配内存空间,且装入该进程对应的程序和有关数据。这时,一个新进程就产生了。

通常有4中事件会导致新进程的产生:①在一个批处理环境中,为了响应一个任务的要求而产生进程。②在一个交互式环境中(如分时操作系统),当一个新用户企图登录时会产生进程。在这两种情况下,进程的产生均由操作系统负责。③操作系统代替用户程序产生进程。例如,如果用户想要打印文件,操作系统就产生一个打印进程来对打印进行管理。④由用户程序来产生多个进程。

当一个进程产生另一个进程时,生成进程称为父进程,而被生成进程称为子进程。通常情况下,这些相关进程需要相互通信并且相互协作。

2、进程的终止

当一个进程执行到自然结束点,或出现不可克服的错误而不得不取消时,或被拥有特定权限的进程取消时,该进程被终止,其状态转换为终止状态。处于终止状态的进程不能再被调度执行,与其相关的数据信息由操作系统临时保存。终止一个进程时,系统需要逐步释放为其分配的系统资源,最后释放其PCB。这时,系统将该进程的状态设为终止态,以方便进行相应的收尾工作。

3、五态模型

引入了创建状态和终止状态后,系统又增加了三个新的进程状态变迁。

  1. 由空到创建状态。
  2. 由创建状态边签到就绪状态。
  3. 运行状态变迁到终止状态。

五态模型图:

五态模型(A five-state process model)的介绍用英文解释非常清晰:

  1. New : A process has been created but has not yet been admitted to the pool of executable processes.
  2. Ready : Processes that are prepared to run if given an opportunity. That is, they are not waiting on anything except the CPU availability.
  3. Running: The process that is currently being executed. (Assume single processor for simplicity.)
  4. Blocked : A process that cannot execute until a specified event such as an IO completion occurs.
  5. Exit: A process that has been released by OS either after normal termination or after abnormal termination (error).

四、进程的挂起(process suspension)

1、挂起状态的引入

前面讨论的五状态进程模型中,新创建的进程一旦被系统接纳就一直存在于内存中,直到被终止。在这种情况下,一方面随着系统中进程数量的不断增多,系统内存资源会变得越来越紧张;另一方面,由于CPU的速度远远高于I/O的速度,这使得内存中经常会出现大部分进程都在等待I/O操作而CPU缺空闲的现象。当内存中没有就绪进程时,为了减少CPU的空闲时间,可以采用交换技术将内存中暂时不能运行的某些进程挂起,释放其所占用的内存资源,以便重新接纳一个新进程或外存上已具备运行条件的进程进入内存的进程就绪队列。进程挂起(也称换出)是指在内存中的进程被暂时移出保存到外存中(如磁盘)的过程。当某个进程被挂起时,若被挂起的进程处于运行状态则停止执行;若被挂起的进程处于就绪状态则暂时不参加进程调度。引起进程挂起的原因大致有以下三种:

  1. 用户的请求。
  2. 父进程的请求。
  3. 操作系统的原因。操作系统引起的挂起可分为以下三种:
    1. 交换。当操作系统发现系统的内存资源已经不能满足运行进程的需要时,可以将当前不重要的进程挂起,以达到平衡系统负载的目的。
    2. 出现问题或故障时。当系统出现故障时,操作系统会暂时将系统中涉及该故障的进程挂起(换出),等故障恢复后,再将这些进程恢复到挂起前的状态(换入,由外存调入到内存)。
    3. 操作系统的需要。为监视系统的活动,操作系统可以挂起和激活(将外存中的进程调入到内存)一些记录系统资源使用状况的进程和用户进程活动的记账进程。

2、具有挂起状态的进程状态转换

引入挂起状态后,需要实现进程在挂起(即在外存)状态和非挂起(即在内存)状态之间的转换。由于被挂起的进程不能被调度运行,因此通常将挂起状态称为静止状态,而将非挂起状态称为活跃状态。根据挂起前进程所处的状态,可以将挂起状态分为:静止就绪状态和静止阻塞状态。系统通常将具有相同状态的进程组成一个或多个队列。为了区别,将进程基本状态中的就绪状态改称为活动就绪状态,阻塞状态改称为活动阻塞状态。相应地,我们又多了6中转换关系:

  1. 活动阻塞状态挂起变为静止阻塞态。主要有两种情况会发生这种挂起(进程由内存换出至外存)状态变化:①若当前不存在活动就绪进程,则至少有一个活动阻塞进程由内存兑换至外存成为静止阻塞进程,以腾出内存空间,从外存调入一个静止就绪进程使其变为活动就绪进程(保证内存中至少有一个活动就绪进程,可供进程调度程序调度运行以免CPU空闲);②操作系统根据当前的资源状态和性能要求,可以将某些活动阻塞进程换出至外存成为静止阻塞进程。
  2. 静止阻塞态激活变为活动阻塞态。一般在满足两个条件下,系统可以激活(进程由外存换入至内存)一个静止阻塞态进程,使之成为活动阻塞进程。即:①操作系统已经得知导致该进程阻塞的事件即将结束;②内存中已经有了一大块空闲的空间。
  3. 静止阻塞态变为静止就绪态。当在外存上的静止阻塞进程所需资源得到满足或者等待的事件已经完成时,该进程由静止阻塞态变为静止就绪态(但仍然在外存)。
  4. 静止就绪态激活变为活动就绪态。主要有三种情况会发生这种激活(进程由外存换入至内存)状态变化:①外存上的静止就绪进程具有比内存中的活动就绪进程更高的优先级;②内存中已经有了一大块空闲的空间;③当前内存中没有活动就绪进程。
  5. 活动就绪态挂起变为静止就绪态。这种状态变化主要是由于系统调节负荷(即内存紧张)的需要,或者是系统优化性能的需求,而将某些目前暂不需要运行的活动就绪进程由内存换出至外存。
  6. 运行态挂起(由内存换出至外存)变为静止就绪态。这种状态变化制药是运行进程出现了错误或异常,或者是对运行进程进行分析的需要。

可见,只有处于活动就绪态的进程,才能参与进程调度得到CPU,并在获得CPU后立即投入运行。具有挂起状态的系统虽然提高了内存的利用率,但同时也使管理更加复杂,且增加了系统的开销。

五、进程控制块

1、进程控制块产生的原因

操作系统需要为进程定义一种能够描述和控制进程运行的数据结构,这就是进程控制块(PCB)。即PCB是操作系统中最重要的数据结构之一,因为它是进程存在的唯一标志。PCB中存放着操作系统所需的用于描述进程当前情况的全部描述信息,以及控制进程运行的全部控制信息和相关的资源信息。在几乎所有的多道程序操作系统中,进程的PCB都是全部或部分常驻内存,操作系统通过PCB而感知进程的存在,并且根据PCB对进程实施控制和管理。

2、进程控制块中的信息

不同操作系统对进程的管理和控制机制是不同的,因此不同系统中PCB中信息的多少也不同,但多数系统中的PCB都包含以下信息。

  1. 进程标识符。每个进程都必须有唯一的进程标识符,也称进程的内部名。
  2. 进程的当前状态。它表明进程当前所处的状态,并作为进程调度程序分配CPU的依据,仅当进程处于就绪状态时才可以被调度执行。若进程处于阻塞状态,还需要在PCB中记录阻塞的原因,以供唤醒原语唤醒进程时使用。
  3. 进程中的程序段与数据段地址。
  4. 进程资源清单。
  5. 进程优先级。
  6. CPU现场保护区。
  7. 进程同步与通信机制。
  8. PCB队列指针或链接字。用于将处于同一个状态的进程连接成一个队列,链接字中存放该进程所在队列中的下一个进程PCB的首地址。
  9. 与进程相关的其他信息。

3、进程控制块的组织方式

在一个系统中,通常可能有多个进程同时存在,所以就拥有多个PCB。为了能对PCB进行有效的管理和调度,就要用适当的方法把这些PCB组织起来。目前常用的PCB组织方式有以下三种。

  1. 线性表方式。论进程的状态如何,将所有的PCB连续地存放在内存的系统区(内核空间),这种方式适用于系统中进程数目不多的情况。
  2. 链接表方式。系统按照进程的状态将进程的PCB链成队列,从而形成进程就绪队列、进程阻塞队列、进程运行队列等(单CPU系统进程运行队列仅有一个PCB)。链接表方式组织PCB可以很方便地对同类PCB进行管理,操作简单,但是要查找某个进程的PCB就比较麻烦,因此只适用于小系统中进程数比较少的情况。
  3. 索引表方式。系统按照进程的状态分别建立就绪索引表、阻塞索引表等,通过索引表来管理系统中的进程。索引表方式组织PCB可以很方便地查找到某个进程的PCB,因此适用于进程数较多的情况,但是索引表需要占用一定的内存空间。

由于操作系统是根据PCB对进程实施控制和管理的,因此进程状态的变迁也是根据PCB中的状态信息来实现的。

赞(0) 打赏(金额可任意指定)
未经允许不得转载:峰间的云 » 进程的状态及转换

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏