『操作系统』 进程的描述与控制 Part4 线程
『操作系统』 进程的描述与控制 Part4 线程
@[toc]
2.8 线程及其实现
1.线程的基本概念 2.线程的实现及控制
引入进程 的目的:
使多个程序能并发执行,提高资源利用率和系统吞吐量。
引入线程 的目的:
应用的需要/ 开销的考虑/ 性能的提升
开销的考虑
(1)进程相关的操作:
- 创建进程
- 撤消进程
- 进程通信
- 进程切换
→ 时间/空间开销大,限制了并发度的提高。
(2)线程的开销小
- 创建一个新线程花费时间少(撤销亦如此)
- 两个线程切换花费时间少
- 线程之间相互通信无须调用内核(同一进程内的线程共享内存和文件)
性能的提升
- 多个线程,有的计算,有的 I/O,进一步提高并发度。
- 充分利用多处理器的优势。
1.线程的概念
在同一进程增加了多个执行序列(线程)
(1)线程:进程中的一个运行实体,是 CPU 的调度单位,有时将线程称为轻量级进程
进程与线程
- 进程是资源分配单位
- 线程是 CPU 执行单位
多线程优点 - 切换速度快(地址空间不变)
- 系统开销小
- 通讯容易(共享数据空间)
(2)线程模型
每个线程拥有自己的栈:局部变量、返回地址
(3)线程控制块 - TCB(Thread control block)
标志线程存在的数据结构, 其中包含对线程管理需要的全部信息. - 内容
线程标识、线程状态
调度参数、现场(通用寄存器,PC,SP) - 存放位置
用户级线程:目态空间
核心级线程:管态空间
(4)线程的属性:并发性、共享性、动态性
- 轻型实体:只有一点必不可少的、能保证独立运行的资源
- CPU 调度的基本单位
- 可并发执行
- 共享进程资源
(5)线程的优点
- 快速切换;
- 易于通信;
- 并行度高;
- 节省内存;
- 减少管理开销。
(6)线程的基本状态
- 执行状态
- 就绪状态
- 阻塞状态
(7)线程的创建和终止
线程的创建
利用线程创建函数(或系统调用);
创建成功后,返回一个线程标识符。线程的终止方式
自愿退出
被其它线程强行终止
(8)线程与进程的比较
- 线程:作为 CPU 调度单位。
线程只拥有必不可少的资源,如:线程状态、寄存器上下文和栈
同样具有就绪、阻塞和执行三种基本状态 - 进程:其它资源分配单位(存储器、文件、IO 等)。
- 调度:线程作为 CPU 调度的基本单位,而进程只作为其它资源分配单位。
- 并发性:进程之间可以并发,且一个进程的多个线程之间亦可并发。
- 拥有资源:进程间相互独立,同一进程的各线程间共享资源。某进程内的线程在其它进程不可见。
- 系统开销:线程上下文切换比进程上下文切换要快得多。
练习题
1. 线程机制中,一个进程可以对应多个线程,一个线程也可以对应若干个进程。
解答: 错!
一个进程可以拥有若干个线程,线程从属于该进程,同一进程内所有线程共享该进程的地址空间,而不同进程之间的地址空间是完全独立的,如果一个线程可以对应若干个进程,那么也就意味着不同进程之间的地址空间可以共享,这显然是不合适的。
2.线程的实现及控制
- 用户级线程——User-level thread
- 核心级线程——Kernel-level thread
- 混合线程——Hybrid approach
(1)用户级线程和内核支持线程
- 内核支持线程,它们是依赖于内核的,即无论是用户进程中的线程,还是系统进程中的线程,它们的创建、撤消、切换都由内核实现。
- 用户级线程,对于这种线程的创建、撤消、和切换,都不用系统调用来实现。内核并不知道用户级线程的存在。
(2)核心级线程
- 所有线程管理由核心完成
- 没有线程库,但核心提供 API
- 核心维护进程和线程的上下文
- 线程之间的切换需要核心支持
- 以线程为基础进行调度
当一个线程想去创建一个新线程或撤消已存在的线程时,它发出一个内核调用,完成创建和回收工作。
实现方法: - 基于系统调用
- 创建、撤销、状态转换由操作系统完成
优点:
- 对多处理器,核心可以同时调度同一进程的多个线程
- 某线程阻塞,其它线程仍可执行
缺点:
- 应用程序线程在用户态运行,而线程调度和管理在内核实现,在同一进程中,控制权从一个线程传送到另一个线程时需要用户态-内核态-用户态的模式切换,系统开销较大。
- 调度算法不能灵活控制
(3)用户级线程
运行时系统:用于管理和控制线程的函数集合。
(4)线程库
提供线程运行管理系统:
- 创建、撤消线程
- 在线程之间传递消息和数据
- 调度线程执行
- 保护和恢复线程上下文
用户级的线程库能在不支持线程的操作系统中实现线程
- 切换效率高
- 允许每一个进程有自已定制的调度算法
实现方法:
- 基于 library 函数,系统不可见
- 线程创建、撤销、状态转换在目态完成
- TCB 在用户空间,每个进程一个系统栈
优点:
- 不依赖于操作系统,调度灵活
- 切换无须从目态到管态,速度快
- ULT 可运行在任何操作系统上(只需要线程库),可以在一个不支持线程的 OS 上实现
缺点:
- 核心只将处理器分配给进程,在多处理机中同一进程中多个线程不能真正并行
- 一个线程进入系统受阻,进程中其它线程不能执行
例题
1. 设进程 A 拥有 1 个用户级线程,进程 B 拥有 100 个用户级线程,则在系统调度时各占用几个时间片?
答:1 个
2. 设进程 A 拥有 1 个内核级线程,进程 B 拥有 100 个内核级线程,则在系统调度时各占用几个时间片?
答:A:1 个;B:100 个
用户级线程与核心级线程的比较
(5)混合线程
- 在混合式线程系统中,内核支持 KLT 多线程的建立、调度和管理;
- 同时,也提供线程库,允许用户应用程序建立、调度和管理 ULT;
- 一个应用程序的多个 ULT 映射成一些 KLT,程序员可按应用需要和机器配置调整 KLT 数目,以达到较好效果;
- 混合式中,一个应用中的多个线程能同时在多处理器上并行运行,且阻塞一个线程时并不需要封锁整个进程。如果设计得当,混合式多线程机制能够结合了两者优点,舍去缺点。
练习题
1. 在以下描述中,(C)并不是多线程系统的特长。
A. 利用线程并行地执行矩阵的乘法运算
B. Web 服务器利用线程响应 HTTP 请求
==C. 键盘驱动程序为每一个正在运行的应用配备一个线程,用以响应该应用的键盘输入==
D. 基于 GUI 的调试程序用不同的线程分别处理用户输入、计算和跟踪等操作
2. 同一进程中的多个线程有哪些成分是共用的,哪些成分是私用的?
答: 线程的公有成分包括:
代码区、数据区、动态堆空间。
线程的私有成分包括:
线程控制块;
一个执行栈;
运行时动态分给线程的寄存器。
3. [2012 考研试题 31]下列关于进程和线程的叙述中,正确的是(A)
==A.不管系统是否支持线程,进程都是资源分配的基本单位==
B.线程是资源分配的基本单位,进程是调度的基本单位
C.系统级线程和用户级线程的切换都需要内核的支持
D.同一进程中的各个线程拥有各自不同的地址空间
4. 在支持多线程的系统中,进程 P 创建的若干线程不嗯呢该共享的事(D)
A.进程的代码段
B.进程 P 中打开的文件
C.进程 P 的全局变量
==D.进程 P 中某线程的栈指针==
5. 下列对线程的描述中,(B)是错误的。
A.不同的线程可执行相同的程序
==B.线程是资源分配单位==
C.线程是调度和执行单位
D.同一进程中的线程可共享该进程的主存空间
6. 以下说法中哪个是正确的?(C)
A.线程是进程中可独立执行的子任务,一个进程可以包含一个或多个线程,一个线程可以属于一个或多个进程。
B.线程又称为轻型进程,因为线程都比进程小。
==C.多线程技术具有明显的优越性,如速度快、通信简便、并行性高等。==
D.由于线程不作为资源分配单位,线程之间可以无约束地并行执行。
**7.**进程与线程的根本区别是(C)
A.进程要占用一个进程控制块,开销较大,而线程无此开销
B.进程会增加死锁的机会,而线程有效避免了这一问题
==C. 进程是资源分配单位,而线程是调度和执行的单位==
D. 进程是调度和执行的单位,而线程是资源分配单位
8. 用户级线程执行时,同一进程不同线程的切换不需要内核支持。
答: 正确
9. 在支持线程的操作系统中,同一个进程中的各个线程共享该进程的用户栈。
答: 错误