操作系统OS/进程与线程/线程

进程和线程

进程

  • 进程实体(进程映像)由PCB、程序段和数据段组成,其中PCB是进程存在的唯一标志。

线程

  • 线程最直接的理解就是“轻量级进程”,它是一个基本的CPU执行单元,包含CPU现场(状态),也是程序执行流的最小单元,由线程ID、程序计数器、寄存器集合和堆栈组成。一个线程可以创建和撤销另一个线程,同一进程中的多个线程之间可以并发执行。由于线程之间的相互制约,致使线程在运行中呈现出间断性。线程也有就绪、阻塞和运行三种基本状态。
  • 引入线程后,进程只作为除CPU外的系统资源的分配单元,而线程则作为处理机的分配单元。一个进程内部有多个线程。

线程与进程的比较/属性/特点

0)多线程操作系统中的进程已不再是一个基本的执行实体,但它仍具有与执行相关的状态。所谓进程处于“执行”状态,实际上是指该进程中的某线程正在执行。

1) 调度。在传统的操作系统中(引入线程之前),拥有资源和独立调度的基本单位都是进程,每次调度都要进行上下文切换,开销较大。

在引入线程的操作系统中,线程是独立调度的基本单位, 而线程切换的代价远低于进程。在同一进程中,线程的切换不会引起进程切换。但从一个进程中的线程切换到另一个进程中的线程时,会引起进程切换。

什么是上下文切换?
在传统的操作系统中,进程是拥有资源和独立调度的基本单位。当一个进程在执行时,它拥有系统的全部资源,并且可以独立地执行任务。然而,当操作系统需要进行任务调度时,它需要将当前正在执行的进程的上下文(即该进程的程序计数器、寄存器状态、内存数据等)保存下来,然后加载下一个进程的上下文到系统中,这个过程就叫做上下文切换。

2) 并发性。在引入线程的操作系统中,不仅进程之间可以并发执行,而且一个进程中的多

个线程之间亦可并发执行,甚至不同进程中的线程也能并发执行,从而使操作系统具有

更好的并发性,提高了系统资源的利用率和系统的吞吐量

无论是进程还是线程,并发性的目的是为了提高系统资源的利用率和系统的吞吐量

3) 拥有资源。线程是进程中的一个实体,是被系统独立调度和分派的基本单位。进程是系统中拥有资源的基本单位,而线程不拥有系统资源(仅有一点必不可少、能保证独立运行的资源,比如:每个线程都有一个唯一的标识符和一个线程控制块,线程控制块记录了线程执行的寄存器和栈等在那个时刻的状态),但线程可以访问其隶属进程的系统资源,这主要表现在属于同一进程的所有线程都具有相同的地址空间。要知道,若线程也是拥有资源的单位,则切换线程就需要较大的时空开销,线程这个概念的提出就没有意义。

时空开销是指在进行进程或线程切换时,系统需要保存和恢复上下文信息以及分配和释放资源所需要的时间和空间。
如果线程也是拥有资源的单位,切换线程需要较大的时空开销,主要是因为线程的切换涉及到资源的分配和释放。而这些资源的分配和释放的进行需要时间以及系统的空间,所以加大了时空开销。

4) 独立性。每个进程都拥有独立的地址空间和资源,除了共享全局变量,不允许其他进程访问。某进程中的线程对其他进程不可见。同一进程中的不同线程是为了提高并发性及进行相互之间的合作而创建的,它们共享进程的地址空间和资源

5) 系统开销。在创建或撤销进程时,系统都要为之分配或回收进程控制块PCB及其他资源,如内存空间、I/O设备等。操作系统为此所付出的开销,明显大于创建或撤销线程时的开销。类似地,在进程切换时涉及进程上下文的切换,而线程切换时只需保存和设置少量寄存器内容,开销很小。此外,由于同一进程内的多个线程共享进程的地址空间,因此这些线程之间的同步与通信非常容易实现,甚至无须操作系统的干预。

6) 支持多处理机系统。对于传统单线程进程,不管有多少处理机,进程只能运行在一个处理机上。对于多线程进程,可以将进程中的多个线程分配到多个处理机上执行。所以,一个多线程进程可以使用多个处理机,这些处理机分别是进程中的多个线程使用的。

7)不同的线程可以执行相同的程序。当某一个功能,被不同的用户或在不同的事件调用时,执行这个功能的线程可能是不同的。

8)线程是处理机的独立调度单位,多个线程是可以并发执行的。在单CPU的计算机系统中,

各线程可交替地占用CPU;在多CPU的计算机系统中,各线程可同时占用不同的CPU,

若各个CPU同时为一个进程内的各线程服务,则可缩短进程的处理时间。

9) 一个线程被创建后,便开始了它的生命周期,直至终止。线程在生命周期内会经历阻塞

态、就绪态和运行态等各种状态变化。

10)为什么线程的提出有利于提高系统并发性?

可以这样来理解:由于有了线程,线程切换时, 有可能会发生进程切换,也有可能不发生进程切换,平均而言每次切换所需的开销就变小了,因此能够让更多的线程参与并发,而不会影响到响应时间等问题。

线程的状态和转换

与进程一样,各线程之间也存在共享资源和相互合作的制约关系,致使线程在运行时也具有间断性。相应地,线程在运行时也具有下面三种基本状态。

  • 执行状态:线程己获得处理机而正在运行。
  • 就绪状态:线程已具备各种执行条件,只需再获得CPU便可立即执行。
  • 阻寒状态:线程在执行中因某事件受阻而处于暂停状态。

线程这三种基本状态之间的转换和进程基本状态之间的转换是一样的。

线程的组织与控制

  1. 线程控制块

与进程类似,系统也为每个线程配置一个线程控制块TCB,用于记录控制和管理线程的信息。

线程控制块通常包括:①线程标识符;②一组寄存器,包括程序计数器、状态寄存器和通用寄存器;③线程运行状态,用于描述线程正处于何种状态;④优先级;⑤线程专有存储区,线程切换时用于保存现场等;⑥堆栈指针,用于过程调用时保存局部变量及返回地址等。

同一进程中的所有线程都完全共享进程的地址空间和全局变量。各个线程都可以访问进程地

址空间的每个单元,所以一个线程可以读、写或甚至清除另一个线程的堆栈。

        2. 线程的创建

线程也是具有生命期的,它由创建而产生,由调度而执行,由终止而消亡。相应地,在操作系统中就有用于创建线程和终止线程的函数(或系统调用)。 用户程序启动时,通常仅有一个称为“初始化线程”的线程正在执行,其主要功能是用于创建新线程。在创建新线程时,需要利用一个线程创建函数,并提供相应的参数,如指向线程主程序的入口指针、堆栈的大小、线程优先级等。线程创建函数执行完后,将返回一个线程标识符。

        3. 线程的终止

当一个线程完成自己的任务后,或线程在运行中出现异常而要被强制终止时,由终止线程调用相应的函数执行终止操作。但是有些线程(主要是系统线程)一旦被建立,便一直运行而不会被终止。通常,线程被终止后并不立即释放它所占有的资源,只有当进程中的其他线程执行了分离函数后,被终止线程才与资源分离,此时的资源才能被其他线程利用。

被终止但尚未释放资源的线程仍可被其他线程调用,以使被终止线程重新恢复运行。

线程的实现方式

  1. 用户级线程ULT
        在用户级线程中, 有关线程管理(创建 撤销和切换等)的所有工作都由应用程序在用户空
间中完成 内核意识不到线程的存在 应用程序可以通过使用线程库设计成多线程程序 通常
应用程序从单线程开始 在该线程中开始运行 在其运行的任何时刻 可以通过调用线程库中的
派生例程创建一个在相同进程中运行的新线程
        
        对于设置了用户级线程的系统, 其调度仍是以进程为单位进行的 各个进程轮流执行一个时
间片 假设进程 A 包含 1 个用户级线程 进程 B 包含 100 个用户级线程 这样 进程 A 中线程
的运行时间将是进程 B 中各线程运行时间的 100 因此对线程来说实质上是不公平的
        这种实现方式的优点如下: ①线程切换不需要转换到内核空间 节省了模式切换的开销 。②调 度算法可以是进程专用的 不同的进程可根据自身的需要 对自己的线程选择不同的调度算法。 ③用户级线程的实现与操作系统平台无关 对线程管理的代码是属于用户程序的一部分
这种实现方式的缺点如下 ①系统调用的阻塞问题 当线程执行一个系统调用时 ,不仅该线程被阻塞 而且进程内的所有线程都被阻塞 ②不能发挥多处理机的优势 内核每次分配给一个
进程的仅有一个 CPU, 因此进程中仅有一个线程能执行

        2. 内核级线程KLT

        在操作系统中, 无论是系统进程还是用户进程 都是在操作系统内核的支持下运行的 与内
核紧密相关 。内核级线程同样也是在内核的支持下运行的 线程管理的所有工作也是在内核空间
内实现的 内核空间也为每个内核级线程设置一个线程控制块, 内核根据该控制块感知某线程的
存在 并对其加以控制。
        这种实现方式的优点如下: ①能发挥多处理机的优势 内核能同时调度同一进程中的多个线
程并行执行 ②如果进程中的一个线程被阻塞 内核可以调度该进程中的其他线程占用处理机
也可运行其他进程中的线程 ③内核支持线程具有很小的数据结构和堆栈 线程切换比较快
销小 ④内核本身也可采用多线程技术 可以提高系统的执行速度和效率
        这种实现方式的缺点如下: 同一进程中的线程切换 需要从用户态转到核心态进行 系统开
销较大 这是因为用户进程的线程在用户态运行 而线程调度和管理是在内核实现的
        3. 组合方式
有些系统使用组合方式的多线程实现 在组合实现方式中 内核支持多个内核级线程的建立
调度和管理 同时允许用户程序建立 调度和管理用户级线程 一些内核级线程对应多个用户级
线程 这是用户级线程通过时分多路复用内核级线程实现的 同一进程中的多个线程可以同时在
多处理机上并行执行 且在阻塞一个线程时不需要将整个进程阻塞 所以组合方式能结合 KLT
ULT 的优点 并且克服各自的不足
        在线程实现方式的介绍中, 提到了通过线程库来创建和管理线程 线程犀 (thread library)
是为程序员提供创建和管理线程的 API 实现线程库主要的方法有如下两种
        ①在用户空间中提供一个没有内核支持的库 这种摩的所有代码和数据结构都位于用户空间
这意味着 调用库内的一个函数只导致用户空间中的一个本地函数的调用
        ②实现由操作系统直接支持的内核级的一个库 对于这种情况 库内的代码和数据结构位于
内核空间 调用库中的一个 API 函数通常会导致对内核的系统调用
目前使用的三种主要线程库是 POSIX Pthreads Windows APL、  Java.,
Pthreads 作为POSIX 标准的扩展 可以提供用户级或内核级的库 Windows API 是用于 Windows 系统的内核级线程库
Java 线程 API 允许线程在 Java 程序中直接创建和管理 由于 JVM 实例通常运行在宿主操作系统
之上 Java 线程 API 通常采用宿主系就的线程库来实现 因此在 Windows 系统中 Java 线程通常
采用 Windows API 来实现 在类 UNIX 系统中采用 Pthreads 来实现

多线程模型

有些系统同时支持用户线程和内核线程 由于用户级线程和内核级线程连接方式的不同
而形成了下面三种不同的多线程模型
1 ) 多对一模型 将多个用户级线程映射到一个内核级线程
这些用户线程 一般属于一个进程 线程的调度和管理在用户空间完成 仅当用户线程需要访问内核时, 才将其映射到一个内核级线程上 但是每次只允许一个线程进行映射
        优点: 线程管理是在用户空间进行的 因而效率比较高
        缺点: 如果一个线程在访问内核时发生阻塞 则整个进程都会被阻塞 在任何时刻 ,只 有一个线程能够访问内核 多个线程不能同时在多个处理机上运行
2) 一对一模型 将每个用户级线程映射到一个内核级线程
        优点:当一个线程被阻塞后 允许调度另一个线程运行 所以并发能力较强
        缺点: 每创建一个用户线程 相应地就需要创建一个内核线程 开销较大
3) 多对多模型 将n个用户线程映射到 m 个内核级线程上 要求 n>=m
特点 既克服了多对一模型并发度不高的缺点 又克服了一对一模型的一个用户进程占
用太多内核级线程而开销太大的缺点 此外 还拥有上述两种模型各自的优点

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

uniapp Android如何打开常用系统设置页面?

uniapp Android 如何打开常用系统设置页面? 在使用App过程时,有时候会对一些权限获取,比如打开蓝牙、打开通知栏通知等设置,我们如何快速跳转到需要的设置页面? 文章目录 uniapp Android 如何打开常用系统设置页面&…

500mA 线性锂电充电芯片 DP4054/DP4054H完全兼容替代TP4054

锂电池是一种新型的可充电电池,其具有体积小、重量轻、容量大耐用性强等特点,因此被广泛应用于手机、笔记本电脑、移动电源等电了设备上。 充电原理是指电池在充电过程中,用电流将锂离子从外部电源输入电池,使其形成 一个电荷差&…

【LeetCode刷题-滑动窗口】--424.替换后的最长重复字符

424.替换后的最长重复字符 方法:滑动窗口 右边界先移动找到一个满足题意的可以替换k个字符以后,所有字符都变成一样的当前看来最小的子串,直到右边界纳入一个字符以后,不能满足的时候停下然后考虑左边界右移,左边界只…

阿里5年经验之谈 —— 记录一次jmeter压测的过程!

在软件架构与中间件实验的最后,要求进行非功能测试,那得非压力测试莫属了。虽然之前学习秒杀项目的时候看视频里面用过jmeter,但没有自己实操过,趁着这次机会,使用一下。 QPS与TPS 1、TPS: Transactions …

matlab如何实现任意长序列所有排列方式

最近被问到一个问题,如何计算一个由3个0和3个1组成的序列的所有组合情况,处理这个问题我没有找到特别恰当的函数(如果有能直接做的函数欢迎评论告知),所以采用比较接近需求的perms函数来解决这个问题 首先看perms函数…

小望电商通:无代码开发,轻松实现电商平台、客服系统和用户运营的集成

无缝连接电商系统和客服系统,轻松实现集成 小望电商通是一款具有突破性的电商解决方案。它为电商行业提供了新的可能性,尤其在电商系统和客服系统的无缝连接和集成上具有显著优势。小望电商通的运用,使企业无需进行任何API开发,就…

单区域OSPF配置

配置命令步骤: 1.使用router ospf 进程ID编号 启用OSPF路由 2.使用network 直连网络地址 反掩码 area 0 将其归于区域0 注意:1.进程ID编号可任意(1-65535)2.反掩码用4个255相减得到 如下图,根据给出要求配置OSPF单区…

IDEA插件推荐:Apipost-Helper

IDEA是一款功能强大的集成开发环境(IDE),它可以帮助开发人员更加高效地编写、调试和部署软件应用程序。我们在编写完接口代码后需要进行接口调试等操作,一般需要打开额外的调试工具。 今天给大家介绍一款IDEA插件:Api…

LeetCode(20)最长公共前缀【数组/字符串】【简单】

目录 1.题目2.答案3.提交结果截图 链接: 14. 最长公共前缀 1.题目 编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀,返回空字符串 ""。 示例 1: 输入:strs ["flower","flow&qu…

flutter TabBar指示器

第一层tabView import package:jade/configs/PathConfig.dart; import package:jade/customWidget/MyCustomIndicator.dart; importpackage:jade/homePage/promotion/promotionPost/MyPromotionListMainDesc.dart; import package:jade/homePage/promotion/promotionPost/MyPr…

CANoe-Trace窗口介绍

1、什么是Trace窗口 Trace窗口的目的是在测量期间(CANoe运行时)记录总线活动。在测试设置(Measurement Setup)中的Trace窗口的输入处接收到的所有消息都在Trace输出窗口中显示为文本。 当然,除了总线报文数据外,还有一系列的其他事件可以输出到Trace窗口,例如: 错误事…

【网络基础实战之路】基于不同协议间使用重发布路由策略

系列文章传送门: 【网络基础实战之路】设计网络划分的实战详解 【网络基础实战之路】一文弄懂TCP的三次握手与四次断开 【网络基础实战之路】基于MGRE多点协议的实战详解 【网络基础实战之路】基于OSPF协议建立两个MGRE网络的实验详解 【网络基础实战之路】基于…

香港优才计划获批概率跌破20%,拿香港身份越来越难了?

香港优才计划获批概率跌破20%,拿香港身份越来越难了? 截止10月31日,香港各类人才引进计划共收到18万4538宗申请,获批11万5741宗,整体“获批率”为62.72%。 具体到项目获批率: ①优才计划共收到63979宗申请&…

自动化测试介绍和分类,看这一篇就够了

📢专注于分享软件测试干货内容,欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!📢交流讨论:欢迎加入我们一起学习!📢资源分享:耗时200小时精选的「软件测试」资…

中小商家,也能在抖音电商找到星辰大海

“你这背景太假了!” 横穿中国,从江苏闯荡到新疆创业卖蜂蜜的刘元杰,怎么也没有预料到这句话会成为热梗。他本人在直播间各种和网友之间“极限拉扯”,用扔水桶、扔石头、召唤新疆大叔骑马打招呼等操作自证背景的真实性。这让他的…

git宝藏干货

git命令 怎样删除gitee仓库 Gitee上传代码 在Gitee上创建该项目的远程仓库 进入你想要上传的文件目录下,右键单击空白处,点击Git Bash Here 命令行输入下列命令,初始化本地仓库 git init 添加项目目录下所有文件至本地仓库 git add . …

2019年五一杯数学建模C题科创板拟上市企业估值解题全过程文档及程序

2019年五一杯数学建模 C题 科创板拟上市企业估值 原题再现 科创板在首届中国国际进口博览会开幕式上宣布设立,是独立于现有主板市场的新设板块。设立科创板并试点注册制是提升服务科技创新企业能力、增强市场包容性、强化市场功能的一项资本市场重大改革举措&…

MTK联发科MT8766核心板 4G智能模块安卓开发板方案定制

MT8766 是一款基于 MTK 平台工业级高性能、可运行 android12.0 操作系统的 4G智能模块,三款模块硬件是相互兼容,支持 LTE-FDD(CAT-7)/LTE-TDD(CAT-7)/WCDMA/TD-SCDMA/EVDO/GSM 等多种制式;支持 WiFi5 802.1…

景联文科技入选量子位智库《中国AIGC数据标注产业全景报告》数据标注行业代表机构

量子位智库《中国AIGC数据标注产业全景报告》中指出,数据标注处于重新洗牌时期,更高质量、专业化的数据标注成为刚需。未来五年,国内AI基础数据服务将达到百亿规模,年复合增长率在27%左右。 基于数据基础设施建设、大模型/AI技术理…

释放机器人潜力,INDEMIND深耕底层技术

市场转暖,但攘外需要同时安内。 市场降温之后,正迎来拐点 疫情之后,经济逐渐下行,服务机器人的“好日子”也随之结束,整个行业都在动荡中经历渡劫。根据TE智库报告显示,从2022年开始,我国服务…