操作系统复习之线程

目录

(1)线程的基本概念

(2)线程的属性

(3)线程的实现方式

 (4)多线程模型

(5)线程与进程的比较

【例题】


(1)线程的基本概念

我们知道引入进程是为了使多道程序更好得并发执行,提高资源利用率和系统吞吐量;而引入线程则是为减小程序并发执行时所付出的时空开销提高操作系统的并发性能

Def:线程是进程中的一个实体,是操作系统中能进行运算调度的最小单位,由线程ID,程序计数器,寄存器集合和堆栈组成。一个进程中可以并发多个线程,每条线程并行执行不同的任务,同样线程也可以创建和撤销另一个线程。

所以引入线程后,进程只作为拥有资源的独立单位,而线程则作为处理机调度分配的基本单位

(2)线程的属性

①轻型实体。线程中的实体基本上不拥有系统资源,只具有一点必不可少的、能保证其独立运行的资源。和进程一样线程控制块是线程控制运行的唯一标识,由于线程很“轻”,故线程的切换非常迅速且开销小(在同一进程中的)。

②独立调度和分派的基本单位。在多线程OS中,线程是能独立运行的基本单位,因而也是独立调度和分派的基本单位。

③可并发执行。在一个进程中的多个线程之间,可以并发执行,甚至允许在一个进程中所有线程都能并发执行;同样,不同进程中的线程也能并发执行,充分利用和发挥了处理机与外围设备并行工作的能力。

④共享进程资源。在同一进程中的各个线程,都可以共享该进程所拥有的资源。在同一个进程中,所有线程都具有相同的地址空间(进程的地址空间),即线程可以访问该地址空间的每一个虚地址;同时还可以访问进程所拥有的已打开文件、定时器、信号量机构等。由于同个进程内的线程共享内存和文件,所以线程之间互相通信不必调用内核。

(3)线程的实现方式

①用户级线程ULT

用户级线程是指不依赖于操作系统核心,由应用进程利用线程库提供创建、同步、调度和管理线程的函数来控制的线程。由于用户级线程的维护由应用进程完成,不需要操作系统内核了解用户级线程的存在,因此可用于不支持内核级线程的多进程操作系统或单用户操作系统。用户级线程切换不需要内核特权,也无须用户态/核心态切换,因此速度特别快。当然,由于操作系统内核不了解用户线程的存在,当一个线程阻塞时,整个进程都必须等待。这时处理器时间片是分配给进程的,当进程内有多个线程时,每个线程的执行时间相对减少。

②内核级线程KTL

内核级线程是指依赖于内核,由操作系统内核完成创建和撤销工作的线程。在支持内核级线程的操作系统中,内核维护进程和线程的上下文信息并完成线程切换工作。一个内核级线程由于I/O操作而阻塞时,不会影响其他线程的运行。只有内核级线程才是处理机分配的单位。

③组合方式的多线程实现

有些系统中线程创建完全在用户空间中完成,线程的调度和同步也在应用程序中进行。个应用程序中的多个用户级线程被映射到一些小于等于用户级线程的数目内核级线程上。

 (4)多线程模型

多线程模型用来实现用户级线程和内核级线程的不同连接,主要有:

①多对一 

将多个用户级线程映射到一个内核级线程,线程管理在用户空间完成。此模式中,用户级线程对操作系统不可见(即透明)

优点:线程管理是在用户空间进行的,因而效率比较高。

缺点:一个线程在使用内核服务时被阻塞,整个进程都会被阻塞,多个线程不能并行地运行在多处理机上。

②一对一

将每个用户级线程映射到一个内核级线程。

优点:当一个线程被阻塞后,允许另一个线程继续执行,所以并发能力较强。

缺点:每创建一个用户级线程都需要创建一个内核级线程与其对应,这样创建线程的开销比较大,会影响到应用程序的性能。

③多对多

多对多模型。将n个用户级线程映射到m个内核级线程上,要求m<=n。

特点:多对多模型既克服了多对一模型并发度不高的缺点,又克服了一对一模型的一个用户进程占用太多内核级线程而开销太大的缺点。拥有多对一模型和一对一模型各自的优点。

(5)线程与进程的比较

①调度。在引入线程的操作系统中线程是独立调度的基本单位,进程是拥有资源的基本单位;在同一进程中线慢的切换不会引起进程切换。在不同进程中进行线程切换,如从一个进程内的线程切换到另一个进程中的线程时,会引起进程切换。

②并发性。在引入线程的操作系统中。不仅进程之间可以并发执行,而且多个线程之间也可以并发执行从而使操作系统具有更好的并发性。提高了系统的吞吐量。

③拥有资源。不论是传统操作系统还是没有线程的操作系统.进程都是拥有资源的基本单位;而线程不拥有系统资源(只有一点必不可少的资源),但线程可以访问其隶属进程的系统资源。

④系统开销。由于创建或撒销进程时,系统都要为之分配或回收资源,如内存空间、IO设备等,因此操作系统所付出的开销远大于创建或撒销线程时的开销;而线程切换时只需保存和设置少量寄存器内容,开销很小。由于同一进程中的多个线程具有相同的地址空间,致使它们之间的同步和通信的实现,也变得比较容易。且无需操作系统的干预。

【例题】:

1.下面关于用户级线程和内核级线程的描述中,错误的是( ).B

A.采用轮转调度算法,进程中设置内核级线程和用户级线程的效果完全不同

B.跨进程的用户级线程调度也不需要内核参与,控制简单

C.用户级线程可以在任何操作系统中运行

D.若系统中只有用户级线程,则处理机的调度对象是进程

·跨进程的线程需要处理机进行调度,需要内核的参与

·用户级线程的维护由应用进程完成,不需要操作系统内核了解用户级线程的存在,因此可在任何操作系统中运行

·如果系统只有用户态线程,则线程对操作系统是不可见的,操作系统只能调度进程;如果系统中有内核态线程,则操作系统可以按线程进行调度

2.在内核级线程相对于用户级线程的优点的如下描述中,错误的是( ) A

A.同一进程内的线程切换,系统开销小

B.当内核线程阻塞时,CPU将会调度同一进程中的其他内核线程执行

C.内核级线程的程序实体可以在内核态运行

D.对多处理器系统,核心可以同时调度同一进程的多个线程并行运行

·内核级线程中,同一进程的线程切换,需要从用户态转到核心态进行,系统开销大

·在内核级线程中,调度是在线程一级进程,内核可以同时调度同一进程的多个线程在多个CPU上运行,BD正确

·进程中的内核级线程运行在内核态时说明该进程同样在内核态

3.在用户线程相对于内核级线程的优点的如下描述中,错误的是( )A

A.一个线程阻塞不影响另一个线程的运行

B.线程的调度不需要内核直接参与,控制简单

C.线程切换代价小

D.允许每个进程定制自己的调度算法,线程管理比较灵活

·用户级线程阻塞,则整个进程将阻塞,所以进程中其他线程也会阻塞,A错误

·用户级线程是在用户空间进行调度,节省了模式切换的开销,不同的进程可以根据自身需要对自己的线程选择不同调度算法

【真题】:

1.[2011统考真题]在支持多线程的系统中,进程P创建的若干线程不能共享的是( ).D

A.进程P的代码段B.进程P中打开的文件C.进程P的全局变量D.进程P中某线程的栈指针

·进程中的线程共享进程的全部资源,但某线程的栈指针对其他线程是透明的,不能与其他线程共享

2.[2012统考真题]下列关于进程和线程的叙述中,正确的是( ).A

A.不管系统是否支持线程,进程都是资源分配的基本单位

B.线程是资源分配的基本单位,进程是调度的基本单位

C.系统级线程和用户级线程的切换都需要内核的支持

D.同一进程中的各个线程拥有各自不同的地址空间

·B中概念混淆,在支持线程的系统中,进程是资源分配的基本耽误,线程是调度和分配的基本单位;C中用户级线程的切换在用户空间进程,有关线程的管理都是由应用程序完成;D中同一进程中的线程共享进程的地址空间

3.[2019統考真题]下列关于线程的描述中,错误的是( )。B

A.内核级线程的调度由操作系統究成

B.操作系统为每个用户级线程建立一个线程控制块

C.用户级线程间的切换比内核级线程间的切换效率高

D.用户级线程可以在不支持内核级线程的操作系统上实现

·多线程模型中只有一对一模型中操作系统为每个用户线程建立一个线程控制块B错误

·用户级线程切换在用户空间进行,内核级线程切换需要操作系统帮助调度CD正确

猜你喜欢

转载自blog.csdn.net/weixin_46516647/article/details/124448684
今日推荐