目录
什么是进程状态?
为什么需要“进程状态”?
进程的 5 种基本状态(Five-State Model)
1. New(新建)
2. Ready(就绪)
3. Running(运行中)
4. Waiting(等待/阻塞)
5. Terminated(终止)
状态转换举个完整的例子:
状态转换图解
什么是进程状态?
当一个程序正在运行时,它的执行情况会不断变化,操作系统就用“状态”这个概念,来描述它当前正处于什么阶段。
就像我们人有不同的状态(正在走路、在睡觉、在排队等),一个程序运行的过程,也有「正在执行」、「正在等待」、「刚被创建」、「刚结束」等等状态。
状态 = 行为快照
我们可以把“进程状态”理解为:
进程的运行轨迹中的每一个时刻的行为快照
每当它做了一件关键事情(比如完成输入、获得 CPU、被强制中断),它的状态就更新一次。
为什么需要“进程状态”?
在现代操作系统中,同时会运行成百上千个进程。但:
CPU 同一时刻只能执行一个或几个进程
有些进程在等待输入(例如等待你敲键盘)
有些进程已经结束但还没被清理
因此,操作系统必须随时知道每个进程目前处于什么“状态”,这样才能:
决定哪个进程可以运行
哪个进程要等待
哪个进程可以终止
哪个进程正在被阻塞、暂停……
进程的 5 种基本状态(Five-State Model)
在操作系统中,一个正在执行的进程从出生到结束,通常会经历以下 五种状态:
状态名称英文名说明 创建New系统刚刚创建了进程,还未开始执行 就绪Ready进程已经准备好,只等 CPU 给它机会 执行Running进程正在 CPU 上运行(执行代码) 等待Waiting进程因为等待某件事(比如文件、网络)暂时停下 终止Terminated进程已经执行完毕或被终止,将被清理
1. New(新建)
系统刚刚“创建”一个进程。
比如:你双击打开 Word,系统就会立刻为它创建一个「新进程结构」,但还没安排它真正开始工作。
此时操作系统会:
分配内存
设置初始状态
把它放进 PCB(进程控制块)
2. Ready(就绪)
进程一切准备就绪,等着 CPU 来“叫它上台”。
进程已经被初始化了,也没有在等 I/O,它已经具备运行条件,只是暂时还没分到 CPU。 多个就绪进程排队,等着 CPU 调度器来选一个执行。
类比:像是一群运动员在起跑线等“发令枪”,谁也不动,但谁都准备好了。
3. Running(运行中)
进程被调度到了 CPU,开始实际执行。
此时它:
执行指令
使用寄存器和内存
可能读写数据
做逻辑判断
⚠️ 关键点:同一时刻只有一个进程(或一个线程)真正处于 Running 状态,即使你的电脑上有很多程序开着。
4. Waiting(等待/阻塞)
进程遇到某些“必须等待”的事情,只能暂停。
典型例子:
正在等用户输入(键盘没敲)
正在等网络下载
正在等文件打开
这时候进程不再占用 CPU,而是挂起,直到外部事件完成,再回到「就绪」状态。
5. Terminated(终止)
进程执行完毕或出现错误,结束了。
可能原因:
程序主动运行结束(比如你关闭了 Word)
出现了非法操作(比如访问了非法地址)
被操作系统或用户强行终止
此时,系统会:
回收进程所占资源(内存、文件等)
将其从 PCB 移除
状态转换举个完整的例子:
假设你打开了记事本(Notepad):
New:系统创建进程结构(你刚点击)
Ready:记事本在排队等 CPU 调度
Running:获得 CPU,开始打开窗口
Waiting:你点击“打开文件” → 等待文件读取
Ready:文件读取好了,重新排队等 CPU
Running:读取完后显示内容
Terminated:你点击关闭,记事本退出
状态转换图解
进程有 5 种基本状态,但这些状态不是孤立的,它们之间是可以相互转换的,就像人的生活状态一样不断变化。
┌────────────┐
│ New │
└────┬───────┘
↓ (由操作系统调度)
┌────────────┐
│ Ready │◄────────┐
└────┬───────┘ │
↓ (被调度器选择) │
┌────────────┐ │
│ Running │ │
└────┬──┬────┘ │
│ │ │
(需要I/O) │ └───────┐ │
↓ │ │
┌──────────┐ │ │
│ Waiting │─────┘ │
└────┬─────┘(I/O完成) │
↓ │
┌────────────┐ │
│ Terminated │◄───────┘
└────────────┘
New → Ready:系统初始化完成
当你点击打开某个程序(比如记事本)时,系统:
创建 PCB(进程控制块)
分配内存
把它放到「就绪队列」
然后它进入「Ready」状态,准备运行。
Ready → Running:被 CPU 调度器选中
当轮到你这个进程获得 CPU 执行权限时:
调度器将它从「Ready」移到「Running」
正式进入执行阶段
Running → Waiting:等待某种资源
进程在运行中发现:
用户还没输入内容
文件还没读出来
网络数据还没到
就会主动“放弃”CPU,进入「等待状态」(等待 I/O 完成)
Waiting → Ready:I/O 事件完成,继续排队
当等待的事完成(如键盘按下、文件读取完):
操作系统通知这个进程「你可以继续了」
它进入「Ready」队列,准备下一轮执行
Running → Ready:被抢占或时间片耗尽
如果系统启用了「时间片轮转」调度策略:
每个进程最多运行一小段时间
到时间后会被系统“抢下来”,放回就绪队列
给下一个进程机会使用 CPU
(也可能被优先级更高的进程抢占)
Running → Terminated:任务完成或被终止
程序运行结束(自然退出)
程序发生错误(如除以 0)
用户强制关闭(比如你点了 X)
系统会释放资源,并从进程表中移除它。
