Skip to content

线程(内核级与用户级)

考情分析

线程是进程管理的重要概念,408 真题中常以选择题形式考查线程与进程的区别、ULT 与 KLT 的特性。属于 🔥🔥 中高频考点。

一个浏览器需要同时渲染页面、下载文件、响应用户点击。如果每个任务都开一个进程,进程间通信和切换的成本太高了——线程就是为了在同一个进程内实现更轻量的并发。

为什么引入线程

进程的创建、撤销和切换都涉及资源的分配与回收,开销很大。为了减小并发执行的开销,引入了线程(Thread)——一种更轻量的执行单元。

引入线程后的分工:

概念职责
进程资源分配的基本单位(内存、文件等)
线程CPU 调度的基本单位

一个进程可以包含多个线程,这些线程共享进程的地址空间和资源,但各自有独立的栈、PC 和寄存器。

线程 vs 进程

比较维度进程线程
调度单位传统OS中是调度单位引入线程后,线程是调度单位
资源拥有拥有独立的地址空间和资源共享所属进程的资源
并发性进程间可并发同一进程内的线程也可并发
创建/切换开销大(涉及资源分配)小(共享地址空间)
通信需要 IPC 机制可直接读写共享变量
独立性相互独立同进程的线程共享资源,独立性弱

线程的属性

每个线程拥有的独立资源:

  • 线程 ID
  • 程序计数器 PC
  • 寄存器集合
  • (每个线程有自己的栈空间)

线程共享所属进程的资源:

  • 代码段
  • 数据段
  • 打开的文件
  • 堆内存
  • 全局变量

用户级线程 ULT

用户级线程(User-Level Thread)由用户空间的线程库管理,内核对线程的存在一无所知。就像公司内部的小组分工——HR 系统里只有一个"部门",部门内部谁干什么活,HR 不知道也不管。

优点缺点
线程切换不需要进入内核态,速度快一个线程阻塞 → 整个进程阻塞
可以在不支持线程的OS上实现无法利用多核CPU(内核只调度进程)
调度算法可由应用自定义

内核级线程 KLT

内核级线程(Kernel-Level Thread)由操作系统内核直接管理和调度。

优点缺点
一个线程阻塞不会导致整个进程阻塞线程切换需要进入内核态,开销较大
可以利用多核CPU并行执行创建和管理线程开销大于 ULT

内核级线程才是处理机调度的单位

只有内核级线程才能被操作系统调度到 CPU 上执行。用户级线程必须映射到内核级线程才能获得 CPU 时间。

多线程模型

模型映射关系特点
多对一多个 ULT → 1 个 KLT线程管理在用户空间,效率高;但一个阻塞全部阻塞
一对一1 个 ULT → 1 个 KLT并发性好,可利用多核;但创建线程开销大
多对多m 个 ULT → n 个 KLT(m≥n)兼顾两者优点,实现复杂

考研高频考点

  • 🔥🔥🔥 线程是 CPU 调度的基本单位,进程是资源分配的基本单位
  • 🔥🔥🔥 ULT vs KLT 的特性对比(尤其阻塞行为)
  • 🔥🔥 三种多线程模型的区别
  • 🔥🔥 线程共享哪些资源、独占哪些资源
  • 🔥 ULT 中一个线程阻塞导致整个进程阻塞的原因

有了进程和线程的概念,接下来看操作系统是如何通过原语来实际控制进程的创建、撤销和状态转换的。

真题练习

相关真题(8题)

2026Q25选择题2分

线程共享:同进程线程共享堆,各有独立栈

2023Q27选择题2分

状态转换:主动出让CPU(yield)使线程从执行态变为就绪态

2022Q28选择题2分

线程共享:同进程线程共享地址空间和文件描述符,不共享栈

2019Q23选择题2分

用户级线程:线程控制块由线程库维护,操作系统不感知

2018Q25选择题2分

并发执行:两个线程各执行3条指令对x加1,分析x=2的序列

2016Q30选择题2分

互斥执行:同一进程内共享变量x的写操作需互斥

2012Q31选择题2分

进程与线程:进程始终是资源分配单位,引入线程后线程是调度单位

2011Q25选择题2分

线程资源:代码段、文件、全局变量共享,栈指针各线程独有