本科生操作系统原理学习记录
学习记录全家桶
第四章 线程
4.1 什么是线程
4.1.1 引入原因
性能:
操作进程系统开销大
Unix的轻型进程(fork)
应用:
进程代码并发执行的需求
例子:PPT
编辑(输入、拼写检查、存盘)
硬件:
多核处理器
加速进程的运行
Thread 线程 在Windows里面 这个叫法
Process 进程
4.1.2 线程
线程:
可在CPU上运行的基本执行单位
进程内的一个代码片段可以被创建成一个线程
进程依旧是资源分配的基本单位
4.1.3 进程和线程
进程 | 线程 | |
---|---|---|
代码 | 进程包含线程 | 线程是进程中的一段代码 |
资源 | 进程是资源分配的基本单位 | 线程不拥有资源,共享使用进程的资源 |
调度 | 同一个进程中的线程切换不会引起进程切换 | 线程是基本调度单位 |
切换 | 重量级上下文切换,代价大 | 轻量级切换,代价小 |
生命期 | 今年初撤销会导致它的所有线程被销毁 | 线程撤销不会影响进程 |
线程依附于进程存在
如果是两个不同的进程的线程之间通信,则进程也要切换
4.1.4 线程结构
代码和数据:来自进程
各类资源:来自进程
线程控制块:TCB
Thread Control Block
每个线程都有自己的 ID ,线程 ID
4.1.5 线程优点
响应度高:
线程创建开销小
例子:web服务器
资源共享:进程中的线程可以共享进程资源
经济性:
线程创建、上下文切换比进程块
Solaris
:创建线程比进程快30倍,线程切换比进程切换快5倍
MP体系结构的运用:一个进程的线程在不同处理器上并行运行
4.1.7 Linux线程
通过 clone() 系统调用创建线程,但是clone函数需要传入参数
用术语 “任务” task ,表示进程和线程,一般不用 “线程”
用户线程:PThreads
线程库
多线程矩阵运算,操作系统有的支持多线程,有的不支持多线程操作
4.2 多线程模型
4.2.1 用户线程
用户线程:由用户线程库进程管理的线程
- 内核看不到用户线程
- 用户线程的创建和调度在用户空间中,不需要内核的干预
- 应用于传统的只支持进程的操作系统
4.2.2 内核线程
内核线程:内核进行管理的线程
- 需要内核支持
- 由内核完成线程调度
- 由内核进行创建和撤销
例子:
4.2.3 多线程模型
多对一模型
-
不支持内核线程的操作系统:内核只有进程
-
内核只看到一个进程:多个线程不能并行运行在多个处理器上
-
进程中的用户线程由进程自己管理:
进程内线程切换不会导致进程切换
一个线程的系统调用会导致整个进程阻塞
一对一模型
-
用于支持线程的操作系统:
用户线程映射到内核线程
操作系统管理这些线程
-
并发性好:多个线程可并行运行在多个处理器上
-
内核开销大
Windows普遍采用这种多线程模型
多对多模型
多个用户线程映射为相等或更小数目的内核线程 <=
- 并发性和效率兼顾
- 增加复杂度
两级模型
类似于 M :M
4.3 线程库
为程序员提供API来创建和管理线程
两种模式:
用户库 (用户线程)
内核库 (内核线程)