OS_线程

news2024/9/23 9:33:41

2024.07.01:操作系统线程学习笔记

第7节 线程

  • 7.1 线程的基本概念
    • 7.1.1 单线程地址空间 vs 多线程地址空间
  • 7.2 线程的状态与转换(照搬进程设计)
    • 7.2.1 线程的3种基本状态
  • 7.3 线程管理中的数据结构
    • 7.3.1 线程的用户栈
    • 7.3.2 线程的内核栈
  • 7.4 线程的控制
    • 7.4.1 线程的创建
    • 7.4.2 线程的终止
  • 7.5 线程的实现方式(难点)
    • 7.5.1 用户级线程ULT(用户空间实现的线程)
    • 7.5.2 内核支持线程KST==内核级线程KLT(内核空间实现的线程)
    • 7.5.3 多线程模型


7.1 线程的基本概念

线程:其实就是在我们引入进程的基础上之后,再对进程进行进一步的划分

  • 一个进程往往只有一个执行点,也就是说这个进程我们就是从他最开始的那条指令开始执行,中间可能经历阻塞,再次运行等停顿,但都还是一个进程单位
  • 当我们将进程细分划为线程,一个多线程的进程就会有多个执行点。(一个执行点到下一个执行点的过程就可以被称为一个线程)

进程划分线程只是把一个进程要执行的所有的任务又给细分成了多个线程,这些线程也是可以独立的去调度的,所以谁在谁之前上处理机都不一定,因为他们已经完成成为了进程内部一个新的可以独立去调度的单位,每一个线程就类似一个新的独立的进程,只是他比进程的规模还要小

  • 对于进程来说,每个进程都有它独立的地址空间。但是同属于一个进程的线程们会共享进程的地址空间,也就是一个进程内的线程是没有自己独立的地址空间的

7.1.1 单线程地址空间 vs 多线程地址空间

在这里插入图片描述

注意:单线程的地址空间此处为什么没有加那个内核区域
linux操作系统,它的一个进程映像,或者说这个进程的地址空间,它是包含了高地址这一部分的内核区。并不是说这个操作系统的内核去代码在这个进程里面。只是对于这个进程来说,他知道这个地址范围内会映射到操作系统的内核代码上去,内核不属于进程。所以对于进程来说,虽然他的进程地址空间有这么大,但是只有下面的部分是他可用的,上面是他知道他存在但不属于他的进程,只是能映射到内核上去

每个进程都有自己独立的栈,并且线程之间没有做保护措施,每个线程的栈可以被其他线程读写甚至清除,由一个线程打开的文件也可以被其他线程读写。

线程只是作为独立调度和分派的单位,而进程此时只会作为拥有资源的单位。也就是说分配资源的时候,系统还是以进程为基本单位,而不会给线程分配太多的资源,当运行和调度的时候,就会从调度进程转变为调度进程。因而线程没有独立的地址空间,也没有掌握资源,完全依附于进程


7.2 线程的状态与转换(照搬进程设计)

7.2.1 线程的3种基本状态

在这里插入图片描述
就绪态(只缺CPU这一个资源):线程已具备执行条件,只差CPU
执行态(执行回到就绪原因就是CPU已经不在他上面了):线程获得CPU并且正在运行
阻塞态:线程在执行过程种因某件事而受阻,处于暂停状态


7.3 线程管理中的数据结构

为了便于系统去描述和管理线程,操作操作为每个线程定义了一个数据结构ThreadCB(线程控制块)
在这里插入图片描述
对于一个线程来说,他是有两个栈的:用户栈和内核栈

区分线程的内核栈和用户栈的原因:每个进程运行时都持有上下文,用于保证并行性。为了保证内核和用户态隔离,陷入内核不影响用户态,所以使用了不同的栈

7.3.1 线程的用户栈

在这里插入图片描述

7.3.2 线程的内核栈

在这里插入图片描述


7.4 线程的控制

7.4.1 线程的创建

用户程序在启动时,通常只有一个初始化线程在执行,它利用一个线程创建函数来创建新线程,并返回一个线程标识符

7.4.2 线程的终止

  • 终止线程通过调用相应的函数执行终止操作,大多数操作系统中,线程被终止后不会立即释放它所占有的所有资源
  • 只有当进程中的其他线程执行了分离函数后,被终止的线程才会与资源分离,此时的资源才能被其他线程利用。
  • 已被终止但尚未释放资源的线程,仍可被需要它的线程所调用以恢复运行

7.5 线程的实现方式(难点)

区分点就是线程控制块在内核空间还是用户空间
在这里插入图片描述

7.5.1 用户级线程ULT(用户空间实现的线程)

在早期的操作系统中,它往往只支持用户级线程的,也就是整个线程的实现是放在用户空间的,由用户空间去管理的。对于内核来说,它只能看到这一个进程,它就会以为这是一个单线程的进程
在这里插入图片描述

把整个线程实现部分放在用户空间中,内核看到的就是一个单线程进程
在这里插入图片描述
用户级线程的优势

  • 线程管理是在用户空间去实现的,因此这个线程切换也是在用户空间用户空间直接就实现了,它无需进行模式的切换(CPU工作模式的切换,也就是内核态和用户态之间的切换)
  • 每个进程可以选择自己专用的调度算法,对自己内部的线程进行调度和管理
  • ULT的实现和操作系统的内核是无关的,所以这个ULT管理的代码会显式出现在用户程序中,所以ULT可以在不支持线程机制的操作系统平台中实现的

用户级线程的劣势

  • 内核只能识别一个进程,对于内核空间来说,它感知不到这些用户级线程,然而进程的调度是由内核来完成的,当我给这样一个进程去分配CPU的时候,对于内核来说,他只能看到用户空间有一整个进程,那他就会给整个进程去分配CPU资源,看不到里面有很多个线程。因此调度的对象是整个用户进程,每次只能给整个进程分配CPU,进程中只有一个线程能执行,无法发挥多处理器系统优势
  • 进程中的某个线程发起系统调用,会导致进程中的所有进程全部被阻塞

7.5.2 内核支持线程KST==内核级线程KLT(内核空间实现的线程)

在内核的支持下去运行的线程

发展到现在,操作系统的内核就已经可以感知到这些线程了。因此,内核级线程它的撤销或者等等管理调度全部都是由操作系统内核去完成的
在这里插入图片描述
内核级线程的优势

  • 内核可识别到内核级线程,因此调度的对象是内核级线程,在多处理机系统中,每次可以给不同的内核级线程分配CPU,提高并行度
  • 如果用户进程中的一个线程被阻塞,内核可以调度该进程内的其他线程上处理机,或者调度其他进程的线程

内核级线程的劣势

  • 每次线程切换都需要CPU变态,开销比较大
  • TCB存放在内核空间中,内存占用较大

在这里插入图片描述


7.5.3 多线程模型

同时支持ULT和KST的操作系统,如何去实现,如何去确定这个用户级线程和内核级线程之间的映射关系

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2101349.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

用户时长进入“零和”时代,App们如何借Push胜出?

作者 | 曾响铃 文 | 响铃说 激烈的市场竞争、快速变化的用户需求、层出不穷的新赛道新玩法……对如今移动互联网的App开发者而言,寻求用户增长的压力变得越来越大。 而与此同时,Push作为促进用户增长的关键手段之一,其执行过程中的诸多问题…

坑——fastjson将字符串转到带枚举的java对象

fastjson将不同的字符串转换成带枚举的java对象时&#xff0c;不同的字符串值转换成java对象的结果不同&#xff1b; 测试用fastjson版本&#xff1a; <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <ver…

[有彩蛋]大模型独角兽阶跃星辰文生图模型Step-1X上线,效果具说很炸裂?快来看一手实测!

先简单介绍一下阶跃星辰吧 公司的创始人兼CEO是姜大昕博士&#xff0c;他在微软担任过全球副总裁&#xff0c;同时也是微软亚洲互联网工程研究院的副院长和首席科学家。 2024年3月&#xff0c;阶跃星辰发布了Step-2万亿参数MoE语言大模型预览版&#xff0c;这是国内初创公司首…

公司监控上网记录怎么实现?监控公司局域网内电脑的上网记录,这4个方法不妨一试!

在繁忙的办公室里&#xff0c;每位员工的手指在键盘上跳跃&#xff0c;屏幕闪烁间&#xff0c;他们究竟在忙碌什么&#xff1f;是沉浸在工作的海洋中&#xff0c;还是悄然滑向了网络的另一端&#xff1f; 为了解答这一疑问&#xff0c;确保工作效率与信息安全&#xff0c;公司纷…

webpack--处理资源

在webpack.config.js中进行配置 const path require(path) module.exports {// 入口entry: ./src/main.js,// 输出output: {// 文件的输出路径path: path.resolve(__dirname, dist),// 入口文件打包输出的文件名filename: js/main.js,// 自动清空上次打包结果 原理&#xff…

Spring中基于redis stream 的消息队列实现方法

本文主要介绍了消息队列的概念性质和应用场景&#xff0c;介绍了kafka、rabbitMq常用消息队列中间件的应用模型及消息队列的实现方式&#xff0c;并实战了在Spring中基于redis stream 的消息队列实现方法。 一、消息队列 消息队列是一种进程间通信或者同一个进程中不同线程间的…

Netlify 为静态站点部署 Waline 评论系统

目录 1 准备工作2 简介2.1 Netlify2.2 Waline2.3 Leancloud 3 开始搭建3.1 Fork 仓库3.2 设置 Leancloud3.3 部署 Netlify3.4 查看评论系统 从我建成个人网站以来&#xff0c;一个月了&#xff0c;竟然还没配置过评论系统&#xff0c;一直用的别人的 awa。 那么今天就稍微研究…

B站up主全程教学趋动云部署大模型:Meta新开源【Llama3.1-70B-Instruct】!

Llama 3.1 的指令调优版本&#xff08;8B、70B、405B&#xff09;针对多语言对话用例进行了优化&#xff0c;在比8种支持语言更广泛的语言集合上进行了训练&#xff0c;预训练模型可以适应多种自然语言生成任务。 Llama 3.1 模型集合还支持利用其模型的输出来改进其他模型&…

基于yolov8的红绿灯目标检测训练与Streamlit部署(代码+教程)

项目背景 随着智能交通系统的快速发展&#xff0c;自动驾驶技术逐渐成为研究的热点。在自动驾驶领域中&#xff0c;准确识别道路上的交通信号灯是确保车辆安全行驶的关键技术之一。近年来&#xff0c;深度学习技术的发展为交通信号灯的识别提供了强大的支持。YOLO&#xff08;…

云微客短视频矩阵系统,如何让企业赢在起跑线?

在这个信息爆炸的时代&#xff0c;传统的营销方式已经无法满足现代企业的快速发展的需求了。那么如何让企业的品牌和产品脱颖而出呢&#xff1f;云微客短视频矩阵系统&#xff0c;就是这样一个创新的解决方法。 但是很多企业认为&#xff0c;在这个短视频盛行的时代&#xff0c…

cr2怎么转换成jpg?分享这五款好用软件!

在数字摄影时代&#xff0c;CR2作为佳能相机常用的RAW格式&#xff0c;虽然能够保留更多的图像细节和色彩信息&#xff0c;但在日常分享和编辑中&#xff0c;JPG格式因其兼容性和便捷性而更受欢迎。今天&#xff0c;我们就来分享五款好用的软件&#xff0c;帮助你轻松将CR2格式…

数据中心代理IP的使用指南:提升网络体验的秘密武器

在互联网的广阔海洋中&#xff0c;数据中心代理IP是一种常见且实用的工具。无论是个人用户还是企业&#xff0c;使用数据中心代理IP都能带来诸多好处。本文将详细介绍数据中心代理IP的概念、优势以及使用技巧&#xff0c;让你在网络世界中游刃有余。 什么是数据中心代理IP&…

用自定义类级注解校验两字段不能同时为空

背景&#xff1a; 有下面这么一个类&#xff0c;要校验两字段query、image不能同时为空&#xff0c;应该怎么实现&#xff1f;已知的NotBlank等标签都只能检验单个字段。 import jakarta.validation.constraints.NotBlank; import lombok.Data; import org.springframework.h…

无人机之载重篇

无人机的载重能力是一个复杂且多样化的参数&#xff0c;它受到多种因素的影响&#xff0c;包括无人机的类型、设计、技术规格以及用途等。以下是对无人机载重能力的详细解析&#xff1a; 一、无人机载重能力的差异 无人机的载重能力差异很大&#xff0c;从几百克到几十千克不等…

全网都在学,2024最新大模型畅销的三本书!千言万语,尽在书中

哈咯各位&#xff0c;我们都知道2024年最火爆的技术非大模型莫属&#xff0c;而今天就给大家分享几本大模型方向2024年新出的书籍&#xff0c;主要分享这三本非常畅销的书----《Transformer自然语言处理实战》&#xff0c;《实战AI大模型》&#xff0c; 《精通Transformer&…

草原灭火车的功能与性能_鼎跃安全

在内蒙古的草原火灾中&#xff0c;水陆两栖全地形草原灭火车曾多次用于紧急救援。其强大的越野能力和高速反应&#xff0c;使其在广袤的草原上能够迅速到达火场&#xff0c;并使用集成的多功能灭火设备进行灭火作业&#xff0c;有效防止了火灾的进一步蔓延。 水陆两栖全地形草原…

SpringDataJPA系列(4)Repository 中的方法返回值使用

SpringDataJPA系列(4)Repository 中的方法返回值使用 Repository 返回结构有哪些&#xff1f; 打开 SimpleJpaRepository 直接看它的 Structure 就可以知道&#xff0c;它实现的方法&#xff0c;以及父类接口的方法和返回类型包括&#xff1a;Optional、Iterable、List、Page…

S-MLAG-简单跨设备链路聚合

资料&#xff1a; https://www.h3c.com/cn/Service/Document_Software/Document_Center/Home/Switches/00-Public/Configure/Practice/H3C_S_MLAG-BP_Long/#_Toc115363852https://www.h3c.com/cn/d_202010/1348323_30005_0.htm#_Toc53156759 S-MLAG概述 S-MLAG简介 通过S-M…

CSS 高级区块效果——WEB开发系列25

CSS提供了多种工具和属性&#xff0c;使我们能够创建视觉上引人注目的效果。今天我们继续将深入了解几种高级CSS效果&#xff1a;盒子阴影、滤镜、混合模式和文本背景裁剪&#xff0c;提升网页设计的质感和深度。 一、盒子阴影&#xff08;Box Shadow&#xff09; 对于盒子元素…

申请联通卡时,为什么需要上传身份证呢?

我们在后台收到了很多朋友的私信&#xff0c;除了咨询流量卡套餐方面的问题之外&#xff0c;也有不少朋友是咨询流量卡申请方面的问题&#xff0c;今天&#xff0c;小编就回答一个很有代表性的问题&#xff0c;为什么申请联通卡时要上传身份证信息&#xff0c;而其他的运营商就…