操作系统 ——进程的状态与转换

1、知识总览

操作系统 ——进程的状态与转换

2、进程的状态——三种基本状态

进程是程序的一次执行,在这个执行过程中,有时进程正在被CPU执行,有时又需要等待CPU服务。可见,进程的状态是会有各种变化。为了方便对各个进程的管理,操作系统需要将进程合理地划分为几种状态;

2.1 进程的三种基本状态

操作系统 ——进程的状态与转换

  1. 运行态:占有CPU,并在CPU上执行;
    注意:单核处理机环境下,每一时刻最多只有一个进程处于运行态;双核环境下可以同时有两个进程处于运行态;
  2. 就绪态:已经具备运行条件,但由于没有空闲CPU,而暂时不能运行;
    进程已经拥有了除了处理机之外所有需要的资源,一旦获得处理机,即可立即进入运行态开始运行。即:万事俱备,只欠CPU;
  3. 阻塞态(等待态):因等待某一件事情而暂时不能运行;
    比如等待操作系统分配打印机,等待读磁盘操作的结果,CPU是计算机中最昂贵的部件,为了提高CPU的利用率,需要先将其他进程需要的资源分配到位,才能得到CPU的服务;

2.1.1 除了三种基本状态,进程还有另外两种状态

操作系统 ——进程的状态与转换

如果一个程序想要在计算机中正常运行,在程序正常运行之前,操作系统需要做一些新建进程的初始化工作,需要为这个新的进程分配所需要的内存空间。比如存放程序段、数据段的空间,还需要为进程新建进程的PCB,也就是进程控制块,所有这些初始化工作做完之后,这个进程才可以正式地投入运行。

所以在进程正式开始运行之前是需要做一些相应的处理的,在处理的过程中,进程就处于所谓的创建态;如果进程运行结束,或者由于一些bug导致程序无法继续执行下去,比如数组越界错误等,需要撤销进程。

而撤销进程的过程也不是一瞬间完成的,操作系统需要回收分配给进程的资源,比如进程被分配了一台打印机,打印设备需要被回收,另外还需要把分配给进程的内存区域回收,最后删除进程相关的PCB,这样才完成进程撤销的工作。可以看到在一个进程停止运行之后,还需要一些后续的工作,在进行后续工作的情况下,这些进程就处于所谓的终止态。

3、进程状态转换

操作系统 ——进程的状态与转换

一个进程被新建的时候,在初始化过程中,肯定处于创建态,操作系统完成创建进程的一系列工作之后,进程处于就绪态,一个进程处于就绪态,就说明进程除了处理机CPU之外,其它的资源都已经准备好了。

一旦处于就绪态的进程被CPU调度,进程就会处于运行态,这样就能被CPU处理,一个处于运行态的进程拥有了处理机CPU资源,也有了其它的资源;如果处于运行态的进程的时间片用完了,或者处理机CPU被抢占,处于运行态的进程就会回到就绪态。

如果一个处于运行态的进程用系统调用的方式申请某种系统资源,或者请求等待某个事件发生,比如请求等待另外一个进程的运算结果,在这种情况下,由于请求的事件暂时没有发生,所以进程会从运行态转向阻塞态;如果一个进程处于阻塞态,那么该进程的CPU资源已经被剥夺,同时其他的一些资源也还没有就位;只有当进程的所有资源都已经就位,或者其等待的事情发生,这个进程才可以重新从阻塞态转换全维就绪态,从而又有机会被处理机调用。

运行态到阻塞态是一种进程自身做出的主动行为,而阻塞态到就绪态的转换其实是进程等待资源被分配到位或者等待的事件发生,这些事情不是进程本身可以控制的,所以这个转换过程是一个被动行为。

注意:不能从阻塞态直接转换为运行态,也不能由就绪态转换为阻塞态,因为进入阻塞态是进程主动请求的,必然需要进程在运行时才能发出这种请求。

处于运行态的进程运行结束,或者运行中遇到不可修复的错误,比如数组越界,这样的进程就会被撤销,从而进入终止态,然后由操作系统完成一系列后续的操作。

4、总结

操作系统 ——进程的状态与转换