进程是操作系统进行资源分配和调度的基本单位,其生命周期由一系列状态及状态间的转换构成 。理解这些状态及其转换是掌握进程管理的关键。常见的描述模型包括三态、五态和七态模型。
一、核心状态模型
1. 三态模型
三态模型是描述进程状态最基本、最核心的模型,包括运行态、就绪态和阻塞态(也称等待态)。
| 状态 | 描述 | 示例 |
|---|---|---|
| 运行态 | 进程已获得CPU,其指令正在处理器上执行。 | 一个正在计算圆周率的程序。 |
| 就绪态 | 进程已具备运行所需的所有条件(除CPU外),等待被调度器选中。 | 多个后台任务等待CPU时间片。 |
| 阻塞态 | 进程因等待某个事件(如I/O完成、信号量)而暂停执行,即使CPU空闲也无法运行。 | 程序等待用户键盘输入。 |
2. 五态模型
五态模型在三态基础上增加了新建态和终止态,更完整地描述了进程的生命周期 。
| 状态 | 描述 | 触发条件示例 |
|---|---|---|
| 新建态 | 进程刚被创建,操作系统正为其分配资源(如PID、内存)。 | 用户双击程序图标或命令行输入命令。 |
| 终止态 | 进程已结束运行,操作系统正回收其占用的资源。 | 程序执行完毕或收到终止信号。 |
3. 七态模型
七态模型在五态模型基础上引入了挂起概念,以解决内存资源紧张的问题。挂起态进程的映像被交换到外存(二级存储器)。
- 挂起就绪态:进程在外存中,但已具备运行条件。
- 挂起阻塞态:进程在外存中,并正在等待某个事件。
二、状态转换详解
状态间的转换由特定事件触发,以下是主要转换路径及原因。
1. 基本转换(三态模型内)
- 就绪态 -> 运行态:进程被操作系统的调度程序选中,获得CPU使用权 。
- 运行态 -> 就绪态:通常因为时间片耗尽,或被更高优先级的就绪进程抢占 。
- 运行态 -> 阻塞态:进程主动请求并等待系统资源或事件,如进行I/O操作、申请互斥锁失败、等待子进程结束等 。
- 阻塞态 -> 就绪态:进程所等待的事件已发生(如I/O完成、收到信号),重新具备了运行资格 。
2. 生命周期起止转换
- 新建态 -> 就绪态:操作系统完成进程创建和资源分配,将其加入就绪队列,等待调度 。
- 运行态 -> 终止态:进程执行完毕或被强制终止(如发生致命错误、被用户杀死)。进入终止态后,操作系统进行资源回收等善后工作。
3. 挂起相关转换
挂起通常由操作系统或用户(父进程)发起,目的是腾出内存。
- 就绪态 -> 挂起就绪态:操作系统需要释放内存,将暂时不会运行的进程换出。
- 阻塞态 -> 挂起阻塞态:同样为释放内存,将处于长期等待的进程换出。
- 挂起就绪态 -> 就绪态:当内存有足够空闲,且需要激活该进程时,将其映像换入内存。
- 挂起阻塞态 -> 阻塞态:进程被换入内存,但其等待的事件仍未发生,故转为阻塞态。
- 运行态 -> 挂起就绪态(直接):一个运行中的进程也可能被挂起,这通常发生在交互式系统中用户主动挂起前台进程时。
三、应用实例与系统视角
在Linux系统中,可以使用ps aux命令查看进程状态,常见状态字母包括:
- R (Running):运行或就绪。
- S (Sleeping):可中断的休眠(阻塞)。
- D (Disk Sleep):不可中断的休眠(通常与磁盘I/O相关,深度阻塞)。
- T (Stopped):暂停状态(如收到
SIGSTOP信号)。 - Z (Zombie):僵尸态,进程已终止但资源未完全回收 。
状态转换的意义在于,它使得操作系统能够通过有限的CPU资源,让多个进程并发执行,提高系统利用率。调度器根据状态和策略决定哪个就绪进程获得CPU;当进程阻塞时,CPU可立即切换到其他就绪进程,避免空闲等待 。挂起机制则通过平衡内存与CPU的负载,进一步提升系统整体性能和资源管理效率。
参考来源
- 进程的状态转换详解
- 操作系统之进程的状态和转换详解
- 操作系统之进程的状态和转换详解
- 操作系统之进程的状态和转换详解
- 【操作系统】进程的状态及转换
- 【进程与线程】进程的状态