【操作系统】进程管理——线程管理(个人笔记)

学习日期:2024.7.2

内容摘要:线程的概念、存在的意义、线程的属性,线程的实现方式,线程的状态与组织。


线程的概念

拿QQ来说,QQ既可以打视频电话,也可以在这同时进行文字聊天或传送文件,进程是程序的一次执行。但这些功能显然不可能是一个程序顺序处理一次就能实现的。

有的进程需要“同时”做很多事,而传统的进程只能串行地执行一系列程序,所以引入了线程来增加并发度。

传统的进程机制中,进程是程序执行流的最小单位,但在引入线程之后,线程成为了最小单位

线程是一个基本的CPU执行单元,是程序执行流的最小单位                                                                        在引入线程后,不仅是进程之间可以并发,进程内的各个线程之间也可以并发,进一步提升了系统的并发度,使得一个进程内可以同时处理更多的任务。(如QQ视频、文字聊天、文件传输等)而进程只作为除CPU之外的系统资源的分配单元。(如打印机、内存地址空间等资源都是以进程为单元分配)

传统的进程间并发,需要切换进程的运行环境,系统开销很大,但如果是同一进程的线程切换,则不需要切换进程环境,系统开销较小。

线程的属性

线程的实现方式

用户级线程(User-Level Thread,ULT)

历史背景:早期的操作系统(如:早期Unix)只支持进程,不支持线程。当时的“线程”是由线程库实现的。

很多编程语言提供了强大的线程库,程序员可以利用线程库实现线程的创建、销毁、调度等功能,操作系统事实上只“看得到”进程

1.线程的管理工作谁来完成?

用户级线程的管理本质上是由线程库负责的,并不是由操作系统负责的。(这也是“用户级线程”名字的由来)

2.线程切换是否要CPU变态?

线程切换并不需要请求操作系统的服务,也是由线程库管理的,在用户态下即可完成,不需要CPU切换到核心态。

优点:用户级线程的切换在用户空间即可完成,不需要切换到核心态,线程管理的系统开销小,效率高。

缺点:当某一个用户级线程被阻塞后,进程中其它的线程全部会被阻塞(进程进入阻塞态了),并发度并不高。同时多个线程不可在多核处理机上运行。(此时对操作系统来说,CPU分配的最小单位依然是进程)

内核级线程(Kernel-Level Thread,KLT)

由操作系统支持的线程,大多数现代操作系统都实现了内核级线程,如Windows,Linux等。

操作系统会为每个内核级线程建立相应的TCB(Thread Control Block,线程控制块),通过TCB对线程进行管理(类似PCB)。“内核级线程”就是“操作系统能看得到的线程”

以一对一模型为例:

1.线程的管理工作谁来完成?

内核级线程的管理工作由操作系统内核完成。

2.线程切换是否要CPU变态?

线程的调度、切换等工作都由内核负责,因此内核级线程的切换必然需要CPU在核心态下才能完成。

优点:当一个线程被阻塞后,别的线程还能继续执行,并发能力强。多线程可在多核处理机上并发执行。

缺点:一个用户进程会占用多个内核级线程,线程切换由操作系统内核完成,需要切换到核心态,因此线程管理的成本高,开销大。

多线程模型

支持内核级线程的系统中,根据用户级线程和内核级线程的映射关系,可以划分为几种多线程模型。

一对一模型

一个用户级线程映射到一个内核级线程,每个用户进程有与用户级线程同数量的内核级线程。

优点:同“内核级线程”部分的介绍,当一个线程被阻塞后,别的线程还能继续执行,并发能力强。多线程可在多核处理机上并发执行。

缺点:同“内核级线程”部分的介绍,一个用户进程会占用多个内核级线程,线程切换由操作系统内核完成,需要切换到核心态,因此线程管理的成本高,开销大。

多对一模型

多个用户级线程映射到一个内核级线程。且一个进程只被分配一个内核级线程。

本质上退化成为了用户级线程的实现方式,虽然操作系统“看得见”线程,但只看得见内核级的线程,又因为每个进程只被分配一个内核级线程,所以本质上还是ULT的线程实现方式。

对比用户级线程实现方式,事实上就是在线程库和进程之间增加了一个“内核级线程”作为处理机分配的单位而已。

优缺点同用户级线程的优缺点。

多对多模型

n个用户级线程映射到m个内核级线程,且n≥m,每个用户进程对应m个内核级进程。

克服了多对一模型并发度不高的缺点(一个阻塞全体阻塞),又克服了一对一模型中一个用户进程占用太多内核级线程,开销太大的缺点(n≥m,相对一对一来说能减少内核级线程数量)。

可以这么理解:

用户级线程是“代码逻辑”的载体。

内核级线程是“运行机会”的载体。(“内核级线程”才是处理机分配的单位

一段“代码逻辑”只有获得了“运行机会”才能被CPU执行。

内核级线程中可以运行任意一个有映射关系的用户级线程代码,只有所有的内核级线程中正在运行的代码逻辑都被阻塞时,我们才说这个进程进入了阻塞状态。(进程全部的线程都进入了阻塞状态)

线程的状态与组织

线程有运行、阻塞、就绪三个状态,状态转换非常类似进程。

线程的组织与控制——基于TCB(类似进程的PCB)


 内容总结自王道计算机考研《操作系统》 和 人民邮电出版社《操作系统导论》

  • 24
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值