进程在从创建到终止的全过程中一直处于一个不断变化的过程。为了刻画进程的这个变化过程,所有操作系统都把进程分成若干种状态,约定各种状态间的转换条件。对进程状态的刻画也经历了一个不断精确化的过程。下面我们就讨论进程的状态模型。
1.三状态进程模型
运行中的进程可以处于以下三种状态之一:运行、就绪、等待。
- 运行状态(Running)
- 就绪状态(Ready)
- 等待状态(Waiting)
是指进程已获得处理器,并且在处理器上执行的状态。显然,在一个单处理器系统中,最多只有一个进程处于运行态。
是指一个进程已经具备运行条件,但由于没有获得处理器而不能运行所处的状态。一旦把处理器分配给它,该进程就可运行。处于就绪状态的进程可以是多个。
也称阻塞状态或封锁状态。是指进程因等待某种事件发生而暂时不能运行的状态。例如,当两个进程竞争使用同一个资源时,没有占用该资源的进程便处于等待状态,它必须等到该资源被释放后才可以去使用它。引起等待的原因一旦消失,进程便转为就绪状态,以便在适当的时候投入运行。系统中处于等待状态的进程可以有多个。
在任何时刻,任何进程都处于且仅处于三种状态之一。进程在运行过程中,由于它自身的进展情况和外界环境条件的变化,三种基本状态可以相互转换。这种转换由操作系统完成,对用户是透明的。它也体现了进程的动态性。
1)就绪→运行。处于就绪状态的进程,它已具备了运行的条件,但由于未能获得处理器,故仍然不能运行。对于单处理器系统而言,因为处于就绪状态的进程往往不止一个,同一时刻只能有一个就绪进程获得处理器。进程调度程序根据调度算法(如优先级或时间片)把处理器分配给某个就绪进程,建立该进程运行状态标记,并把控制转入该进程的启动程序,把它由就绪状态变为运行状态。这样进程就投入运行。
2)运行→就绪。这种状态变化通常出现在分时操作系统中。正在运行的进程,由于规定的运行时间片用完而使系统发出超时中断请求,超时中断处理程序把该进程的状态修改为就绪状态,根据其自身的特征而插入就绪队列的适当位置,保留进程现场信息,收回处理器并转入进程调度程序。于是,正在运行的进程就由运行状态变为就绪状态。
3)运行→等待。处于运行状态的进程能否继续运行,除了受时间限制外,还受其他种种因素的影响。例如,运行中的进程需要等待文件的输入(或其他进程同步操作的影响)时,控制便自动转入系统控制程序,通过信息管理程序及设备管理程序进行文件输入;在输入过程中这个进程并不恢复到运行状态,而是由运行变成等待(此时,标记等待原因,并保留当前进程现场信息),然后控制转入进程调度程序。进程调度程序根据调度算法把处理器分配给原已处于就绪状态的进程。
4)等待→就绪。等待的进程在其被阻塞的原因获得解除后,并不能立即投入运行,因为处理器满足不了进程的需要,于是将其状态由等待变成就绪,仅当进程调度程序把处理器再次分配给它时,才可恢复现场继续运行。
2.五状态进程模型
五状态进程模型中,进程状态被分成下列五种状态。进程在运行过程中主要是在就绪、运行和阻塞三种状态间进行转换。创建状态和退出状态描述进程创建的过程和进程退出的过程。
- 运行状态(Running):进程占用处理器资源,处于此状态的进程的数目小于等于处理器的数目。在没有其他进程可以执行时(如所有进程都在阻塞状态),通常会自动执行系统的空闲进程。
- 就绪状态(Ready):进程已获得除处理器外的所需资源,等待分配处理器资源,只要分配处理器就可执行。就绪进程可以排成一个就绪队列,也可以按多个优先级来划分队列。例如:当一个进程由于时间片用完而进入就绪状态时,排入低优先级队列;当进程由于I/0操作完成而进入就绪状态时,排入高优先级队列。
- 阻塞状态(Blocked):由于进程等待I/0操作或进程同步等条件而暂停运行时处于阻塞状态。在条件满足之前,即使把处理器分配给该进程,也是无法继续执行的。所有处于阻塞状态的进程排成一个阻塞队列,也可以按等待事件的不同分成多个子队列。
- 创建状态(New):进程正在创建过程中,还不能运行。操作系统在创建状态要进行的工作包括分配和建立进程控制块表项、建立资源表格(如打开文件表),并分配资源,加载程序并建立地址空间表等。
- 结束状态(Exit):进程已结束运行,回收除进程控制块之外的其他资源,并让其他进程从进程控制块中收集有关信息(如记账和将退出代码传递给父进程)。
操作系统中多个进程的并发执行通过进程交替进入运行状态来实现的。
在五状态进程模型中进程的主要状态交替循环有两个,一个由调度与超时这两个转换构成。当一个正处于运行状态的进程超时后放入就绪队列,并修改进程状态为就绪状态;然后通过调度选择另一个就绪进程进入运行状态,完成一次运行进程的交替。
另一个由调度、等待事件和事件出现这三个转换构成。当一个正处于运行状态的进程需要等待某事件发生时主动放弃处理器,进入阻塞状态;然后通过调度选择另一个就绪进程进入运行状态;当进程所等待的事件出现时,相应进程被从阻塞队列中取出,并放入就绪队列,同时进程状态从阻塞状态转换成就绪状态,等待进入运行状态。这样就完成了一次从运行到阻塞,再到就绪的状态循环。
下面是五状态进程模型中的主要状态转换。
- 创建新进程:创建一个新进程,以运行一个程序。创建新进程的可能原因包括用户登录、操作系统创建以提供某项服务、批处理进程等。
- 提交(Admit):完成一个新进程的创建过程,新进程进入就绪状态。由于性能、内存、进程总数等原因,系统会限制并发进程总数。
- 调度运行(Dispatch):从就绪进程表中选择一个进程,进入运行状态。
- 释放(Release):由于进程完成或失败而终止进程运行,进入结束状态。为了简洁,状态变迁图中只画出了运行状态到结束状态间的释放转换;但实际上,还存在从就绪状态或阻塞状态到结束状态的释放转换。运行到结束的转换可分为正常退出(Exit)和异常退出(Abort);其中异常退出是指进程执行超时、内存不够、非法指令或地址访问、I/0操作失败、被其他进程所终止等原因而退出。可能导致从就绪或阻塞到结束转换的可能是由于多种原因引发的,如父进程可在任何时间终止子进程。
- 超时(Timeout)或被抢占:由于用完时间片或由于高优先级进程就绪被抢占等原因导致进程暂停运行。
- 事件等待(Event Wait):进程要求的事件未出现而进入阻塞;可能的原因包括申请系统服务或资源、通信、V0操作等。
- 事件出现(Event Occurs):进程等待的事件出现;如操作完成、申请成功等。
3.七状态进程模型
五状态进程模型没有区分进程地址空间位于内存还是外存,而在操作系统中引入虚拟存储管理技术后,需要进一步区分进程的地址空间状态。该问题的出现是由于进程优先级的引入,一些低优先级进程可能等待较长时间,从而被对换至外存。这种做法可得到下列好处。
- 提高处理器效率:就绪进程表为空时,有空闲内存空间用于提交新进程,可提高处理器效率。
- 可为运行进程提供足够内存:资源紧张时,可把某些进程对换至外存。
- 有利于调试:在调试时,挂起被调试进程,可方便对其地址空间进行读写。
与五状态进程模型相比,七状态进程模型把原来的就绪状态和阻塞状态进行了细分,增加了就绪挂起和阻塞挂起两个状态。这时原来的就绪状态和阻塞状态的意义也发生了一些变化。下面列出的是在挂起进程模型中的四种意义有变化或新的状态。
- 就绪状态(Ready):进程在内存且可立即进入运行状态。
- 阻塞状态(Blocked):进程在内存并等待某事件的出现。
- 阻塞挂起状态(Blocked,Suspend):进程在外存并等待某事件的出现。
- 就绪挂起状态(Ready,Suspend):进程在外存,但只要进入内存,即可运行。
在七状态进程模型中,新引入的状态转换有挂起和激活两类,意义有变化的转换有事件出现和进程提交两类。
·阻塞到阻塞挂起:没有进程处于就绪状态或就绪进程要求更多内存资源时,会进行这种转换,以提交新进程或运行就绪进程。
·就绪到就绪挂起:当有高优先级阻塞(系统认为会很快就绪的)进程和低优先级就绪进程时,系统会选择挂起低优先级就绪进程。
·运行到就绪挂起:对抢先式分时系统,当有高优先级阻塞挂起进程因事件出现而进入就绪挂起时,系统可能会把运行进程转到就绪挂起状态。
·就绪挂起到就绪:就绪挂起进程优先级高于就绪进程或没有就绪进程时,会进行这种转换。
·阻塞挂起到阻塞:但一个进程释放足够内存时,系统会把一个高于优先级阻塞挂起进程激活,系统认为会很快出现该进程所等待的事件。
·阻塞到就绪:针对内存进程的事件出现。
·阻塞挂起到就绪挂起:针对外存进程事件的出现。