第四章 多线程
第 4章 多线程
? 4.1 线程的概念
? 4.2 线程的状态和线程管理
? 4.3 多线程的实现
第四章 多线程
4.1 线程的概念
? 4.1.1 线程的引入
? 4.1.2 线程的概念
第四章 多线程
4.1.1 线程的引入
? 进程引入的目的,
? 使得多个程序并发执行,以改善资源利用率、
提高系统的吞吐量。
? 进程机制存在的问题
? 进程是资源的拥有者,在进程的创建、撤消和
切换中,系统必须为之付出较大的时空开销。
? 填写相关表格( PCB表,各种队列,地址映射、
I/O文件表格)
? 地址空间转换
? 两次模式开关(用户模式 —— 内核模式 —— 用户模
式)
第四章 多线程
4.1.1 线程的引入
? 问题的原因,
? 进程是被调度的单元,同时又拥有资源。
? 解决办法:引入线程概念
? 线程作为 CPU调度单位,而进程只作为其他
资源分配单位。
? 线程只拥有必不可少的资源,如:线程状态、寄存
器上下文和栈
? 线程同样具有就绪、阻塞和执行三种基本状态
第四章 多线程
4.1.2 线程的概念
? 定义( Thread)
? 线程是进程内相对独立的、可调度的执行单元
? 性质
? 线程是进程内一个相对独立的可执行单元
? 线程是操作系统的基本调度单元
? 每个进程在创建时,至少需要为它创建一个线程
? 线程可以创建其它线程
? 同一进程的多个线程共享这个进程的资源
? 线程之间需要通信和同步机制
? 线程有生命周期,在这个周期中有状态变化
第四章 多线程
4.1.2 线程的概念
? 优点
? 创建和撤销线程的开销比进程小
? 线程之间开关的开销比进程小
? 线程通信不需要内核参与,简单有效
? 方便和简化了用户的程序设计
第四章 多线程
4,2 线程的状态和线程管理
? 线程的状态
? 就绪状态:线程已经具备执行条件,等待调
度程序分给 CPU;
? 运行状态:线程正在 CPU上运行;
? 等待状态:线程正在等待某事件发生
第四章 多线程
Windows 2000线程状态
第四章 多线程
R e sou r c e
A vail ab le
U n b loc k /Resu me
R e sou r c e A vail ab le
U n b loc k
R e sou r c e N ot A vail ab le
Bloc k /
S u sp e n d
Ter minate
S w itc h
P ic k to
Run
P r e e mpt e d
Trans itio n Waiti n g Ter minated
N ot R unn able
R unn able
Ready
St and by
Run ni ng
Windows NT的线程状态
第四章 多线程
4,2 线程的状态和线程管理
? 线程的描述
? 每个线程由一个相应的 TCB,其中的信息包括
? 线程状态
? 线程不运行时,保存的现场信息 (PC,PSW,GR、
SI)
? 一个执行堆栈
? 存放局部变量的主存区
第四章 多线程
4,2 线程的状态和线程管理
? 线程的管理
? 通过操作系统提供的线程控制原语管理和控制
线程的状态
? 创建线程原语
? 撤销线程原语
? 阻塞线程原语
? 挂起线程原语
? 解除挂起原语
? 改变优先数原语
第四章 多线程
4,3 多线程的实现
? 基于线程的观点把所有操作系统分类(也
可以看作不同操作系统中进程和线程之间
的关系)
? 单进程单线程
? 多进程单线程
? 单进程多线程
? 多进程多线程
第四章 多线程
on e p roces s
on e t hread
mul ti ple proce sses
one thread per process
on e p roces s
m ul t ip le t hread s
mul ti ple proce sses
mul ti ple t hreads per process
进程与线程的关系
第四章 多线程
4,3 多线程的实现
? 线程的分类
? 进程:与内核相关,无论什么进程,其切换依
赖内核进行调度。
? 线程,
? 内核支持线程 (KLT— Kernel Level Thread)。
? 用户级线程 (ULT— User Level Thread)。
第四章 多线程
用户级线程与内核级线程图示
Kernel Space
P
Thread
Library
User Space
P
User Space
Kernel Space
Pure User
Level
Pure Kernel
Level
第四章 多线程
4,3 多线程的实现
? ULT
? 不依赖于操作系统核心,应用进程利用线程库提供创
建、同步、调度和管理线程的函数来控制用户线程。
如:数据库系统 informix,图形处理 Aldus PageMaker。
? 调度由应用软件内部进行,通常采用非抢先式和更简
单的规则,也无需用户态 /核心态切换,所以速度特别
快。
? 一个线程发起系统调用而阻塞,则整个进程在等待。
时间片分配给进程,多线程则每个线程就慢。
? 操作系统内核完全不知道线程的存在
第四章 多线程
4,3 多线程的实现
? ULT优点
? 一个进程的所有用户线程都在同一个地址空间
中,不需要模式转换,线程之间的开关比内核
线程的开关开销小
? 线程库的线程调度算法与操作系统调度算法无
关,可以灵活的选择
? 不需要操作系统内核支持用户线程,适用于任
何操作系统
第四章 多线程
4,3 多线程的实现
? ULT缺点
? 一个运行进程提起的访管中断,会使操作系统
内核阻塞整个进程,进程中其它运行线程也会
被阻塞
? 可能会引起饥饿问题
? 单处理器上的用户多线程机制没有太大的意义
第四章 多线程
4,3 多线程的实现
? KLT
? 依赖于操作系统核心,由内核的内部需求进行
创建和撤销的线程
? Windows NT和 OS/2支持内核线程;
? 内核维护进程和线程的上下文信息;
? 线程切换由内核完成;
第四章 多线程
4,3 多线程的实现
? 优点
? 内核可以同时调度多个线程在多个处理器上运

? 一个线程发起系统调用而阻塞,不会影响其他
线程的运行
? 时间片分配给线程,所以多线程的进程获得更
多 CPU时间
? 缺点
? 线程开关开销大
第四章 多线程
4,3 多线程的实现
? ULT与 KLT结合的方法 —— 基于多线程的操
作系统
? 内核支持多线程的建立、调度和管理
? 系统提供线程库,允许用户应用程序建立、调
度和管理用户级线程
? 所有用户级线程都是用户线程
? 内核级线程可能是内核线程,也可以是用户线

第四章 多线程
内核级线程与用户级线程混合方式
User Space
Kernel Space
P P
Combined
第四章 多线程
4,3 多线程的实现
? 线程库
? 操作系统提供的一个多线程应用程序的开发和运
行环境
? 一个线程库至少要提供以下功能
? 建立线程
? 撤销线程
? 阻塞线程
? 挂起线程
? 恢复线程
? 调度线程
? 线程通信
? 线程同步
第四章 多线程
NT线程的有关 API
? CreateThread()函数在调用进程的地址空间上
创建一个线程,以执行指定的函数;返回值为
所创建线程的句柄。
? ExitThread()函数用于结束本线程。
? SuspendThread()函数用于挂起指定的线程。
? ResumeThread()函数递减指定线程的挂起计
数,挂起计数为 0时,线程恢复执行。
第四章 多线程
课后思考题
? Page 78
? 4.1
? 4.2
? 4.3
? 本周三讨论