首页/操作系统/02-process/进程与线程 🔗 在 Obsidian 中打开
操作系统 · 02-process

进程与线程

重要度 ★★ 进程线程上下文切换ULTKLT
速查
进程是资源分配的基本单位,线程是 CPU 调度的基本单位。进程 = 程序段 + 数据段 + PCB(进程存在的唯一标志)。线程共享进程地址空间,切换开销小;进程切换需切换地址空间、开销大。

速查

项目
进程资源分配的基本单位,由程序段、数据段、PCB 组成
线程CPU 调度的基本单位,轻量级进程,共享进程资源
PCB进程存在的唯一标志,常驻内存
切换开销进程切换 > 线程切换(涉及地址空间切换/TLB 刷新)

核心概念

进程是资源分配的基本单位,线程是CPU 调度的基本单位。进程由程序段、数据段和 PCB 三部分组成;PCB 是进程存在的唯一标志,常驻内存,操作系统通过 PCB 对进程进行管理和控制。

进程与线程的区别

  • 进程拥有独立的地址空间,线程共享所属进程的地址空间
  • 进程切换开销大(需切换地址空间),线程切换开销小
  • 进程间通信需要特殊机制(IPC),线程间可直接读写共享变量
  • 一个进程崩溃不影响其他进程,一个线程崩溃可能导致整个进程终止

线程的实现方式

  • 用户级线程(ULT):由库函数在用户空间管理,内核不可见
  • 内核级线程(KLT):由内核管理,是 CPU 调度的单位
  • 多对多模型:将 $n$ 个 ULT 映射到 $m$ 个 KLT 上

关键定义

概念定义
进程程序的一次执行过程,是系统进行资源分配和调度的独立单位
PCB进程控制块,描述进程基本情况和运行状态的数据结构
进程上下文进程执行时 CPU 中各寄存器值的集合,切换时需保存/恢复
线程CPU 调度的基本单位,轻量级进程,共享进程资源
模式切换CPU 从用户态↔内核态,不涉及进程切换
进程切换保存当前进程上下文、恢复新进程上下文,开销大于模式切换

常见考法

考点说明
PCB 的内容与作用识别哪些信息存于 PCB,PCB 是进程存在的标志
进程状态转换判断操作导致的状态变化,阻塞→就绪由外因触发
进程与线程对比从调度、拥有资源、并发性、开销等角度比较
ULT vs KLTULT 切换不需内核干预;KLT 需模式切换
进程切换步骤保存上下文→更新 PCB→入队→选新进程→更新内存结构→恢复上下文

易错点

注意
  • 进程是资源分配的基本单位,线程是CPU 调度的基本单位,易混淆
  • PCB 是进程存在的唯一标志,不是程序存在的标志
  • ULT 对内核不可见,一个 ULT 阻塞会导致整个进程阻塞
  • 模式切换 ≠ 进程切换:进程切换一定含模式切换,反之不一定
  • fork() 后父子进程并发执行,共享代码段但拥有独立数据段
  • 运行态→阻塞态是主动行为,阻塞态→就绪态是被动行为

核心结论

必背
  1. 进程切换开销远大于线程切换(地址空间切换、TLB 刷新、Cache 失效)
  2. ULT 切换快于 KLT,但无法利用多核并行
  3. 引入线程后,进程成为资源分配容器,线程成为实际执行实体
  4. 同进程内线程共享:代码段、数据段、打开的文件、信号处理;不共享:线程 ID、寄存器上下文、栈、优先级
  5. 进程控制原语:创建、阻塞、唤醒、终止、挂起、激活

记忆卡片

进程和线程分别是哪种资源的基本单位?
进程是资源分配基本单位,线程是CPU 调度基本单位。
PCB 的作用?
进程存在的唯一标志,含标识符、处理机状态、调度信息、资源清单。
ULT 与 KLT 的核心区别?
ULT 用户空间管理、内核不可见(ULT 阻塞→整个进程阻塞);KLT 内核管理、可多核并行。
进程切换与模式切换区别?
模式切换是用户态↔内核态,不涉及进程切换;进程切换一定含模式切换,还需切换地址空间。
运行态→阻塞态是主动还是被动?
主动(进程自己调阻塞原语);阻塞→就绪是被动(外因如 I/O 完成中断)。

交互动画 · 进程切换 vs 线程切换

进程 A(含线程 T1、T2、T3,共享地址空间) T1 T2 T3 共享:代码段 / 数据段 / 打开的文件 进程 B(独立地址空间) B-T1 B-T2 CPUT1
点击「线程切换」看同进程内轻量切换;「进程切换」看跨进程重型切换
线程切换不切换地址空间(开销小);进程切换需切换地址空间、刷新 TLB(开销大)

相关知识点

deadlock process-synchronization-semaphore

↑ 以上为站内 HTML 相对链接(纯网页可浏览);本页右上「在 Obsidian 中打开」跳回源笔记。