操作系统原理 第2版第4章 线程_第1页
操作系统原理 第2版第4章 线程_第2页
操作系统原理 第2版第4章 线程_第3页
操作系统原理 第2版第4章 线程_第4页
操作系统原理 第2版第4章 线程_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第2版周苏机械工业出版社·2023操作系统原理第4章

线程Chapter4:Thread第4章线程线程,有时被称为轻量级进程,是程序中一个单一的顺序控制流程,是程序执行流的最小单元。此外,线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源,但它可与同属一个进程的其他线程共享进程所拥有的全部资源。一个线程可以创建和撤销另一个线程,同一进程中的多个线程之间可以并发执行。由于线程之间的相互制约,致使线程在运行中呈现出间断性。线程也有就绪、阻塞和运行三种基本状态。每一个程序都至少有一个线程,若程序只有一个线程,那就是程序本身。目录/Contents010203线程的概念线程分类多核和多线程01线程的概念Theconceptofthreads4.1线程的概念有关进程的概念主要包含两个特点:(1)资源所有权:进程中包括一个存放进程映像的虚拟地址空间,该进程映像是程序、数据、栈和进程控制块中定义的属性的集合。进程总是拥有对资源的控制或所有权,这些资源包括内存、I/O通道、I/O设备和文件等。操作系统提供保护功能,以防止进程之间发生不必要的与资源相关的冲突。(2)调度/执行:一个进程可以沿着一个或多个程序的执行路径(轨迹)执行,其执行过程可能与其他进程的执行过程交替进行。因此,进程具有一个执行状态(运行、就绪等)和一个被分配的优先级,它是一个可被操作系统调度和分派的实体。这两个特点是独立的,因此操作系统能够分别处理它们。为区分这两个特点,通常将分派的单位称为线程或轻量级进程,而将拥有资源所有权的单位称为进程或任务。多线程是指操作系统在单个进程内支持多个并发执行路径的能力。1多线程在多线程操作系统中,每个线程都作为利用CPU的基本单位,是花费最小开销的实体。2线程的属性和进程一样,线程具有执行状态,且可以相互之间进行同步。3线程的功能特性多线程主要是为了节约CPU时间,根据具体情况来发挥和利用。线程的运行中需要使用计算机的内存资源和CPU。4线程和进程的区别线程的概念4.1线程的概念4.1.1多线程每个进程中只有一个线程在执行的传统方法被称为单线程方法。图4-1左半部分展示的两种安排都是单线程方法,例如MS-DOS就是一个支持单用户进程和单线程的操作系统,其他操作系统支持多用户进程,如各种版本的UNIX,但只支持每个进程一个线程。

图4-1线程和进程4.1.1多线程多线程是指操作系统在单个进程内支持多个并发执行路径的能力,即同时运行多个线程完成不同的工作。图4-1右半部分描述了多线程方法。例如Java运行时环境是单进程多线程的。Windows、Solaris和很多现代版本的UNIX操作系统都采用每个进程支持多个线程的方法。在多线程环境中,进程被定义成资源分配的单位和一个被保护的单位。与进程相关联的有:(1)存放进程映像的虚拟地址空间。(2)受保护地对处理器、其他进程(用于进程间通信)、文件和I/O资源(设备和通道)的访问。4.1.2线程的属性在多线程操作系统中,每个线程都作为利用CPU的基本单位,是花费最小开销的实体。线程具有以下属性:(1)轻型实体。线程中的实体基本上不拥有系统资源,只有一点必不可少的、能保证其独立运行的资源。比如,在每个线程中都应具有一个用于控制线程运行的线程控制块TCB,用于指示被执行指令序列的程序计数器、保留局部变量、少数状态参数和返回地址等一组有关的寄存器和堆栈。(2)独立调度和分派的基本单位。由于线程很“轻”,故线程的切换非常迅速且开销小。4.1.2线程的属性(3)可并发执行。一个进程中的多个线程之间可以并发执行,,同样不同进程中的线程也能并发执行。(4)共享进程资源。在同一进程中的各个线程都可以共享该进程所拥有的资源,这首先表现在:所有线程都具有相同的地址空间(进程的地址空间),线程可以访问该地址空间的每一个虚地址;此外,还可以访问进程所拥有的已打开文件、定时器、信号量机构等。4.1.2线程的属性每个线程有:·线程执行状态(运行、就绪等)。·在未运行时保存的线程上下文;线程可被视为进程内的一个独立操作的程序计数器。·一个执行栈。·用于每个线程局部变量的静态存储空间。·与进程内的其他线程共享的对进程的内存和资源的访问。4.1.2线程的属性图4-2从进程管理的角度来说明线程。在单线程进程模型中,进程的表示包括它的进程控制块和用户地址空间,以及在进程执行中管理调用/返回行为的用户栈和内核栈。当进程正在运行时,处理器寄存器将被该进程所控制;当进程不运行时,这些处理器寄存器中的内容将被保存。在多线程环境中,进程仍然只有一个与之关联的进程控制块和用户地址空间。但是每个线程都有一个独立的栈,还有独立的控制块用于包含寄存器值、优先级和其他与线程相关的状态信息。

图4-2单线程和多线程的进程模型4.1.2线程的属性因此,进程中的所有线程共享该进程的状态和资源,它们驻留在同一块地址空间中,并且可以访问相同的数据。当一个线程改变了内存中的一个数据项时,其他线程在访问这一数据项时能够看到变化后的结果。如果一个线程以读权限打开一个文件,那么同一个进程中的其他线程也能够从这个文件中读取数据。4.1.2线程的属性从性能比较可以看出,线程的重要优点是:(1)在一个已有进程中创建一个新线程比创建一个全新进程所需的时间要少许多,例如在UNIX中创建线程要比创建进程快10倍。(2)终止一个线程比终止一个进程花费的时间少。(3)同一进程内线程间切换比进程间切换花费的时间少。(4)线程提高了不同的执行程序间通信的效率。在大多数操作系统中,独立进程间的通信需要内核的介入,以提供保护和通信所需要的机制。但是,由于在同一个进程中的线程共享内存和文件,它们无须调用内核就可以互相通信。因此,如果一个应用程序或函数被实现为一组相关联的执行单位,那么用一组线程比用一组分离的进程更有效。4.1.2线程的属性文件服务器是使用线程的应用程序的例子。当每个新文件请求到达时,文件管理程序会创建一个新的线程。由于服务器将会处理很多请求,因此会在短期内创建和销毁许多线程。如果服务器运行在多处理器机器上,在同一个进程中的多个线程就可以同时在不同的处理器上执行。此外,由于文件服务中的进程或线程必须共享文件数据,并据此协调它们的行为,此时使用线程和共享内存比使用进程和消息传递要快。4.1.2线程的属性在单处理器多处理系统中,为了简化在逻辑上完成若干项不同功能的程序的结构,线程也是有用的。例如:·前台和后台工作:在电子表格程序中,一个线程可以显示菜单并读取用户输入,而另一个线程执行用户命令并更新电子表格。这种方案允许程序在前一条命令完成前提示输入下一条命令,因而常常会使用户感觉到应用程序的响应速度有所提高。·异步处理:程序中的异步元素可以用线程实现。例如,为避免掉电带来的损失,往往把文字处理程序设计成每隔一分钟将内存(RAM)缓冲区中的数据写入磁盘一次。可以创建一个线程,其任务是周期性地进行备份,并且直接由操作系统调度该线程。这样,在主程序中就不需要特别的代码来提供时间检查或者协调输入和输出了。4.1.2线程的属性·执行速度:一个多线程进程在计算这批数据的同时可以从设备读取下一批数据。在多处理器系统中,同一个进程中的多个线程可以同时执行。这样,即便一个线程在读取数据时由于I/O操作而被阻塞,另外一个线程仍然可以继续运行。·模块化程序结构:涉及多种活动或多种输入/输出的源和目的地的程序更易于用线程设计和实现。4.1.2线程的属性在支持线程的操作系统中,调度和分派是在线程基础上完成的,因此大多数与执行相关的信息可以保存在线程级的数据结构中。但是,有些活动影响着进程中的所有线程,操作系统必须在进程级对它们进行管理。例如,挂起操作涉及把一个进程的地址空间换出内存来为其他进程的地址空间腾出位置。因为一个进程中的所有线程共享同一个地址空间,所以它们都会同时被挂起。类似地,进程的终止会导致进程中所有线程的终止。4.1.3线程的功能特性和进程一样,线程具有执行状态,且可以相互之间进行同步。1.线程状态和进程一样,线程的关键状态有运行态、就绪态和阻塞态,但线程没有挂起态,挂起态是一个进程级的概念。如果一个进程被换出,由于它的所有线程都共享该进程的地址空间,因此也必须都被换出。4.1.3线程的功能特性有四种与线程状态改变相关的基本操作:(1)派生:当派生一个新进程时,同时也为该进程派生了一个线程。随后,进程中的线程可以在同一个进程中派生另一个线程,并为新线程提供指令指针和参数;新线程拥有自己的寄存器上下文和栈空间,且被放置在就绪队列中。(2)阻塞:当线程需要等待一个事件时,它将被阻塞(保存它的用户寄存器、程序计数器和栈指针),此时处理器转而执行另一个就绪线程。(3)解除阻塞:当阻塞线程的一个事件发生时,该线程被转移到就绪队列中。(4)结束:当一个线程完成时,其寄存器上下文和栈都被释放。4.1.3线程的功能特性在单处理器中,多道程序设计使得在多个进程中的多个线程可以交替执行。在下图所示的例子中,两个进程中的三个线程在处理器中交替执行。在当前正在运行的线程阻塞或它的时间片用完时,执行传递到另一个线程。在这个例子中,线程C在线程A用完它的时间片后开始运行,即使此时线程B也在就绪态。是选择B还是选择C是一个调度决策问题。

图4-3单处理器上的多线程例子4.1.3线程的功能特性2.线程同步一个进程中的所有线程共享同一个地址空间和诸如打开的文件之类的其他资源。一个线程对资源的任何修改都会影响同一个进程中其他线程的环境。因此,需要同步各种线程的活动,以便它们互不干涉且不破坏数据结构。例如,如果两个线程都试图同时往一个双向链表中增加一个元素,则可能会丢失一个元素或者破坏链表结构。线程同步带来的问题和使用的技术通常与进程同步相同。4.1.4线程和进程的区别线程和进程的区别在于,子进程和父进程有不同的代码和数据空间,而多个线程则共享数据空间,每个线程有自己的执行堆栈和程序计数器为其执行上下文。多线程主要是为了节约CPU时间,根据具体情况来发挥和利用。线程的运行中需要使用计算机的内存资源和CPU。通常在一个进程中可以包含若干个线程,它们可以利用进程所拥有的资源。在引入线程的操作系统中,通常都是把进程作为分配资源的基本单位,而把线程作为独立运行和独立调度的基本单位。由于线程比进程更小,基本上不拥有系统资源,故对它的调度所付出的开销就会小得多,能更高效的提高系统内多个程序间并发执行的程度,从而显著提高系统资源的利用率和吞吐量。4.1.4线程和进程的区别如今,通用操作系统都引入了线程,以便进一步提高系统的并发性,并把它视为现代操作系统的一个重要指标。02线程分类Threadclassification4.2线程分类线程的实现可以分为两大类:用户级线程和内核级线程,后者又称为内核支持的线程或轻量级进程。4.2线程分类020103任何应用程序都可以通过使用线程库被设计成多线程程序。线程库是用于用户级线程管理的一个例程包。用户级线程在一个纯粹的内核级线程软件中,有关线程管理的所有工作都是由内核完成的。内核级线程在混合系统中,线程创建在用户空间中完成,线程的调度和同步也在应用程序中进行。混合方法4.2.1用户级线程在一个纯粹的用户级线程软件中,有关线程管理的所有工作都由应用程序完成,内核意识不到线程的存在。图4-4(a)说明了纯粹的用户级线程方法。任何应用程序都可以通过使用线程库被设计成多线程程序。线程库是用于用户级线程管理的一个例程包,它包含用于创建和销毁线程的代码、在线程间传递消息和数据的代码、调度线程执行的代码,以及保存和恢复线程上下文的代码。

图4-4用户级线程和内核级线程4.2.1用户级线程在默认情况下,应用程序从单线程开始,并在该线程中开始运行。该应用程序及其线程被分配给一个由内核管理的进程。在应用程序运行(进程处于运行态)的任何时刻,都可以派生一个在相同进程中运行的新线程。派生线程是通过调用线程库中的派生例程完成的。通过过程调用,控制权被传递给派生例程。线程库为新线程创建一个数据结构,然后使用某种调度算法,把控制权传递给该进程中处于就绪态的一个线程。当控制权被传递给线程库时,需要保存当前线程的上下文,然后当控制权从线程库中传递给一个线程时,将恢复那个线程的上下文。上下文实际上包括用户寄存器的内容、程序计数器和栈指针。4.2.1用户级线程上述的所有活动都发生在用户空间中,并且发生在一个进程内,而内核并不知道这些活动。内核继续以进程为单位进行调度,并且给该进程指定一个执行状态(就绪态、运行态、阻塞态等)。4.2.1用户级线程使用用户级线程而非内核级线程有很多优点,包括:(1)由于所有线程管理数据结构都在一个进程的用户地址空间中,线程切换不需要内核态特权,因此,进程不需要为了线程管理而切换到内核态,节省了用户态到内核态的两次状态转换的开销。(2)调度可以是应用程序相关的。一个应用程序可能更适合简单的轮转调度算法,而另一个应用程序可能更适合基于优先级的调度算法。可以做到为应用程序量身定做调度算法而不扰乱底层的操作系统调度程序。(3)用户级线程可以在任何操作系统中运行,不需要对底层内核进行修改以支持用户级线程。线程库是一组供所有应用程序共享的应用程序级别的函数。4.2.1用户级线程用户级线程相对于内核级线程也有两个明显的缺点:(1)在典型的操作系统中,许多系统调用都会引起阻塞。因此,当用户级线程执行一个系统调用时,不仅这个线程会被阻塞,进程中的所有线程都会被阻塞。(2)在纯粹的用户级线程策略中,一个多线程应用程序不能利用多处理技术。内核一次只把一个进程分配给一个处理器,因此一次进程中只有一个线程可以执行。事实上,在一个进程内,我们相当于实现了应用程序级别的多道程序。虽然多道程序会使得应用程序的速度明显提高,但是同时执行部分代码更会使某些应用程序受益。4.2.2内核级线程在一个纯粹的内核级线程软件中,有关线程管理的所有工作都是由内核完成的,应用程序部分没有进行线程管理的代码,只有一个到内核线程设施的应用程序编程接口(API)。例如Windows就使用这种方法。图4-4(b)显示了纯粹的内核级线程的方法。内核为进程及其内部的每个线程维护上下文信息。调度是由内核基于线程完成的。该方法克服了用户级线程方法的两个基本缺陷。首先,内核可以同时把同一个进程中的多个线程调度到多个处理器中;再者,如果进程中的一个线程被阻塞,内核可以调度同一个进程中的另一个线程。内核级线程方法的另一个优点是内核例程自身也是可以使用多线程的。4.2.2内核级线程相对于用户级线程方法,内核级线程方法的主要缺点是:在把控制从一个线程传送到同一个进程内的另一个线程时,需要内核的状态切换。从表面看,虽然使用内核级线程多线程技术会比使用单线程的进程有明显的速度提高,使用用户级线程却比内核级线程又有额外的提高。不过这个额外的提高是否真的能够实现,则取决于应用程序的性质。如果应用程序中大多数线程切换都需要内核态的访问,那么基于用户级线程的方案不会比基于内核级线程的方案好多少。4.2.3混合方法某些操作系统提供了一种混合的用户级线程/内核级线程设施(见图4-4(c))。在混合系统中,线程创建完全在用户空间中完成,线程的调度和同步也在应用程序中进行。一个应用程序中的多个用户级线程被映射到一些(小于或等于用户级线程的数目)内核级线程上。程序员可以为特定的应用程序和处理器调节内核级线程的数目,以达到整体最佳结果。4.2.3混合方法在混合方法中,同一个应用程序中的多个线程可以在多个处理器上并行地运行,某个会引起阻塞的系统调用不会阻塞整个进程。如果设计正确,该方法将会结合纯粹用户级线程方法和内核级线程方生的优点,同时克服它们的缺点。资源分配和分派单元的概念一直体现在单个进程的概念中,即线程和进程的关系是1:1。研究的热点是,在一个进程中提供多个线程。这是一种多对一的关系。此外,还有两种组合,即多对多的关系和一对多的关系。03多核和多线程Multi-coreandmulti-thr

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论