资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第四章 多线程(thread),线程是近年来操作系统领域出现的一个非常重要的机制和技术,其重要程度不亚于进程。线程机制可以提高程序执行的效率,而且也方便用户编程,不但适用于多机系统,对大多数单CPU的个人计算机也同样带来好处,因此当代操作系统都支持线程。,1、 线程的引入,进程的两个基本属性:,资源分配的基本单位:,给每个进程分配一虚拟地址空间,保存进程映像,控制一些资源(文件,I/O设备),有状态、优先级、调度,调度基本单位:,进程是一个执行轨迹。,以上两个属性构成进程并发执行的基础。,对进程系统必须完成的操作:,创建进程,撤消进程,进程切换,缺点:,时间空间开销大,限制并发度的提高,引入线程的目的,进程的局限性,在操作系统中,进程的引入提高了计算机资源的利用效率。但在进一步提高进程的并发性时,人们发现进程切换开销占的比重越来越大;,传统的进程不能很好的利用多处理器,因为一个进程在某个时刻只能使用一个处理器;,进程间通信的效率受到限制;,引入线程的目的:,减小(进程/线程)上下文切换开销;,更好支持多处理器(MP),达到最大程度的并行 ;,简化进程间的通信;,2、 线程的概念,定义:线程是进程内一个相对独立的、可调度的执行单元。有时称轻量级进程。,将原来进程的两个属性分开处理。,每个线程都具有,执行状态;,受保护的线程上下文,当线程不运行时,用于存储现场信息,独立的程序指令计数器,执行堆栈,容纳局部变量的静态存储器,可存取所在进程的内存和其他资源,线程的特性,并行性,:同一进程的多个线程可在一个或多个处理器上并发或并行运行,共享性,:同一个进程中的所有线程共享进程获得的主存空间和一切资源,动态性,:线程也是程序在相应数据集上的一次执行,由创建而产生,至撤销而消亡,有其生命周期,线程的性质,线程是进程内一个相对独立的可执行单元,线程是操作系统中的基本的调度单元,进程中至少要有一个或一个以上的线程,线程可以创建其他线程,线程并不拥有资源,只是使用他们,进程是资源分配和拥有的基本单元。,由于共享资源,线程间需要通信和同步机制,线程有生命期,有诞生和死亡,线程的好处,创建一个新线程花费时间少(结束亦如此),同一进程中两个线程的切换花费时间少,如果机器设有“存储恢复所有寄存器”指令,则整个切换过程用几条指令即可完成),由于同一进程内的线程共享内存和文件,因此它们之间相互通信无须调用内核,适合多处理机系统,线程的应用,前台和后台工作,异步处理工作,加快执行速度,组织复杂工作,多用户服务,线程的状态,由于线程是调度和执行的基本单位,在它的生命过程中有状态的变化:,就绪状态,线程已具备执行的条件,等待调度程序分配给一个,CPU,运行,运行状态,线程正在,CPU,上运行,等待状态,线程正等待某事件发生,进程与线程的比较,调度,:,进程中可能有多个线程,一个线程阻塞并不影响整个进程,进程中的其他线程仍然可以参与调度运行,并发性,:,进程间可并发,同一进程中的线程间亦可并发,拥有资源,:进程拥有资源,进程中有挂起操作,线程不拥有资源,没有权力决定进程或自己从主存撤出,挂起只是进程一级的概念,系统开销,:线程上下文切换比进程上下文切换要快得多,同一进程中的线程切换系统开销小。,地址空间和其他资源,(如打开文件):进程间相互独立,同一进程的各线程间共享某进程内的线程在其他进程不可见。,通信,:进程间通信通过IPC,线程间可以直接读写进程数据段(如全局变量)来进行通信需要进程同步和互斥手段的辅助,以保证数据的一致性,线程控制原语,创建线程原语,撤消线程原语,阻塞或等待原语,挂起一个线程,恢复一个线程,改变优先数,线程组(thread group),每个线程属于某个线程组,每个线程创建时,用户可以显示的说明为它创建一个新的线程组;也可以由系统自动把该线程归入创建该线程的线程所在的线程组,线程组是多个线程的集合,系统将它们归入一个单独的对象,统一加以管理,可为线程组设置不同的特性和保密安全方法,一个线程在已被创建后,不能更改移入其他线程组,单线程进程,单线程进程(模型),用户地,址空间,进程,控制块,用户,堆栈,内核,堆栈,进,程,进程控制块,用户地址空间,用户栈,内核栈,管理者,执行序列,多线程进程,多线程进程(模型),用户,地址空间,进程,控制块,线程控制块,系统,堆栈,用户,堆栈,线程1,线程控制块,系统,堆栈,用户,堆栈,线程N,基于线程的操作系统分类,单进程和单线程系统,单进程和多线程系统,多进程和单线程系统,多进程和多线程系统,3、线程的实现,用户级线程,内核级线程,混合式线程,用户级线程(ULT)User-Level Thread),由用户应用程序建立、调度和管理的线程。,不依赖于,OS,内核,应用进程利用线程库提供创建、同步、调度和管理线程的函数来控制用户线程。如:数据库系统,informix,,,图形处理,Aldus PageMaker,。,调度由应用软件内部进行,通常采用非抢先式和更简单的规则,也无需用户态,/,核心态切换,所以速度特别快。一个线程发起系统调用而阻塞,则整个进程在等待。时间片分配给进程,多线程则每个线程就慢。,线程库:基于多线程的应用程序的开发和运行环境。,创建、撤消线程,在线程之间传递消息和数据,调度线程执行,保护和恢复线程上下文,用户级线程的活动,内核不知道线程的活动,但仍然管理线程所属进程的活动,当线程调用系统调用时,整个进程阻塞,但对线程库来说,线程仍然是运行状态,即线程状态是与进程状态独立的,用户级线程的优点,线程切换不调用内核,调度是应用程序特定的:可以选择最好的算法,ULT可运行在任何操作系统上(只需要线程库),用户级线程的缺点,大多数系统调用是阻塞的,因此核心阻塞进程,故进程中所有线程将被阻塞,核心只将处理器分配给进程,同一进程中的两个线程不能同时运行于两个处理器上,内核级线程(KLT)Kernel-Level Thread,由操作系统的内核建立、调度和管理的线程。,所有线程管理由内核完成,没有线程库,但对内核线程工具提供API,内核维护进程和线程的上下文,线程之间的切换需要内核支持,以线程为基础进行调度,例子:Windows NT,OS/2,内核级线程的优点及缺点,优点:,对多处理器,内核可以同时调度同一进程的多个线程,阻塞是在线程一级完成,内核例程是多线程的,缺点:,在同一进程内的线程切换调用内核,导致速度下降,用户级和内核级线程比较,调度和切换速度,ULT切换快, KLT切换与进程切换相似。ULT通常发生在一个应用进程的诸线程中,无需通过中断进入内核。,系统调用,ULT进行系统调用时,会引起进程的阻塞;KLT进行系统调用时只会引起该线程阻塞。,线程执行时间,ULT以进程为单位调度,KLT以线程为单位调度。,ULT:进程A有1个线程,进程B有100个线程,则A的线程比B快,KLT:进程A有1个线程,进程B有100个线程,则B比A快,使用范围:,ULT广,任何OS, KLT需OS内核支持,调度算法,ULT与OS调度算法无关,可针对应用优化,多处理器支持,KLT可充分利用多处理器,ULT和KLT结合方法,线程创建在用户空间完成,大量线程调度和同步在用户空间完成,程序员可以调整KLT的数量,可以取两者中最好的,例子:Solaris,用户级和内核级线程,P,P,用户空间,线程库,内核空间,2)用户级线程,用户空间,P,内核空间,1)内核级线程,用户空间,线程库,P,内核空间,3)混合式线程,ULT,KLT,Process,P,根据线程运行的地址空间,用户线程:,运行在用户地址空间的线程。,内核线程:,运行在内核空间的线程。,所有用户级线程都是用户线程;,内核级线程可以是用户线程,也可以是内核线程。,NT线程的有关API,CreateThread()函数在调用进程的地址空间上创建一个线程,以执行指定的函数;返回值为所创建线程的句柄。,ExitThread()函数用于结束本线程。,SuspendThread()函数用于挂起指定的线程。,ResumeThread()函数递减指定线程的挂起计数,挂起计数为0时,线程恢复执行。,小结,掌握,线程引入的目的:线程和进程的比较,线程的定义、特性和性质,线程的实现方式:,用户级线程,内核级线程,混合线程,一些基本概念:,线程库,用户线程、内核线程,
展开阅读全文