操作系统原理第四章 线程

本科生操作系统原理学习记录
学习记录全家桶

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 用户线程

用户线程:由用户线程库进程管理的线程

  • ​ 内核看不到用户线程
  • ​ 用户线程的创建和调度在用户空间中,不需要内核的干预
  • ​ 应用于传统的只支持进程的操作系统

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hgF7kcDf-1641211985938)(E:\文档和PPT\大三课程学习\操作系统\Pictures\第四章\用户线程.png)]

4.2.2 内核线程

内核线程:内核进行管理的线程

  • 需要内核支持
  • 由内核完成线程调度
  • 由内核进行创建和撤销

例子:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yvU40sEz-1641211985941)(E:\文档和PPT\大三课程学习\操作系统\Pictures\第四章\内核线程.png)]

4.2.3 多线程模型

多对一模型

  • 不支持内核线程的操作系统:内核只有进程

  • 内核只看到一个进程:多个线程不能并行运行在多个处理器上

  • 进程中的用户线程由进程自己管理:

    ​ 进程内线程切换不会导致进程切换

    ​ 一个线程的系统调用会导致整个进程阻塞

一对一模型

  • 用于支持线程的操作系统:

    ​ 用户线程映射到内核线程

    ​ 操作系统管理这些线程

  • 并发性好:多个线程可并行运行在多个处理器上

  • 内核开销大

Windows普遍采用这种多线程模型

多对多模型

多个用户线程映射为相等或更小数目的内核线程 <=

  • 并发性和效率兼顾
  • 增加复杂度

两级模型

类似于 M :M

4.3 线程库

为程序员提供API来创建和管理线程

两种模式:

用户库 (用户线程)

内核库 (内核线程)

猜你喜欢

转载自blog.csdn.net/weixin_45788387/article/details/122291826