mobile wallpaper 1mobile wallpaper 2mobile wallpaper 3mobile wallpaper 4mobile wallpaper 5
765 字
2 分钟
OS笔记(二):进程的状态与转换
2026-06-05

OS笔记(二):进程的状态与转换#

本文是操作系统笔记系列的第二篇,详细讲解进程在生命周期中的五种状态、状态之间的转换条件,以及进程的组织方式。


📚 目录#


一、进程的五种状态#

进程在其生命周期中会经历以下五种状态:

状态英文含义
创建态New进程正在被创建,操作系统分配资源、初始化PCB
就绪态Ready已具备运行条件,但没有空闲CPU,暂时不能运行
运行态Running正在CPU上执行
阻塞态Blocked/Waiting因等待某事件(如I/O完成)而暂停运行
终止态Terminated进程执行完毕或被强制终止,系统回收资源

状态详解#

创建态 → 就绪态

  • 操作系统完成PCB初始化、分配内存等资源后,进程进入就绪队列

就绪态 → 运行态

  • 进程被调度程序选中,获得CPU使用权

运行态 → 就绪态

  • 时间片用完,或被更高优先级的进程抢占

运行态 → 阻塞态

  • 进程主动请求某事件(如等待I/O、等待信号量)

阻塞态 → 就绪态

  • 等待的事件发生(如I/O完成、收到信号)

运行态 → 终止态

  • 进程执行完毕,或遇到致命错误,或被其他进程杀死

二、状态之间的转换#

2.1 状态转换图#

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

链接方式

3.2 索引方式#

为每种状态建立一张索引表,表中存放指向PCB的指针。

![索引方式](/assets/os-notes/Pasted%20image%2020260603220053.webp)
---
<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 process

4.3 观察状态转换#

# 创建一个会阻塞的进程(等待用户输入)
cat &
# 查看其状态(应该是 S = sleeping)
ps -p $! -o pid,stat,cmd
# 终止它
kill $!

4.4 僵尸进程实验#

# 创建一个僵尸进程
python3 -c "
import os, time
pid = os.fork()
if pid == 0:
# 子进程立即退出
exit(0)
else:
# 父进程不回收子进程,变成僵尸
time.sleep(60)
" &
# 查看僵尸进程(状态为 Z)
ps aux | grep defunct

4.5 查看进程状态变化#

# 使用top实时观察进程状态
top -p <PID>
# 使用strace跟踪系统调用
strace -p <PID>

五、本章小结#

核心概念#

概念要点
五种状态创建、就绪、运行、阻塞、终止
状态转换就绪↔运行(调度)、运行→阻塞(主动)、阻塞→就绪(事件完成)
进程组织链接方式(链表)、索引方式(索引表)
Linux状态R(运行)、S(睡眠)、D(磁盘等待)、Z(僵尸)、T(暂停)

考研/期末常见考点#

  1. 五种状态的含义和转换条件
  2. 运行→阻塞是唯一主动行为
  3. 就绪态和阻塞态的区别(有没有CPU)
  4. 进程组织的两种方式
  5. Linux进程状态码的含义

思考题#

  1. 为什么说”运行→阻塞”是进程的主动行为?
  2. 就绪态和阻塞态的本质区别是什么?
  3. 僵尸进程是怎么产生的?如何避免?

上一篇OS笔记(一):进程与线程简介 下一篇OS笔记(三):进程控制

分享

如果这篇文章对你有帮助,欢迎分享给更多人!

OS笔记(二):进程的状态与转换
https://emilia520.icu/posts/os-213进程的状态与转换/
作者
火花花
发布于
2026-06-05
许可协议
CC BY-NC-SA 4.0

部分信息可能已经过时

目录