第 2 章 · 进程与线程

进程 = 运行中的程序,资源分配单位;线程 = 进程内执行流,CPU 调度单位。

2.1 进程概念与状态转换

进程 = 程序 + 数据 + PCB。同一程序可对应多个进程(两个终端跑同一个 bash)。

五状态模型(三态 + 新建/终止):

        创建        就绪 ──调度──→ 运行 ──完成──→ 终止
        new   →    ready ←──┐     running       exit
                       │    │ 时间片用完/被抢占
                       │    └──────→ 运行
                     I/O完成          │
                       │             │ 等待 I/O / 事件
                      等待 ←───────────┘
                     waiting
  • 就绪 → 运行:被调度选中,分到 CPU。
  • 运行 → 就绪:时间片用完(抢占)或被更高优先级抢占。
  • 运行 → 等待:发起 I/O 或等事件,主动让出 CPU。
  • 等待 → 就绪:I/O 完成,被唤醒。

2.2 PCB

PCB 是进程存在的唯一标志。典型字段:

字段内容
标识符PID、父进程 PPID
处理机状态寄存器现场(上下文,切换时保存)
调度信息优先级、状态、时间片
内存信息代码/数据段基址、页表指针
资源清单打开的文件、信号量等
I/O 状态分配的设备、缓冲区

上下文切换:保存当前现场到其 PCB,从新进程 PCB 恢复现场——纯开销,无用户价值。

2.3 线程

线程共享进程的代码段、数据段、打开的文件;独享栈、寄存器、PC。

2.4 进程 vs 线程

维度进程线程
资源拥有独立资源共享进程资源
调度资源分配单位CPU 调度单位
独立性相互隔离,一进程崩溃不影响他人共享内存,一个崩可能全崩
开销创建/切换大(分配 PCB、页表等)创建/切换小(只换栈和寄存器)
通信需 IPC(管道、消息队列、共享内存)直接读写共享变量

2.5 用户级 vs 内核级线程

用户级线程内核级线程
管理者用户态线程库内核
内核感知不可见,内核只看到一个进程可见,每个线程有 TCB
切换开销小(无陷入)大(需系统调用/陷入)
阻塞一个线程阻塞,整个进程阻塞一个线程阻塞,其他可继续
多核无法并行到多核可真正并行
代表绿色线程Linux pthread

三种映射:多对一(多 ULT 对 1 KLT)、一对一(Linux 主流)、多对多(折中)。