🌕写在前面
Hello🤗大家好啊,我是kikokingzz,名字太长不好记,大家可以叫我kiko哦~
从今天开始,我们将要开启一个新的系列【闪耀计划】,没错!这是今年上半年的一整个系列计划!本专题目的是通过百天刷题计划,通过题目和知识点串联的方式,完成对计算机操作系统的复习和巩固;同时还配有专门的笔记总结和文档教程哦!想要搞定,搞透计算机操作系统的同学,本专栏将会通过模块化的分类,刷够1000道题,为大家提供点对点的考点相关知识轰炸!值得注意的是,本专栏将会通过教程+课后习题的方式来进行巩固教学,课后习题的题量也是算入总题数的哦!
🎉🎉订阅本专栏,将为你带来最一手的备战秘籍!🎉🎉
🍊博客主页:kikoking的江湖背景🍊
🌟🌟往期必看🌟🌟
🔥【闪耀计划】第一话· 操作系统的基本概念
🔥【闪耀计划】第二话·现代操作系统的前世今生
🔥【闪耀计划】第三话·操作系统运行环境的层层细节
🔥【操作系统】第四话·进程和程序究竟有啥区别?
🔥【操作系统】第五话·进程的切换与控制·到底有啥关系?
🍺知识点9:线程与多线程模型
🥝9.1 线程的概念
🍓1.什么是线程?
我们可以把线程理解为“轻量级进程”,它是一个基本的CPU执行单元,也是程序执行流的最小单元,由线程ID、程序计数器、寄存器集合和堆栈组成。
线程是进程中的一个实体,是被系统独立调度和分派的基本单位,它不拥有系统资源,只拥有一点运行中必可不少的资源,但它可与同属一个进程的其他线程共享进程的全部资源。
一个线程可以创建和撤销另一个线程,同一进程中的多个线程可以并发执行,由于线程之间的相互制约,致使线程中出现间断性。线程也有就绪、阻塞、运行三种基本。
🍓2.为什么要引入线程?
引入进程的目的:更好地使多道程序并发执行,提高资源利用率和系统吞吐量。
引入线程的目的:减小程序在并发执行时所付出的时空开销,提高操作系统的并发性能。
引入线程之后,不仅是进程之间可以并发,进程内的各线程之间也可以并发,从而进一步提升了系统的并发度,使得一个进程内也可以并发处理各种任务(如QQ 视频、文字聊天、传文件)。
🍓3.线程与进程有什么区别?
(1)调度
进程:传统操作系统中,拥有资源和独立调度的基本单位都是进程,每次调度都要进行上下文切换,开销较大。
线程:线程是独立调度的基本单位,线程切换的代价远低于进程。在同一进程中,线程的切换不会引起进程切换,但从一个进程中的线程切换到另一个进程中的线程时,会引起进程切换。
(2)并发性
引入线程的操作系统中,不仅进程之间可以并发执行,而且一个进程中的多个线程之间亦可并发执行,甚至不同进程中的线程也能并发执行,从而使操作系统具有更好的并发性,提高了系统资源的利用率和系统吞吐量。
(3)拥有资源
进程:进程是系统中拥有资源的基本单位。
线程:线程不拥有系统资源,但线程可以访问其隶属进程的系统资源,这主要表现在属于同一进程的所有线程都具有相同的地址空间。
PS:如果线程是拥有资源的单位,那么切换线程就需要较大的时空开销,这样的话,线程这个概念的提出就没有意义了。
(4)独立性
进程:每个进程都拥有独立的地址空间和资源,除了共享全局变量,不允许其他进程访问。
线程:某进程中的线程对其他进程不可见,同一进程中的不同线程共享进程的地址空间和资源。
(5)系统开销
进程:在创建或撤销进程时,系统要为之分配或回收PCB及其他资源,操作系统为此所付出的开销,明显大于创建或撤销线程时的开销。
线程:线程切换时只需保存和设置少量寄存器内容,开销很小;由于同一进程内的多个线程共享进程的地址空间,因此这些线程之间的同步和通信非常容易实现,甚至无须操作系统的干预。
(6)支持多处理机系统
单线程进程:不管有多少处理机,进程只能运行在一个处理机。
多线程进程:可以将进程中的多个线程分配到多个处理机上执行。
🍓4.线程有哪些属性?
看似线程有很多属性,其实我们可以把线程理解为“轻量级进程”,那么进程所拥有的属性它基本都有,但是线程与进程的唯一区别就在于,线程是不拥有系统资源的,但它是处理机调度的单位;进程是系统中拥有资源的基本单位。
📜习题检测
📜091.题目难度 ⭐️⭐️
091.【2012统考真题】下列关于进程和线程的叙述中,正确的是( )。 A.不管系统是否支持线程,进程都是资源分配的基本单位 B.线程是资源分配的基本单位,进程是调度的基本单位 C.系统级线程和用户级线程的切换都需要内核的支持 D.同一进程中的各个线程拥有各自不同的地址空间
🍊详细题解:
A/B:在引入线程后,进程是资源分配的基本单位,线程是调度的基本单位。
C:在用户级线程中,有关线程管理的所有工作都由应用程序完成,无须内核的干预。
D:同一进程中的各个线程共享进程的地址空间。
✅正确答案:A
📜092.题目难度 ⭐️⭐️
092.下面的叙述中,正确的是( )。 A.线程是比进程更小的能独立运行的基本单位,可以脱离进程独立运行 B.引入线程可提高程序并发执行的程度,可进一步提高系统效率 C.线程的引入增加了程序执行时的时空开销 D.一个进程一定包含多个线程
🍊详细题解:
A:线程是进程内一个相对独立的执行单元,不能脱离进程单独运行,只能在进程中运行。
B/C:引入线程是为了减少程序执行时的时空开销。
D:一个进程可能包含一个或多个线程。
✅正确答案:B
📜093.题目难度 ⭐️⭐️
093.下面的说法中,正确的是( )。 A.不论是系统支持的线程还是用户级线程,其切换都需要内核的支持 B.线程是资源分配的单位,进程是调度和分派的单位 C.不管系统中是否有线程,进程都是拥有资源的独立单位 D.在引入线程的系统中,进程仍是资源调度和分派的基本单位
🍊详细题解:
A:在用户级线程中,有关线程管理的所有工作都由应用程序完成,无须内核的干预。
B/C/D:线程是调度的基本单位,进程是资源分配的基本单位。
✅正确答案:C
📜094.题目难度 ⭐️⭐️
094.下面的叙述中,正确的是( )。 A.同一进程内的线程可并发执行,不同进程的线程只能串行执行 B.同一进程内的线程只能串行执行,不同进程的线程可并发执行 C.同一进程或不同进程内的线程都只能串行执行 D.同一进程或不同进程内的线程都可以并发执行
🍊详细题解:
同一进程内的线程间的可以直接切换,并发度较高,不同进程内的线程间,由于需要涉及到进程切换,因此切换的代价会高一些。
✅正确答案:D
📜095.题目难度 ⭐️⭐️
095.下列关于线程的叙述中,正确的是( )。 A.线程包含CPU现场,可以独立执行程序 B.每个线程有自己独立的地址空间 C.进程只能包含一个线程 D.线程之间的通信必须使用系统调用函数
🍊详细题解:
A:线程是处理机调度的基本单位,当然可以独立执行程序。
B:线程没有自己独立的地址空间,它共享其所属进程的空间。
C:进程可以创建多个线程。
D:同一进程内的线程之间的通信可以直接通过它们共享的存储空间,不涉及系统调用。不同进程内的线程之间的通信,必须要使用系统调用函数来实现通信。
✅正确答案:A
📜096.题目难度 ⭐️⭐️⭐️
096.在以下描述中,( )并不是多线程系统的特长。 A.利用线程并行地执行矩阵乘法运算 B.Web服务器利用线程响应HTTP请求 C.键盘驱动程序为每个正在运行的应用配备一个线程,用以响应该应用的键盘输入 D.基于GUI的调试程序用不同的线程分别处理用户输入、计算和跟踪等操作
🍊详细题解:
适合用多线程解决的业务场景有:
- (1)可以将处理逻辑拆分成多个互不相干的部分
- (2)计算量较大,需要高并发。
A:矩阵乘法可以拆分为多个线程分别进行“行*列”的计算。
B:利用多个线程进行处理HTTP请求,可以节约获得响应的时间。
C:整个系统只有一个键盘,而且键盘输入是人的操作,速度比较慢,完全可以使用一个线程来处理整个系统的键盘输入。
D:满足线程解决的任务场景(1)的情况。
✅正确答案:C
✨✨✨我是分割线✨✨✨
🥝9.2 线程切换与控制
🍓1.线程状态与切换
与进程一样,各线程之间也存在共享资源和相互合作的制约关系,致使线程在运行时也具有间断性。相应地,线程在运行时也具有下面三种基本状态。
- 执行状态:线程已获得处理机而正在运行。
- 就绪状态:线程已具备各种执行条件,只需再获得CPU便可立即执行。
- 阻塞状态:线程在执行中因某事件受阻而处于暂停状态。
线程这三种基本状态之间的转换和进程基本状态之间的转换是一样的。
🍓2.线程的组织与控制
(1)线程控制块TCB
与进程类似,系统也为每个线程配置一个线程控制块TCB,用于记录控制和管理线程的信息。
同一进程中的所有线程都完全共享进程的地址空间和全局变量。各个线程都可以访问进程地址空间的每个单元,所以一个线程可以读、写或甚至清除另一个线程的堆栈。
(2)线程的创建
线程也是具有生命期的,它由创建而产生,由调度而执行,由终止而消亡。相应地,在操作系统中就有用于创建线程和终止线程的函数(或系统调用)。
用户程序启动时,通常仅有一个称为“初始化线程”的线程正在执行,其主要功能是用于创建新线程。在创建新线程时,需要利用一个线程创建函数,并提供相应的参数,如指向线程主程序的入口指针、堆栈的大小、线程优先级等。线程创建函数执行完后,将返回一个线程标识符。
(3)线程的终止
当一个线程完成自己的任务后,或线程在运行中出现异常而要被强制终止时,由终止线程调用相应的函数执行终止操作。但是有些线程(主要是系统线程)一旦被建立,便一直运行而不会被终止。
通常,线程被终止后并不立即释放它所占有的资源,只有当进程中的其他线程执行了分离函数后,被终止线程才与资源分离,此时的资源才能被其他线程利用。被终止但尚未释放资源的线程仍可被其他线程调用,以使被终止线程重新恢复运行。
📜097.题目难度 ⭐️⭐️⭐️
097.【2011统考真题】在支持多线程的系统中,进程Р创建的若干线程不能共享的是( )。 A.进程Р的代码段 B.进程Р中打开的文件 C.进程P的全局变量 D.进程Р中某线程的栈指针
🍊详细题解:
进程中的线程共享进程内的全部资源,但进程中某线程的栈指针对其他线程是透明的,不能与其他线程共享。
✅正确答案:A
📜098.题目难度 ⭐️
098.下面的叙述中,正确的是( )。 A.引入线程后,处理器只能在线程间切换 B.引入线程后,处理器仍在进程间切换 C.线程的切换,不会引起进程的切换 D.线程的切换,可能引起进程的切换
🍊详细题解:
在同一进程中,线程的切换不会引起进程的切换。当从一个进程中的线程切换到另一个进程中的线程时,才会引起进程的切换。因此线程的切换,可能会引起进程的切换。
✅正确答案:D
📜099.题目难度 ⭐️⭐️
099.下列说法中,不正确的是( )。 A.一个进程可以创建一个或多个线程 B.一个线程可以创建一个或多个线程 C.一个线程可以创建一个或多个进程 D.一个进程可以创建一个或多个进程
🍊详细题解:
进程可以创建进程或线程,线程也可以创建线程,但线程不能创建进程。
✅正确答案:C
✨✨✨我是分割线✨✨✨
🥝9.3 线程的实现方式与对应模型
线程的实现可以分为两类:用户级线程(ULT)和内核级线程(Kernel-Level Thread)。
🍓1.用户级线程(ULT)
在用户级线程中,有关线程管理的所有工作都由应用程序在用户空间中完成,内核是无法意识到线程的存在的。应用程序可以通过使用线程库,设计为多线程程序。通常应用程序从单线程开始,在该线程开始运行的任何时刻,可以通过调用线程库中的派生例程,创建一个在相同进程中运行的新线程。
对应模型:(多对一模型)
将多个用户级线程映射到一个内核级线程,线程的调度和管理在用户空间完成。
Q1:用户级线程的调度单位是什么?对线程的调度公平吗?
A1:用户级线程的调度单位是以进程为单位进行的,各个进程轮流执行一个时间片。上图中,进程A包含2个用户级线程,进程B包含1个用户级线程,这样进程B中线程的运行时间就是进程A中各线程运行时间的2倍,因此对线程来说实质上是不公平的。
✅优点:
- 线程切换在用户空间即可完成,不需要切换到内核态,节省了两态切换的开销。
- 调度算法可以是进程专用的,不同进程可根据自身需要,对自己的线程选择不同的调度算法。
❌缺点:
- 当一个用户级线程被阻塞后,整个进程都会被阻塞,并发度不高。
- 多个线程不可在多核处理机上并行运行,这是因为用户级线程的调度单位是进程,一个进程只能被分配一个CPU。
100.在多对一的线程模型中,当一个多线程进程中的某个线程被阻塞后,( )。 A.该进程的其他线程仍可继续运行 B.整个进程都将阻塞 C.该阻塞线程将被撤销 D.该阻塞线程将永远不可能再执行
在多对一模型中,由于只有一个内核级线程,操作系统内核是看不到用户级多线程的,它只能感知到一个调度单位的存在。因此该进程的一个线程被阻塞后,该进程就被阻塞,进程的其他线程当然也都被阻塞;本题正确答案:B
🍓2.内核级线程(KLT)
在内核级线程中,线程管理的所有工作是在内核空间中实现的。内核空间也为每个内核级线程设置一个线程控制块,内核根据该控制块感知某线程的存在,并对其加以控制。
对应模型:(一对一模型)
将每个用户级线程映射到一个内核级线程。
✅优点:
- 能发挥多处理机的优势,内核能同时调度同一进程中的多个线程并发执行。
- 如果进程中的一个线程被阻塞,内核可以调度该进程中的其他线程占用处理机。
- 内核级线程间切换比较快,开销小。
❌缺点:
- 同一进程中的线程切换,需要从用户态转到内核态进行,系统开销较大;这是因为用户进程的线程在用户态运行,而线程调度和管理是在内核实现的。
📜101.题目难度 ⭐️⭐️
101.【2019统考真题】下列关于线程的描述中,错误的是( )。 A.内核级线程的调度由操作系统完成 B.操作系统为每个用户级线程建立一个线程控制块 C.用户级线程间的切换比内核级线程间的切换效率高 D.用户级线程可以在不支持内核级线程的操作系统上实现
🍊详细题解:
A:应用程序没有进行内核级线程管理的代码,只有一个到内核级线程的编程接口,内核为进程及其内部的每个线程维护上下文信息,调度因此也是由操作系统内核完成。
B:在多线程模型中,用户级线程和内核级线程的连接方式分为“多对一”、“一对一”、“多对多”,操作系统为每个用户级线程建立一个线程控制块属于“一对一”模型。
C:用户级线程的切换可以在用户空间完成,内核级线程的切换需要操作系统帮助调度,涉及两态切换。
D:用户级线程的管理工作可以只在用户空间中进行,因此可以在不支持内核级线程的操作系统上实现。
✅正确答案:B
🍓3.组合方式
在组合方式中,内核支持多个内核级线程的建立、调度和管理,同时允许用户程序建立、调度和管理用户级线程。一个内核级线程对应多个用户级线程,这是用户级线程通过时分多路复用内核级线程实现的。
对应模型:(多对多模型)
将n个用户线程映射到m个内核级线程上,要求(n>=m);如下图所示,将3个用户级线程映射到2个内核级线程上。
✅优点:
- 同一进程中的多个线程可以同时在多处理机上并行执行,提高了并发度。
- 在阻塞一个进程时,不需要将整个进程阻塞。
- 克服了一对一模型的一个用户进程占用太多内核级线程而开销太大的缺点。
🍓4.线程库
线程库(thread library)是为程序员提供创建和管理线程的API,其主要有两种方式实现:
(1)用户空间的库
在用户空间中提供一个没有内核支持的库,这种库的所有代码与数据结构都位于用户空间,调用库中的函数,只导致用户空间中的一个本地函数的调用。
(2)内核空间的库
在内核空间提供一个操作系统直接支持的内核级的库,这种库的所有代码与数据结构都位于内核空间,调用库中的一个API函数通常会导致对内核的系统调用。
102.系统动态DLL库中的系统线程,被不同的进程所调用,它们是( )的线程。 A.不同 B.相同 C.可能不同,也可能相同 D.不能被调用
DLL是一个包含“可由多个程序同时使用的”代码和数据的库。当多个程序使用同一个函数库时,DLL中的同一个系统线程,可以被不同的进程所调用,进而降低在磁盘和物理内存中加载的代码的重复量;本题答案:B
📜习题检测
📜103.题目难度 ⭐️⭐️⭐️
103.下面关于用户级线程和内核级线程的描述中,错误的是( )。 A.采用轮转调度算法,进程中设置内核级线程和用户级线程的效果完全不同 B.跨进程的用户级线程调度也不需要内核参与,控制简单 C.用户级线程可以在任何操作系统中运行 D.若系统中只有用户级线程,则处理机的调度对象是进程
🍊详细题解:
A:用户级线程的调度单位是进程,而内核级线程的调度单位是线程,对于用户级线程,一个进程只能被分配一个CPU,即同一时刻只能1个线程使用;而对于内核级线程来说,内核能同时调度同一进程中的多个线程并发执行,效果当然不同。
B:由于此处涉及到了跨进程,因此就会发生进程切换,进程切换是需要内核参与的。例如下图中进程A的线程刚结束完,要调度进程B中的线程,此时就需要操作系统负责进程切换。
C:用户级线程的管理工作可以只在用户空间中进行,因此可以在任何操作系统上运行。
D:用户级线程的调度单位就是进程。
✅正确答案:B
📜104.题目难度 ⭐️⭐️⭐️
104.在内核级线程相对于用户级线程的优点的如下描述中,错误的是( )。 A.同一进程内的线程切换,系统开销小 B.当内核线程阻塞时,CPU将会调度同一进程中的其他内核线程执行 C.内核级线程的程序实体可以在内核态运行 D.对多处理器系统,核心可以同时调度同一进程的多个线程并行运行
🍊详细题解:
A:在内核级线程中,同一进程中的线程切换,需要从用户态转到核心态进行,系统开销较大。
B:如果进程中的一个线程被阻塞,内核可以调度该进程中的其他线程占用处理机。
C:如上图所示,当然正确。
D:CPU调度是在内核进行的,在内核级线程中,调度是在线程一级进行的,因此内核可以同时调度同一进程的多个线程在多CPU上并行运行。
✅正确答案:A
📜105.题目难度 ⭐️⭐️⭐️
105.在用户级线程相对于内核级线程的优点的如下描述中,错误的是( )。 A.一个线程阻塞不影响另一个线程的运行 B.线程的调度不需要内核直接参与,控制简单 C.线程切换代价小 D.允许每个进程定制自己的调度算法,线程管理比较灵活
🍊详细题解:
A:进程中的某个用户级线程被阻塞,则整个进程也被阻塞,即进程中的其他用户级线程也被阻塞。
B/C:用户级线程的调度是在用户空间进行的,节省了模式切换的开销。
D:不同进程可以根据自身的需要,对自己的线程选择不同的调度算法。
✅正确答案:A
🌕写在最后
计算机操作系统世界是相当丰富的,内容方向繁多,但只要一步一个脚印,跟随【闪耀计划】,吃透、搞懂、拿捏住操作系统内容是完全没有问题的!后期该系列还会有视频教程和经验分享,关于更多这方面的内容,请关注本专栏哦!
热爱所热爱的, 学习伴随终生,kikokingzz与你同在!❥(^_-)
版权归原作者 kikokingzz 所有, 如有侵权,请联系我们删除。