765 字
2 分钟
OS笔记(二):进程的状态与转换
OS笔记(二):进程的状态与转换
本文是操作系统笔记系列的第二篇,详细讲解进程在生命周期中的五种状态、状态之间的转换条件,以及进程的组织方式。
📚 目录
一、进程的五种状态
进程在其生命周期中会经历以下五种状态:
| 状态 | 英文 | 含义 |
|---|---|---|
| 创建态 | New | 进程正在被创建,操作系统分配资源、初始化PCB |
| 就绪态 | Ready | 已具备运行条件,但没有空闲CPU,暂时不能运行 |
| 运行态 | Running | 正在CPU上执行 |
| 阻塞态 | Blocked/Waiting | 因等待某事件(如I/O完成)而暂停运行 |
| 终止态 | Terminated | 进程执行完毕或被强制终止,系统回收资源 |
状态详解
创建态 → 就绪态
- 操作系统完成PCB初始化、分配内存等资源后,进程进入就绪队列
就绪态 → 运行态
- 进程被调度程序选中,获得CPU使用权
运行态 → 就绪态
- 时间片用完,或被更高优先级的进程抢占
运行态 → 阻塞态
- 进程主动请求某事件(如等待I/O、等待信号量)
阻塞态 → 就绪态
- 等待的事件发生(如I/O完成、收到信号)
运行态 → 终止态
- 进程执行完毕,或遇到致命错误,或被其他进程杀死
二、状态之间的转换
2.1 状态转换图

### 2.2 转换条件总结
| 转换 | 触发条件 | 主动/被动 ||------|----------|-----------|| 创建→就绪 | PCB初始化完成 | 被动(OS完成) || 就绪→运行 | 被调度程序选中 | 被动(OS调度) || 运行→就绪 | 时间片用完/被抢占 | 被动 || 运行→阻塞 | 进程主动请求(如I/O) | **主动** || 阻塞→就绪 | 等待的事件发生 | 被动 || 运行→终止 | 执行完毕/被杀死 | 主动或被动 |
> **重点**:只有 **运行→阻塞** 是进程主动的行为,其他都是被动的!
---
<a id="组织"></a>## 三、进程的组织方式
操作系统需要管理大量进程的PCB,常用以下两种组织方式:
### 3.1 链接方式
把同一状态的PCB组织成一个**链表**,操作系统持有指向各队列的指针。
3.2 索引方式
为每种状态建立一张索引表,表中存放指向PCB的指针。

---
<a id="linux"></a>## 四、Linux实战:观察进程状态
### 4.1 Linux进程状态
Linux中进程状态用字母表示:
| 状态码 | 含义 | 对应OS概念 ||--------|------|------------|| **R** | Running/Runnable | 运行态/就绪态 || **S** | Sleeping(可中断) | 阻塞态 || **D** | Disk Sleep(不可中断) | 阻塞态(等I/O) || **T** | Stopped | 暂停态 || **Z** | Zombie | 终止态(未回收) |
### 4.2 查看进程状态
```bash# 查看进程状态ps aux | head -5# USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND# root 1 0.0 0.1 169432 13200 ? Ss Jun04 0:05 /sbin/init
# STAT列含义:# S = sleeping (阻塞)# R = running (运行/就绪)# D = disk sleep (不可中断阻塞)# Z = zombie (僵尸)# s = session leader# + = foreground process4.3 观察状态转换
# 创建一个会阻塞的进程(等待用户输入)cat &
# 查看其状态(应该是 S = sleeping)ps -p $! -o pid,stat,cmd
# 终止它kill $!4.4 僵尸进程实验
# 创建一个僵尸进程python3 -c "import os, timepid = os.fork()if pid == 0: # 子进程立即退出 exit(0)else: # 父进程不回收子进程,变成僵尸 time.sleep(60)" &
# 查看僵尸进程(状态为 Z)ps aux | grep defunct4.5 查看进程状态变化
# 使用top实时观察进程状态top -p <PID>
# 使用strace跟踪系统调用strace -p <PID>五、本章小结
核心概念
| 概念 | 要点 |
|---|---|
| 五种状态 | 创建、就绪、运行、阻塞、终止 |
| 状态转换 | 就绪↔运行(调度)、运行→阻塞(主动)、阻塞→就绪(事件完成) |
| 进程组织 | 链接方式(链表)、索引方式(索引表) |
| Linux状态 | R(运行)、S(睡眠)、D(磁盘等待)、Z(僵尸)、T(暂停) |
考研/期末常见考点
- 五种状态的含义和转换条件
- 运行→阻塞是唯一主动行为
- 就绪态和阻塞态的区别(有没有CPU)
- 进程组织的两种方式
- Linux进程状态码的含义
思考题
- 为什么说”运行→阻塞”是进程的主动行为?
- 就绪态和阻塞态的本质区别是什么?
- 僵尸进程是怎么产生的?如何避免?
上一篇:OS笔记(一):进程与线程简介 下一篇:OS笔记(三):进程控制
分享
如果这篇文章对你有帮助,欢迎分享给更多人!
OS笔记(二):进程的状态与转换
https://emilia520.icu/posts/os-213进程的状态与转换/ 部分信息可能已经过时
相关文章 智能推荐
1
OS笔记(一):进程与线程简介
操作系统 深入理解操作系统中进程与线程的概念、组成、特征,以及它们在Linux系统中的实际表现
2
OS笔记(三):进程控制
操作系统 深入理解操作系统中原语的概念、进程的创建/终止/阻塞/唤醒/切换机制,以及Linux中的进程管理实践
3
OS笔记(六):调度的概念、层次
操作系统 深入理解操作系统中调度的三个层次、七状态模型,以及Linux进程调度机制
4
OS笔记(四):进程通信
操作系统 深入理解操作系统中进程间通信的三种方式:共享存储、消息传递、管道通信,以及Linux IPC实战
5
OS笔记(五):线程
操作系统 深入理解操作系统中线程的概念、实现方式、多线程模型,以及Linux线程管理实践








