![8ab7d5c530b637d3b1f0c29fc5301966.png](https://i-blog.csdnimg.cn/blog_migrate/8a13dde9ac1677e8cdcf505b71dcb7e5.png)
在多道程序系统中,虽然各个进程可以并发执行,但在系统中进程的数量往往要超过计算机系统中CPU的个数,所以,并不是所有的进程都占用CPU而处于运行状态,尤其在单CPU系统中,任何时刻最多只能有一个进程处于运行状态。因此,处于系统中的进程可能具有不同的状态。
首先来了解一下进程的三种基本状态及其转换。
运行状态指的是当一个进程获得必要的资源并正在处理器上执行时,该进程所处的状态为运行状态。
就绪状态,即一个进程已获得除CPU以外的所有必要的资源后,只要再获得CPU就可以运行的状态称为就绪状态。
阻塞状态,又称等待态(Wait)或睡眠态(Sleep)。指进程因等待某种事件的发生(例如等待某一输入、输出操作完成,等待其他进程发来的信号等)而暂时不能运行的状态。
就绪→运行:处于就绪状态的某一个进程被进程调度程序选中后,该进程的状态就由就绪状态变为运行状态,并获得CPU,这样该进程就投入运行。此时该进程处于真正活动中。一般情况下,我们将处于运行状态的进程称作当前进程。
运行→阻塞:如果当前进程在运行过程中,因某种条件未满足而放弃对CPU的占用(例如该进程要求读入文件中的数据,在数据读入内存之前,该进程无法继续执行下去),则该进程由运行状态转变为阻塞状态,并进入某一个等待队列之中。
阻塞→就绪:处于阻塞状态的进程所等待的事件发生了,例如读数据的操作完成,系统就把该进程从等待队列中移出来,改变其状态为就绪并放到就绪队列中,然后与就绪队列中的其他进程竞争CPU。
运行→就绪:当前进程因系统分配给它的时间片耗尽或在抢占调度方式中有一个更高优先级的进程到达就绪队列而抢占当前运行进程的CPU,而当前进程并未运行结束,则该进程从运行状态变为就绪状态,被安排进入就绪队列之中。当进程调度程序再次选中它时,即可继续运行。因进程的时间片耗尽或进程被抢先都是靠中断驱使的,因此在图3-4中标注运行状态到就绪状态的转换原因为中断。