目录
1、进程的引入
进程切换
- 上下文涉及内容多,开销大,“笨重” PCB+程序
- 系统环境:地址空间,系统栈,打开文件表
相关进程之间耦合关系差
解决方案
- Multi-threading
- 同一进程中包含多个线程
- 上下文只涉及寄存器和用户栈,切换速度快
- 相关线程之间通讯方便、快捷
2、线程的概念
线程,又称为轻进程(light weight process,LEP),是进程中一个相对独立的执行流。
进程 vs.线程
- 进程是资源分配单位
- 线程是执行单位
多线程优点
- 切换速度快(地址空间不变)(light weighted)
- 系统开销小
- 通讯容易(共享数据空间)
3、线程的结构
3、线程控制块
线程控制块 TCB(Thread control block) 标志线程存在的数据结构, 其中包含对线程管理需要的全部信息。
与进程相似,线程也是并发执行的,即时断时续的。
内容:线程标识 、线程状态 、调度参数 、现场(通用寄存器,PC,SP) 、链接指针
存放位置
- 用户级线程:目态空间(运行系统)
- 核心级线程:系统空间
5、线程的实现
(1)用户级别线程
实现方法:
- 基于library函数,系统不可见
- 线程创建、撤销、状态转换在目态完成
- TCB在用户空间,每个进程一个系统栈
优点: 不依赖于操作系统,调度灵活
同一进程中多线程切换速度快(不需进入操作系统)
缺点: 同一进程中多个线程不能真正并行
一个线程进入系统受阻,进程中其它线程不能执行
对于用户级别线程,
若同一进程中的多个线程中至少有一个处于运行态,则该进程的状态为运行态;
若同一进程的多个线程均不处在运行态,但至少有一个线程处于就绪态,则该进程处于就绪态;
若同意进程的多个线程均处于等待状态,则该进程处于等待状态。
(2)核心级别线程
实现方法:
- 基于系统调用
- 创建、撤销、状态转换由操作系统完成
优点: 同一进程内多线程可以并行执行
一线程进入核心等待,其它线程仍可执行
缺点: 系统开销大,同一进程内多线程切换速度慢
调度算法不能灵活控制
(3)混合线程
Solaris例子
User level thread:
- 由Lib程序支持(创建,调度)
Light weighted process(LWP):
- 由Lib程序支持
- 每个task至少一个LWP
- 用戶级别线程与LWP可以多对多
- LWP对操作系统可见
- 只有与LWP相联系的用户线程向前推进
Kernel level thread:
- 由kernel 支持
- 每个LWP与唯一一个核心线程对应 核心线程可与CPU多对多,可对一
6、线程的应用
内在的多控制流,需要共享数据 :生产-消费问题
多线程优于多进程 快100倍!
提高处理机与设备的并行性
多处理机环境:提高处理机利用率,加快进程推进速度