《操作系统课件:Chapter 4线程》由会员分享,可在线阅读,更多相关《操作系统课件:Chapter 4线程(28页珍藏版)》请在金锄头文库上搜索。
1、Chapter4:线程线程4.2Silberschatz,GalvinandGagne2005OperatingSystemConcepts7thedition,Jan23,2005内容内容n概述n多线程模型n若干线程问题nPthreadsnWindowsXP线程nLinux线程nJava线程4.3Silberschatz,GalvinandGagne2005OperatingSystemConcepts7thedition,Jan23,2005线程线程n线程(轻型进程lightweight process, LWP)是CPU使用的一个基本单元,包括l线程IDl程序计数器l寄存器集l栈空间n一
2、个线程与它的对等线程共享:l代码段l数据段l操作系统资源总体作为一个任务n传统的或重型进程(heavyweightprocess)等价于只有一个线程的任务4.4Silberschatz,GalvinandGagne2005OperatingSystemConcepts7thedition,Jan23,2005线程和进程线程和进程线程和进程线程和进程n调度线程是调度的基本单位,同一进程中的线程切换不会引起进程切换。n并发线程可以提高系统的并发性。n资源进程拥有资源,是资源分配的基本单位,而线程则不拥有资源,但它可以访问创建它的进程所拥有的资源。n上下文切换线程的上下文切换的代价比进程小。4.5S
3、ilberschatz,GalvinandGagne2005OperatingSystemConcepts7thedition,Jan23,2005Windows2000ProcessandThreadWindows2000ProcessandThreadWindows2000Windows2000进程和线程进程和线程进程和线程进程和线程4.6Silberschatz,GalvinandGagne2005OperatingSystemConcepts7thedition,Jan23,2005单个线程和多线程进程单个线程和多线程进程4.7Silberschatz,GalvinandGagne20
4、05OperatingSystemConcepts7thedition,Jan23,2005n响应度高n资源共享n经济性nMP体系结构的运用优点优点4.8Silberschatz,GalvinandGagne2005OperatingSystemConcepts7thedition,Jan23,2005用户线程用户线程n由用户级线程库进行管理的线程,如线程创建、调度等。n内核看不到ULT,线程的创建和调度在用户空间,不需要内核的干预。n例子-POSIXPthreads-Win32 threads-Java threads4.9Silberschatz,GalvinandGagne2005Ope
5、ratingSystemConcepts7thedition,Jan23,2005内核线程内核线程n由内核支持n例子lWindowsXP/2000lSolarislLinuxlTru64UNIXlMacOSX4.10Silberschatz,GalvinandGagne2005OperatingSystemConcepts7thedition,Jan23,2005多线程模型多线程模型n多对一模型n一对一模型n多对多模型4.11Silberschatz,GalvinandGagne2005OperatingSystemConcepts7thedition,Jan23,2005多对一多对一n多个用
6、户级线程映射到一个内核线程n多个线程不能并行运行在多个处理器上。n线程管理在用户态执行,因此是高效的,但一个线程的阻塞系统调用会导致整个进程的阻塞。n用于不支持内核线程的系统中n例子:lSolarisGreenThreadslGNUPortableThreads4.12Silberschatz,GalvinandGagne2005OperatingSystemConcepts7thedition,Jan23,2005Many-to-One模型模型4.13Silberschatz,GalvinandGagne2005OperatingSystemConcepts7thedition,Jan23,
7、2005一对一一对一n每个用户级线程映射到一个内核线程n比多对一模型有更好的并发性n允许多个线程并行运行在多个处理器上n创建一个ULT需要创建一个KLT,效率较差n例子lWindows95/98/NT/XP/2000lLinuxlSolaris9andlaterlOS/24.14Silberschatz,GalvinandGagne2005OperatingSystemConcepts7thedition,Jan23,2005One-to-one模型模型4.15Silberschatz,GalvinandGagne2005OperatingSystemConcepts7thedition,Ja
8、n23,2005多对多多对多n多个用户级线程映射为相等或小于数目的内核线程.n允许操作系统创建足够多的KLTn例子lSolaris9以前的版本l带有ThreadFiber开发包的WindowsNT/20004.16Silberschatz,GalvinandGagne2005OperatingSystemConcepts7thedition,Jan23,2005Many-to-Many模型模型4.17Silberschatz,GalvinandGagne2005OperatingSystemConcepts7thedition,Jan23,2005两级模型两级模型n类似于M:M,只不过它允许一
9、个用户线程绑定到内核线程n例子lIRIXlHP-UXlTru64UNIXlSolaris8andearlier4.18Silberschatz,GalvinandGagne2005OperatingSystemConcepts7thedition,Jan23,2005两级模型两级模型4.19Silberschatz,GalvinandGagne2005OperatingSystemConcepts7thedition,Jan23,2005Thread池池n在池中创建一批线程,等到任务n优点:l利用线程池中的线程来响应请求比创建一个线程更加快速l允许一个应用程序中的线程数量达到线程池的上限4.2
10、0Silberschatz,GalvinandGagne2005OperatingSystemConcepts7thedition,Jan23,2005线程程库nWindows 线程库nPthread线程库nJAVA线程库4.21Silberschatz,GalvinandGagne2005OperatingSystemConcepts7thedition,Jan23,2005Windows线程线程n1对1映射n每个线程包括:l线程idl寄存器集合l堆栈l私有数据n线程主要的数据结构:lETHREAD(executivethreadblock):执行线程块lKTHREAD(kernelthre
11、adblock):核心线程块lTEB(threadenvironmentblock):线程环境块4.22Silberschatz,GalvinandGagne2005OperatingSystemConcepts7thedition,Jan23,2005Linux线程线程nLinux用“任务”这个术语,一般不用“线程”n线程可以通过clone()系统调用创建nclone()类fork()4.23Silberschatz,GalvinandGagne2005OperatingSystemConcepts7thedition,Jan23,2005PthreadsnAPOSIX标注(IEEE1003
12、.1c),用于线程创建和同步n提供了线程有关的API接口n常用于UNIX类操作系统(Solaris,Linux,MacOSX)4.24Silberschatz,GalvinandGagne2005OperatingSystemConcepts7thedition,Jan23,2005Java线程线程nJava线程由JVM管理nJava线程创建l扩展java.lang.Thread类l实现Runnable接口4.25Silberschatz,GalvinandGagne2005OperatingSystemConcepts7thedition,Jan23,2005线程例子程例子npubliccl
13、assDoSomethingimplementsRunnableprivateStringname;publicDoSomething(Stringname)this.name=name;publicvoidrun()System.out.println(name+:+i);4.26Silberschatz,GalvinandGagne2005OperatingSystemConcepts7thedition,Jan23,2005运行运行线程例子程例子npublicclassTestRunnablepublicstaticvoidmain(Stringargs)DoSomethingds1=newDoSomething(“1);DoSomethingds2=newDoSomething(“2);Threadt1=newThread(ds1);Threadt2=newThread(ds2);t1.start();t2.start();4.27Silberschatz,GalvinandGagne2005OperatingSystemConcepts7thedition,Jan23,2005Java线程状态线程状态EndofChapter4