大西冰城的博客

跟我学操作系统(11):进程的状态与转换

Word count: 1.7kReading time: 5 min
2026/06/17
loading

进程的状态

在上一章进程的概念中,我们我们已经详细的阐述了进程的定义、标识以及核心组成结构,我们说过了操作系统是如何创建进程的,以及每个进程都会有一个专门的PCB来记录它的状态信息,那么在这一章我们就来看看进程在运行过程中会经历哪些状态,以及操作系统是如何进行状态转换的。

创建状态与就绪状态

当一个新的进程被创建时,它首先进入创建状态(New)。在这个阶段,操作系统会为新进程分配必要的资源,如内存空间、文件描述符等,并为其创建一个对应的PCB来记录进程的基本信息。当进程创建完成后,它会进入就绪状态(Ready),此时进程已经准备好可以被CPU调度执行了,但是操作系统还没有为其分配CPU时间片。在就绪状态下,进程会被放入一个就绪队列中,等待操作系统的调度器来选择它进入运行状态。

运行状态

当CPU空闲的时候,操作系统的调度器会从就绪队列中选择一个进程,让他上CPU执行,这时这个进程就进入了运行状态(Running)。在运行状态下,进程的指令被CPU立即执行,进程的状态信息会被更新到它的PCB中,以便操作系统随时监控和管理它的运行情况。一个进程在运行状态下可能会执行各种操作,如计算、I/O操作、系统调用等,这些操作可能会导致进程进入不同的状态。

阻塞状态

当一个进程在运行状态下需要等待某些事件发生时,比如等待I/O操作完成、等待某个资源被释放等,它就会进入阻塞状态(Blocked)。在阻塞状态下,进程无法继续执行,因为它需要等待某个条件满足才能继续运行。操作系统会将阻塞的进程从CPU上移除,并将其放入一个等待队列中,直到它等待的事件发生后,操作系统会将其从等待队列中移除,并将其状态改为就绪状态,等待下一次调度器的选择。

终止状态

当一个进程完成了它的任务,或者被操作系统强制终止时,它就会进入终止状态(Terminated)。在终止状态下,进程的资源会被操作系统回收,PCB也会被销毁。一个进程进入终止状态后,它就不再存在于系统中,无法被调度器选择执行了。

进程状态转换

进程在运行过程中会经历多次状态转换,这些转换是由操作系统根据进程的行为和系统的需求来进行的。以下是一些常见的进程状态转换:

  1. 创建状态 -> 就绪状态:当一个新进程被创建完成后,它会进入就绪状态,等待调度器的选择。
  2. 就绪状态 -> 运行状态:当调度器选择一个就绪的进程时,它会进入运行状态,开始执行。
  3. 运行状态 -> 阻塞状态:当一个正在运行的进程需要等待某个事件时,它会进入阻塞状态,等待事件发生。
  4. 阻塞状态 -> 就绪状态:当阻塞的进程等待的事件发生后,它会进入就绪状态,等待调度器的选择。
  5. 运行状态 -> 终止状态:当一个进程完成了它的任务,或者被操作系统强制终止时,它会进入终止状态。

这里要注意的是 阻塞状态是不能直接进入运行状态的,也不能由就绪状态直接进入阻塞状态的,因为阻塞状态是程序主动请求的,必须要进程在运行状态下才有能力发出请求,所以就绪状态只能进入运行状态,运行状态才能进入阻塞状态。

进程的组织方式

在现代操作系统中,系统往往会同时运行成百上千个进程。想要对海量进程进行高效的管理与调度,就需要一套规范的进程组织方式。操作系统正是通过规整、管理进程的PCB(进程控制块),实现对所有进程的统一管控。

每个进程的PCB中都包含一个state 状态变量,专门用于记录进程的当前运行状态,例如数值1代表就绪状态、数值2代表运行状态,还有对应数值标识阻塞、挂起等其他状态。操作系统依据这个状态变量,对不同状态的进程分类管理,目前主流的PCB组织方式分为两种:索引方式链接方式

索引方式

在索引方式下,操作系统会为不同状态的进程建立不同的索引表,索引表中不存储进程本身,仅记录对应状态下所有进程的PCB地址。系统进行进程调度时,可直接通过数组下标精准定位索引表中的PCB地址,快速调取目标进程,完成管理与调度工作。

链接方式

在链接方式下,操作系统会通过指针将同一状态的所有进程PCB串联成链表,以此形成就绪队列、阻塞队列等经典进程队列,完成进程的分类管理。

为了进一步提升调度精细化与效率,操作系统还会对阻塞队列进行细分,根据进程的阻塞原因分类建队,常见的有等待I/O的阻塞队列、等待信号量的阻塞队列等。将不同阻塞原因的进程分开管理,当阻塞事件解除后,系统可以精准唤醒对应队列的进程,避免无效遍历,大幅提升进程管理和调度的效率。

大多数现代操作系统都采用了链接方式来组织进程,因为它能够更灵活地管理进程,尤其是在进程数量庞大且状态频繁变化的情况下,链接方式能够更高效地进行插入和删除操作。

CATALOG
  1. 1. 进程的状态
    1. 1.1. 创建状态与就绪状态
    2. 1.2. 运行状态
    3. 1.3. 阻塞状态
    4. 1.4. 终止状态
  2. 2. 进程状态转换
  3. 3. 进程的组织方式
    1. 3.1. 索引方式
    2. 3.2. 链接方式