已阅读5页,还剩131页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第2章进程管理,2.1进程的引入2.2进程定义与控制2.3进程调度2.4进程间的相互作用2.5进程通信2.6线程2.7UNIX进程模型习题,2.1进程的引入,2.1.1顺序程序顺序程序是指程序在计算机上严格按照写入的顺序执行。顺序程序设计也就是指不同程序的按序执行。顺序程序设计具有以下主要特征:(1)顺序性:当多个程序在处理机上运行时,处理机严格按照程序结构所指定的顺序执行,程序的每一步都必须在上一步执行后才能开始。(2)资源独占性:一个程序在执行时,独占全部资源。(3)可再现性:如果程序的初始条件相同,则其执行的结果相同,与程序的执行速度无关,即在同一数据集上执行的结果均相同。,程序顺序执行的特征,程序的顺序执行特征:顺序性、封闭性、可再现性,I1,C1,P1,I2,C2,P2,语句1,语句2,语句3,语句4,语句5,前趋图与前趋关系,前趋图(PrecedenceGraph)一个有向无循环图描述程序或程序段之间执行的前后关系前趋关系“”如果:(Pi,Pj),也可以写成:PiPj则称:Pi是Pj的直接前趋,Pj是Pi的直接后继初始节点:没有前趋终止节点:没有后继,2.1.2多道程序设计在第1章的内容里我们讲述了操作系统具有并发性、共享性、虚拟性和不确定性等特征。形成这些特征的原因就是引入了多道程序设计。采用多道程序设计技术,计算机中的CPU和外围设备的利用率得到了很大提高。,举一个“统筹方法”的例子,任务是沏一壶茶,清洗水壶需1分钟,烧开水需12分钟,拿茶叶需1分钟,洗茶壶需2分钟。如图2.1所示,如果按照上述顺序执行,总共花费16分钟。,图2.1统筹方法,为了更好地理解这种系统,我们来看一看图2.2。图2.2(a)描述了在一个多道程序的环境中,内存存放的四道程序顺序执行的情况。在这种情况下,四道程序总的运行时间为每个程序运行时间之和。在图2.2(b)中,将四道程序抽象成为四个各自拥有自己控制流程的独立运行单位(进程),每个运行单位都有自己的运行环境。,图2.2四道程序的执行(a)顺序执行;(b)四道程序并发执行的时间关系,程序的并发执行,并发执行时的特征间断性、失去封闭性、不可再现性,2.1.3程序并发执行的特性(1)程序结果的不可再现性。并发程序执行时,结果随执行的相对速度不同而变化,在不同的时间运行,结果各不相同。(2)独立性和制约性。独立性是指每一个程序都是一个相对独立的实体,用以实现不同的功能。(3)程序执行的间断性。并发执行的程序之间存在着相互制约的关系,这就意味着程序执行时间会不连贯。,(4)资源共享。多个程序可以使用同一资源。多道程序的引入就是为了提高资源利用率和系统效率,因此,如果程序不能并发执行,多道程序也就是失去了它存在的意义。(5)程序和计算的不一致。在顺序执行的程序中,程序和计算始终保持一一对应的关系,但在程序的并发执行中,程序执行的环境不同,这种对应关系将不复存在。,多道程序设计的特点如下:(1)多道。主存中有多道程序,它们在任一时刻必须处于就绪、运行、阻塞三种状态之一。(2)宏观上并行。从宏观上看,它们在同时执行。(3)微观上串行。从微观上看,它们在交替、穿插地执行。,其主要优点是:(1)CPU的利用率高。(2)设备利用率高。(3)系统吞吐量大。,2.1.4与时间有关的错误在多道程序的执行当中,不可避免地会发生程序之间相互制约的情况。为了便于理解,我们先来看一个实际生活中遇到的例子飞机订票系统。一个飞机订票系统可以有多个订票处的n个订票终端。如图2.3所示,现假设n=2,公共数据区为Hi(i=1,2,n),分别存放各次班机的现存票数,T1和T2表示售票终端的进程,。T1和T2进程的程序如下:,T1:T2:公共数据区为Hi(i=1,2,n),分别存放各次班机的现存票数,T1T2表示售票终端的进程,BeginBegin按乘客需要查找到Hi;按乘客需要查找到Hi;R1:=Hi;R2:=Hi;ifR1=1thenifR2=1thenBeginbeginR1:=R1-1;R2:=R2-1;Hi:=R1;Hi:=R2;售出一张票;售出一张票;endendelse提示“票已售完”;else提示票已售完;end;end;,图2.3飞机订票系统模型,2.2进程定义与控制,2.2.1进程的概念1进程的定义许多科学家给进程下过定义,其中有些很相似,有些侧重的方面各异。其中,能够反映进程实质的定义有:(1)进程是程序的一次执行。(2)进程是可以和别的计算并发执行的计算。(3)进程是定义在一个数据结构上并能在其上进行操作的一个程序。(4)进程是程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位。,2进程的组成进程是在一个上下文的执行环境中运行的,这个执行环境称为进程的映像,或称进程图像,它包括处理机中各个通用寄存器的值、进程的内存映像、打开文件的状态和进程占用资源的信息等。进程映像的主要部分是存储映像。,进程的存储映像由以下几部分组成:进程控制块(ProcessControlBlock,即进程状态信息)、进程执行的程序、执行时所需要的数据和进程执行时使用的工作区,如图2.4所示。,图2.4进程的组成,2.2.2进程控制块进程控制块记录了进程的标识信息、状态信息和控制信息。不同的操作系统中,PCB包含的内容各不相同,大致有以下三类。(1)标识信息:惟一地标识一个进程,主要有:进程标识:为了标识系统中的各个进程,每个进程必须有一个且只有一个标识名或标识数,也就是在创建进程时系统分配的惟一的代码,它只能在操作系统内部使用,如一些数字标识符或表索引号。用户标识:指明一个进程的所有者,如登录的名称。父进程标识:是指创建该进程的进程标识。,(2)现场信息:记录进程使用处理器时的各种现场信息,主要有CPU通用寄存器的内容,CPU状态寄存器的内容以及栈指针等。,(3)控制信息:操作系统对进程进行调度管理时用到的信息,主要有:进程状态:标识进程当前处于运行、就绪或阻塞三种状态中的哪一种,是进程调度的主要依据。调度信息:标识进程的优先级,进程正在等待的事件等。数据结构信息:标识进程间的联系,如指向该进程的父进程控制块的指针,指向该进程的子进程列表的指针等。,队列指针:在该单元存放下一个进程的PCB的块首址,将处于同一状态的进程链接成一个队列,便于对进程实施管理。位置信息:记录进程在内存中的位置和大小信息,如程序段指针,数据段指针。通信信息:指进程相互通信时所需的信息,如消息队列(记录可消费资源的列表)指针,进程间的互斥和同步机制。特权信息:记录进程访问内存的权限。存储信息:记录进程在辅存中的位置及大小。资源占有使用信息:标识进程的可重用资源和可消费资源,是对进程占有和使用CPU及I/O设备的情况记录。,进程的创建有以下几个基本步骤:(1)创建进程标识。即在主进程表中为新进程添加一个表项,进程就得到了一个惟一的标识符,并被分配进程控制块空间。(2)分配内存和其他资源。操作系统根据程序、数据的大小,为进程分配合理的内存空间。(3)初始化进程控制块。这一步是初始化进程的控制信息,包括与调度相关的信息,进程间通信的信息及进程的优先级信息等。(4)将创建的进程置于就绪队列。进程创建工作结束后,还要负责把进程放入就绪队列,等待系统根据一定的算法调度执行。,于进程创建原语处着重讨论,2.2.3进程的基本状态及其转换1进程的基本状态进程因创建而存在,因撤消而消亡,此期间是进程的生命期。进程在它的生命期内,由于内因和外因的影响,会呈现不同的状态,每一种状态都有各自的特征。一般地,进程具有三种基本状态:运行态、就绪态和阻塞态。,运行态(Running):进程已获得必要的资源,并占有处理机,处理机正在执行该进程的程序。就绪态(Ready):进程等待系统为其分配CPU,而CPU被其他进程占用,所以暂时不能运行,但此时进程已经具备了执行的所有条件。阻塞态(Blocked):也可称为等待态、挂起态或睡眠态等,此时进程因等待某个事件而暂时不能运行,例如等待某个I/O事件的完成,或等待使用某个资源等。,2进程状态转换原因运行阻塞:进程出让CPU,等待系统分配资源或某些事件的发生,如暂时不能访问某一资源,操作系统尚未完成服务,系统正在初始化I/O设备,等待用户的输入信息等。运行就绪:进程分配的时间片已用完,或者在中断机制下,有更高优先级的进程进入系统,这时进程进入就绪队列等待下一次被选中而占用CPU。当进程创建成功时处于就绪态。阻塞就绪:处于阻塞队列中的进程,当其等待的事件已经发生或等待的资源可用时,此进程将进入就绪队列竞争CPU。就绪运行:进程被调度程序选中占用CPU。,图2.6五种进程状态转换,以上是进程的基本状态转换关系。实际的操作系统中进程的状态及转换要更为复杂,引入了五种状态,即运行、就绪、新建、阻塞和终止。,对于有部分进程存在于外存中的情况,进程又增加了挂起就绪态(存在于外存可以执行的进程状态)和挂起阻塞态(存在于外存等待某事件的进程状态),其状态转换图如图2.7所示。,图2.7七种进程状态转换,3.进程队列在系统中存在有许多不同状态的进程,为了便于对诸多进程进行管理和调度,必须将各进程的PCB按照某种方法组织起来,队列就是其中一种比较常用的方法。系统将同种状态的PCB排成一个队列,利用指针组成单向链表或双向链表,方便查找和调度。当进程状态变化时,它就要被排到另外的队列中,引起进程的出队和入队。处理器有专门管理出队和入队工作的模块,简称队列管理。图2.8描述了队列管理的过程。,图2.8队列管理(1),数目一个系统中,数十个、数百个甚至数千个链接组织方式把具有同一状态的PCB链接成一个队列;就绪队列、若干个阻塞队列、空队列.,图2.8队列管理(2),数目一个系统中,数十个、数百个甚至数千个索引组织方式建立相应的索引表就绪索引表、阻塞索引表,2.2.4进程控制进程控制的主要任务是创建和撤消进程以及实现进程的状态转换。为了对进程进行有效的控制,操作系统必须设置一套控制机构,它具有以下功能:创建一个新进程,撤消一个已经运行完的进程,改变进程状态,实现进程间的通信,这就是操作系统内核(kernel)的功能。原语(primitive)是指由机器指令构成的可完成特定功能的程序段。它是一个机器指令的集合,在执行时不能中断,是一个不可分割的整体。在现代操作系统中,原语的执行多采用屏蔽中断的方法。随着计算机硬件的发展,还可以将原语固化。,进程创建的时机有:P.44进程终止的原因主要有以下几种:(1)正常结束:进程完成了程序代码段指定的所有操作,让出CPU。(2)非法使用特权指令:比如进程在算态下使用了管态的指令。(3)内存空间不足:进程申请的内存空间太大,系统无法满足。(4)等待时间过长:系统设定有进程等待的最大时间,超出的进程都将被终止。(5)地址越界:进程使用的地址超出了规定的可用地址空间。(6)非法使用共享内存区:各进程对共享内存的使用权限不同,进程的操作要视权限而定,不得越权使用。,(7)子进程被父进程终止:子进程是父进程根据需要创建的,所以当子进程完成它的使命后,父进程会终止它,并收回占用的资源。(8)父进程被终止,其所有子进程也同时被终止:如果父进程被终止,就像大树被连根拔起一样,它所有的子进程都将一起被终止。(9)算术错误:比如0作为除数,算术溢出等。(10)输入/输出失败:比如输入/输出设备没有响应等。(11)操作系统干预终止。,1.进程创建原语(createprimitive)系统中存在很多进程,这些进程是如何创建成功的呢?通常有两种方式来创建进程:一种是在系统生成时就建立起一些系统进程,例如系统调度进程;另一种是经创建原语产生进程,这样的进程是非常驻的系统进程和用户进程。当一个进程要完成规定任务时,它可以创建若干个子进程使其负担要完成任务中的部分功能。子进程同样可以创建自己的子进程,从而形成了进程家族。图2.9给出了进程的家族关系。,图2.9进程的家族关系树,(1)资源分配严格。子进程仅能分配到父进程所拥有的资源,用完后要归还其父进程。(2)进程控制灵活。可根据需要给进程以不同的控制权利。(3)进程结构清楚,关系明确。,进程创建原语的具体步骤如下:(1)系统为进程分配一个空白PCB,产生一个惟一的进程标识。(2)为进程映像分配地址空间。如果该进程有父进程,操作系统会根据父进程提供的要求为其进行分配;如果此进程共享已存在的地址空间,则应建立相应的链接。(3)PCB初始化。初始化PCB的参数(如进程标识名,初始CPU状态,优先数以及资源清单等),新进程的初始化状态一般为就绪态。(4)设置相应的链接,将该进程插入进程的就绪队列和家族队列中。,RAM程序+数据,PCB70,PCB57,进程创建,2进程撤消原语(terminateprimitive)进程生命期的最后阶段是进程撤消阶段。如果该进程是子进程,则只对该进程撤消;如果该进程是父进程,那么在撤消此进程的同时,其相应的所有子进程也被同时撤消;如果撤消的进程处于运行状态,则中断处理机,保护CPU现场,停止执行该进程,并设置重新调度标志。根据状态指出的该进程所在队列,将其从队列中撤消。,进程撤消原语的具体步骤如下:(1)在PCB集合中找到要撤消的进程。(2)将被撤消的进程所占有的资源全部归还。若资源属于该进程祖先的或撤消者的,都应归还;若资源属于撤消者自己的,则消去它的资源描述块。(3)撤消该进程的子进程。(4)归还PCB空间。,进程撤消,引起进程终止(Termination)的事件正常结束:执行到最后的结束指令、中断异常结束:出现错误或因故障而被迫终止外界干扰:进程应外界的请求而终止运行进程撤消的过程检索进程状态、结束并置调度标志、撤销其所有的子进程、归还资源、移出队列一个进程可以向其父进程申请撤消自己;也可以因父进程的被撤销而被同时撤消。,3.进程阻塞原语(blockprimitive)阻塞是指进程在执行过程中让出处理机,等待一个事件的发生或一个操作的完成。当一个进程所期待的某一个事件尚未出现时,该进程调用阻塞原语把自己阻塞起来。进程的阻塞是自身调用阻塞原语的结果,是自愿的行为,如等待资源、I/O操作等。阻塞原语的具体步骤如下:(1)中断进程的执行,将CPU状态保存到PCB中。(2)改写PCB中的相应内容,并把进程插入相应的阻塞队列。,4.进程唤醒原语(wakeupprimitive)当进程等待的事件发生或操作完成后,操作系统会将被阻塞的进程唤醒,进入就绪队列。唤醒原语的具体步骤如下:(1)从阻塞队列中取出要唤醒进程的PCB。(2)改写PCB中的相应内容,并把进程插入就绪队列。,5.进程挂起原语(suspendprimitive)挂起原语的具体步骤如下:(1)在PCB集合中找到要挂起的进程。(2)检查该进程的状态。如该进程为活跃阻塞态,则改为静止阻塞;如为就绪态,则改为静止就绪;如为运行态,则停止其运行,进入静止就绪,并从活跃就绪队列中按照某种算法选择一个进程投入运行。,6.进程激活原语(activeprimitive)对应于挂起,激活也称为解挂,它使被挂起的进程重新活跃起来,也就是把进程从外存调入内存。存在多种激活方式,如激活一个指定标识符的进程,或激活某个进程及其所有“子孙”进程等。和唤醒原语相同,激活原语也只能由其他进程调用。激活原语与挂起原语所做的工作正相反,具体步骤如下:,(1)查找要激活进程的PCB。(2)检查该进程的状态。若为静止就绪,则改为活跃就绪态;若为静止阻塞,则改为活跃阻塞态。当激活后的进程处于活跃就绪时,将引起处理机的重新调度。,2.2.5进程的特征和其他概念一样,进程也有自己独特的性质:(1)并发性:多个进程并发执行同一代码段,进程的执行时间是可以相互重叠的。(2)动态性:相对于静止的程序,进程存在生命期,有不同状态的转换,是一个动态的过程。(3)独立性:在系统中,每一个进程都可独立执行,它是资源分配和调度的独立单位。,(4)制约性:是指一个进程的执行可能要依赖其他相关进程的执行结果,形成进程之间的相互等待。(5)异步性:是指进程执行的时间是相对独立、不可确定的。(6)结构性:每个进程都有固定的结构,都由程序段、数据段和PCB三部分组成。,2.4进程间的相互作用,2.4.1进程间的同步和互斥在系统中有一些需要相互合作、协同工作的进程,它们之间的相互联系称为进程的同步。另外一种情况是多个进程因争用临界资源而互斥执行,叫做进程的互斥。所谓临界资源,也可叫做独占资源,是指在一段时间内只允许一个进程访问的资源。,GO,2.5进程通信,进程通信的概念进程通信的类型消息传递通信的实现方法消息传递系统实现中的若干问题消息缓冲队列通信机制,进程通信的概念和类型,低级通信(互斥、同步)利用信号量机制实现进程间的数据传递。缺点:效率低;对用户不透明。高级通信(进程通信)进程之间利用OS提供的一组通信命令,高效地传送大量数据的信息交换方式。优点:高效;方便,简化了通信程序的设计。,进程通信的类型,共享存储器系统基于共享数据结构的通信方式低级基于共享存储区的通信方式高级消息传递系统消息(Message报文)及相关的一组命令直接通信方式和间接通信方式管道通信系统管道(Pipe文件):用于连结一个读进程和一个写进程以实现他们之间通信的一个共享文件。双方进程的协调:互斥、同步、确定对方存在,图2.13进程P1、P2共享一个存储区,共享存储器系统,消息传递通信的实现方法,直接通信方式源进程利用OS提供的发送命令原语,直接把消息发送给目标。Send(Receiver,message)、Receive(Sender,message)间接通信方式进程之间通过一个作为共享数据结构的中间实体信箱,以消息暂存方式实现的通信。操作原语:信箱的创建、撤消;消息的发送、接收。信箱的创建和拥有者:OS或用户(通信)进程。信箱的种类:私用信箱、公用信箱、共享信箱利用信箱通信的进程之间的关系一对一、多对一、一对多、多对多,1)直接通信方式这种方式是利用send原语和receive原语实现通信的:send(P,message):把消息message传递到进程P。receive(P,message):从进程P接收消息message。2)间接通信方式这种方式是利用信箱为媒介进行消息传递的。信箱是一个用来对一定数量的消息进行缓存的地方。信箱是一段存储区,每一个信箱用标识符加以区分,由信箱头和信箱体两部分组成。信箱头存放控制信息,信箱体存放消息内容。一个信箱可以被多个进程共享,这就实现了消息的广播发送。间接通信方式的send原语和receive原语如下:send(X,mail):邮件mail送到信箱X中。receive(X,mail):接收信箱X中的邮件mail。,2.5.4管道管道(pipe)通信是一种共享文件模式,它基于文件系统,连接于两个通信进程之间,以先进先出的方式实现消息的单向传送。管道是一个特殊文件,在内核中通过文件描述符表示。在UNIX系统中,管道的创建是利用函数pipe()实现的。管道创建完毕后,返回两个分别用于读、写操作的文件描述符fd0、fd1。读管道时调用read()函数,利用参数fd0从管道中读取字节。对管道执行写操作的进程调用write()函数,利用参数fd1向管道写入信息,见图2.14。,图2.14UNIX管道,内核创建管道时,生成一个先进先出的数据结构,例如UNIX系统中管道的创建形式是:intfd2;pipe(fd);/fd0是读取端文件指针,fd1是写入端文件指针,需注意的是:(1)通过系统调用write和read进行管道的写和读。(2)由于管道是一个单向通信信道,因此如果进程间要双向通信,通常需要定义两个管道。(3)只适用于父子进程之间的通信。管道能够把信息从一个进程的地址空间拷贝到另一个进程的地址空间。,消息传递系统实现中的问题,通信链路网络中:显式调用“建立/拆除连结原语”单机中:系统自动建立/拆除连结,只需调用发送原语消息格式消息头(单机简单)+消息正文定长、变长消息格式。通常系统同时支持两种格式。进程同步发送进程阻塞、接收进程阻塞发送进程不阻塞、接收进程阻塞发送进程和接收进程均不阻塞,选讲,消息缓冲队列通信机制,Hansen教授首先提出的消息缓冲队列数据结构消息缓冲区PCB中有关通信的数据项,进程APCB(B)进程B,消息缓冲通信机制工作原理消息是由发送方形成,通过一定的机制传递给接收方的一组信息,它的长度可以固定,也可以变化。每个消息都由消息头和消息体组成。系统中有一定数量的消息缓冲区,每个缓冲区包含了发送进程标识、消息类型、消息长度、控制指针以及消息正文等信息。其主要结构包含:,指向发送进程的指针:Sptr。指向下一信息缓冲区的指针:Nptr。消息长度:Size。消息正文:Text。消息缓冲通信机制的基本工作原理是:把消息缓冲区作为进程通信的一个基本单位,借助系统提供的发送原语Send(A)和接收原语Receive(B),实现进程之间的通信。,2.6线程,进程作为计算机的基本计算调度单位,在现代操作系统的发展中出现了一些问题:(1)进程的并发执行使得进程调度的工作量日益增大,系统将大量精力耗费在进程调度和分配内存上,系统效率得不到有效的提高。(2)进程之间的通信延迟很大,使得频度较高的通信过程效率低下。(3)进程间的并行度不是人们预想的效果。,2.6.1线程的引入1多线程(multithread)多线程指的是操作系统支持在单个进程中执行多个线程的能力。传统的单进程单线程的执行方法使线程的概念并不引起人们的注意。MS-DOS是一个支持单用户进程、单线程的操作系统。UNIX操作系统支持多用户进程,但每个进程也只支持一个线程。这些设计方法称为单线程机制。在WindowsNT、Solaris、Mach和OS/2及一些其他操作系统中采用了多进程且每个进程支持一个以上线程的多线程机制。图2.16给出了单线程和多线程的实现模型。,图2.16线程模型(a)单线程模型;(b)多线程模型,在多线程环境中,进程被定义为保护单位和资源分配单位,在一个进程内部可以有一个或多个线程,每一个线程具有如下特征:线程的执行状态包括运行、就绪和等待等。当不处于执行状态时,要保存线程上下文环境。可以把线程看成是进程内一个独立的程序计数器的运转。一个执行栈。进程中的所有线程共享所属进程内的主存和其他资源。,图2.17说明了多线程与进程的关系。在单线程的进程模式中,进程的表示包括进程控制块、程序、数据、进程执行时的处理调用函数和从函数返回的所用的栈区。当进程执行时,处理器中的寄存器由该进程控制。当进程不处于执行状态时,这些寄存器的内容就被保护在进程控制块中。在多线程的环境中,仍然有单个进程控制块和与进程相关联的用户地址空间,但是每个线程都有各自的线程控制块和用户栈区。在控制块中包含有寄存器映像、优先级及有关的状态信息,这样保证了各线程运行环境的独立性,见图2.18。,图2.17进程与线程间的关系,图2.18多线程模型,在进程模型中,每个进程有一个地址空间、一个单独的程序计数器值和栈现场。而在线程模型中,进程有一个地址空间、多个程序计数器值和栈、现场。,在不同的结构中,线程和进程的含义及工作方式都各不相同:(1)在单进程单线程结构中,没有线程的概念,进程就是线程,线程也是进程。(2)在单进程多线程结构中,一个进程中的所有线程都共享该进程的资源和地址空间,访问相同的数据源。(3)在多进程单线程结构中,一个进程创建一个线程,等价于单进程单线程结构的并发执行。(4)在多进程多线程结构中,多个进程并发执行时,在每个进程内部存在的多个线程也在并发执行。,线程的引入,相对进程来说,带来很多好处:(1)创建和撤消线程的开销非常小。无论从时间的长短上,还是从占用内存空间的大小上,线程都有不可小看的优势。(2)切换迅速。线程间的切换需要换进/换出的内容远比进程小得多,速度自然就快得多。(3)通信效率高。同一进程中的线程由于共享同一地址空间,通信时不需要借助内核功能。(4)并发度高。在多处理机系统中,对进程的个数是有所限制的,但对线程的个数不存在这种限制,这更发挥了多处理机系统的优势。,2线程的状态和进程一样,线程也有生命期,也要经历从创建到撤消的过程。线程的主要状态是运行、就绪和等待状态。与线程状态变化有关的有以下4个基本的线程操作:(1)创建(spawn)。进程创建的过程中也创建了线程,一个线程可以在这个进程内部再创建其他的线程。,(2)阻塞(block)。当一个线程需要等待一个事件时,它将被阻塞。(3)解除阻塞(unblock)(就绪)。当线程等待的一个事件发生后,就可解除原先的阻塞状态,将其移到就绪队列中。(4)终止(finish)。当线程完成了任务后,就释放它所占用的寄存器上下文和栈空间。,2.6.2线程的实现机制线程的实现机制有用户级线程和核心级线程。1用户级线程(ULT)用户级线程是指由应用程序管理线程,核心感觉不到线程的存在。图2.19给出了用户级线程的示意图。应用程序利用线程库进行多线程程序设计。,图2.19用户级线程示意图,2核心级线程(KLT)核心级线程也称内核线程,它运行于核心中,通过核心来管理。图2.20给出了核心级线程的示意图。,图2.20核心级线程示意图,2.6.3线程与进程的比较最初的线程伴随进程的创建而来,之后由这个线程再创建其他的线程,与进程既有密切的联系,又存在着很大的差别:(1)线程的调度与传统的进程调度类似,即在就绪线程中选择合适的线程占用处理机。,(2)线程像进程一样也具有并发性,即同一个进程的多个线程在一个处理机上并发执行,或在多个处理机上并行执行。(3)同一进程中的线程共享进程的资源和状态,但这些资源和状态不归线程所有,它们存在于进程的同一地址空间。(4)进程的一次调度要引起两对进程上下文的4次切换,系统开销自然很大。线程在切换时开销就小得多。图2.21给出了WIN32中进程和线程间的关系。,图2.21WIN32中进程和线程间的关系,例2.6图2.22显示了对两个不同主机的远程过程调用实现。单线程的程序实现见图(a),这时,对这两个主机的访问是顺序进行的,它需要依次等待每一个服务器的响应。如果由进程P1中的线程1、线程2分别实现RPC,实现对两个不同主机的访问(见图(b),可以获得性能上的提高。这两个线程的访问请求虽然是串行发出的,但在线程1提出RPC请求进入阻塞态并等待请求的完成时,进程P1的线程2就可能被调度,从而发出RPC请求2,所以进程P1并行地等待两个主机的响应结果。,图2.22使用线程的远程过程调用(a)单线程时的RPC请求处理;(b)多线程时的RPC请求处理,2.8Windows2000/XP的进程和线程模型,2.8.1Windows2000/XP的进程和线程模型总述进程对象由进程的属性、定义的可执行操作和服务组成。用户使用进程对象类创建进程,对象类就是生成新进程的模板,并在建立实例时给属性赋值。进程对象的属性有:进程标识符PID、资源访问令牌(AccessToken)、进程优先级(BasePriority)及默认亲合处理器(由进程事先请求的处理器)集合(ProcessorAffinity)等。,2.8.2Windows2000/XP的进程实现1Windows2000/XP进程的定义经典操作系统理论中,定义进程是程序的一次动态执行过程。这一定义说明,进程是程序动态执行时的一个实体(Instance)。,Windows2000/XP对进程的定义是:进程是执行程序实例的线程使用的一系列资源的包容器。其主要组成如下:(1)专用的虚拟地址空间。每一个进程都拥有专用的地址空间(02GB)。(2)可执行程序。它定义初始代码和数据,并映射到进程的虚拟地址空间。,(3)访问令牌(AccessToken)。系统通过访问令牌识别运行该进程的用户、所在的安全组及其特权级。(4)进程标识(PID)。这是进程在系统中的惟一标识符。(5)至少一个线程。没有线程,Windows进程的程序就无法运行。一个进程可以有许多个线程。(6)系统资源,例如信号量、通信端口、文件等。它们是程序执行时,由操作系统分配给该进程的。系统资源体现为对象表,每个进程有一个对象表。,2Windows2000/XP进程机制的实现1)Windows2000/XP进程机制的特点Windows2000/XP与其他操作系统一样实现了进程的基本功能,此外,Windows2000/XP中的进程实现还有以下特点:(1)与UNIX的操作系统不同,Windows2000/XP的进程树并不是完全的树形结构。windows进程管理程序在它所管理的子进程之间不具有父进程、子进程或其他关系。(2)与过去的操作系统不同,Windows2000/XP提供了许多新引进的高效的IPC机制,包括共享内存和优化信息传送工具。(3)windows进程均被作为对象实现,采用了客户/服务器模型,因此操作系统体现了服务器进程,每个服务器进程使用多个线程来处理同时从多个客户来的请求。,2)Windows2000/XP进程的实现(1)进程相关数据结构的简介。每个Windows进程都由一个执行体进程块(EPROCESS)表示。,图2.28Windows2000/XP的进程结构,(2)EPROCESS块。EPROCESS块结构比较庞大,按用途分大体可以分为内核进程块(KPROCESS)、进程标识符(PID)、配额块、虚拟地址描述符、工作集信息、虚拟内存信息、本机调用端口信息、访问令牌、设备映射信息、进程环境块指针(PEB)以及WIN32子系统进程块指针几部分。,表2.1KPROCESS的块结构说明,2.Windows2000/XP进程的创建和撤消1)进程的创建进程的创建可分为以下几个阶段:WIN32APICreateProcess要找到合适的可执行映像。(2)系统已经打开了一个有效的Windows2000/XP可执行文件,并为它创建了一个内存映射区域对象,这时要调用系统服务为它创建一个执行程序进程对象,具体来说就是创建并初始化EPROCESS块、创建并初始化进程地址空间、创建并初始化KPROCESS块、设置PEB块等。(3)系统为新进程创建初始线程。,BOOLCreateProcess(LPCTSTRlpApplicationName,/pointertonameofexecutablemoudle指定可执行模块的字符串LPTSTRcmdLine,/pointertocommandlinestring用来指定要运行的命令行LPSECURITY_ATTRIBUTESlpProcessAttributes,/pointertoprocesssecurityattributes决定是否返回的句柄可以被子进程继承LPSECURITY_ATTRIBUTESlpThreadAttributes,/pointertothereadsecurityattributesBOOLbInheritHandle,/handleinheritanceflag从调用进程处继承了句柄。DWORDdwCreationFlag,/指定附加的、用来控制优先类和进程的创建的标志。LPVOIDlpEnviroment,/Enviromentvariable指向一个新进程的环境块LPCTSTRlpCurrentDirectory,/Childscurrentdirectory指定子进程的工作路径LPSTARTUPINFOlpStartupInfo,/pointertoStartupInfo决定新进程的主窗体如何显示的STARTUPINFO结构体LPPROCESS_INFORMATIONlpProcessInformation/pointertoPROCESS_INFORMATION接收新进程的识别信息),返回值:如果函数执行成功,返回非零值。如果函数执行失败,返回零,可以使用GetLastError函数获得错误的附加信息。注释:CreateProcess函数除了创建一个进程,还创建一个线程对象。这个线程将连同一个已初始化了的堆栈一起被创建,堆栈的大小由可执行文件的文件头中的描述决定。线程由文件头处开始执行。,2)进程的撤消进程通过调用ExitProcess或TerminateProcess来撤消。其中,ExitProcess是进程的正常终止方式,它将完成以下操作:(1)通知所有该进程加载的DLL,该进程即将被撤消。(2)关闭该进程打开的所有对象句柄。(3)终止该进程所有线程的执行。(4)将在该进程对象上等待的所有线程设为有信号状态。(5)将在该进程所有线程对象上等待的所有线程设为有信号状态。(6)撤消进程地址空间。(7)减少对进程对象的引用计数。,2.8.3Windows2000/XP的线程实现1线程的定义线程是在进程空间中代码实际执行的路径,它是Windows2000/XP进行调度的实体,是进程的必要组件。它的主要组成如下:(1)CPU寄存器的内容,用以保存寄存器的状态。(2)两个堆栈,一个在内核模式下被线程使用,另一个在用户模式下被线程使用。(3)本机线程存储区(TLS),供子系统、运行库和DLL使用。,(4)有时候线程有自己的访问令牌,因此在拥有多个线程的进程中,线程的特权可能与进程的不同,其特权级可以高于进程以及其他线程。(5)线程标识,它是该线程在系统中的惟一标识符。,一个进程可以拥有若干个线程,这些线程并发地执行进程地址空间中的代码,与多进程执行相比,多线程具有以下优点:(1)它们共享该进程的所有资源,如地址空间、打开的文件、对象等。(2)同一进程中的线程之间的通信可以通过直接读写进程的数据段来进行,而不必借助进程间的通信机制(IPC),当然在通信时仍然需要同步与互斥手段。,(3)在同一进程内,线程的上下文切换比进程的上下文切换快得多(4)从用户界面设计角度看,多线程也为交互式应用程序提供了良好的基础。,2Windows2000/XP中线程的状态变迁Windows2000/XP中线程总共有7种状态,见图2.29。,图2.29Windows2000/XP中线程的状态变迁,(1)初始态(initialized):表示线程正在初始化。(2)就绪态(ready):线程未被阻塞,等待分得时间片运行。(3)准备态(standby):线程已被选为某一特定处理器的下一个执行对象,等待条件合适时调度程序就对其进行切换。(4)运行态(running):调度程序完成对线程的上下文切换后,线程就进入运行态立即开始执行。,(5)等待态(waiting):一个线程可以按以下几种方式进入等待态:一个线程自愿等待一个对象以便同步自身的执行,此时操作系统将其切换到等待态代替它等待;环境子系统能够指示一个线程将其自身挂起。(6)转换态(transition):线程在准备执行时而其内核堆栈却仍处于换出状态时进入转换态。(7)终止态(terminated):线程在执行完成后进入终止状态。,2.Windows2000/XP线程的创建和撤消1)线程的创建Windows2000/XP中线程的创建工作是由下列各步骤完成的:(1)用CreateThread在进程的地址空间内为线程创建用户模式堆栈。(2)初始化线程上下文环境(与使用CPU结构相关)。,(3)调用内核例程NtCreateThread创建一个处于挂起状态的线程对象,其中包括:增加所属进程信息块结构中的线程计数;创建并初始化新线程的线程信息块;为新线程生成线程ID;从非交换内存空间中为新线程分配内存和堆栈。(4)设置线程运行起始地址。(5)调用KeIntializeThread设置KTHREAD块中的信息,如优先级、时间片、理想处理器等。,(6)创建并检查安全令牌。(7)通知WIN32子系统线程创建完毕,可以开始WIN32子系统的线程初始化。由WIN32子系统负责控制线程载入并初始化可执行映像,最后开始运行。,2)线程的撤消线程的撤消通过调用ExitThread或TerminateThread实现。线程正常终止时会调用ExitThread。ExitThread会执行以下操作:(1)通知该线程加载的DLL,该线程即将终止。(2)设置所有在该线程对象上等待的线程为有信号状态。(3)清空该线程的APC队列。(4)释放线程的用户态和内核态堆栈。(5)减少该线程对象的引用计数,如果该线程对象计数值为0,它将被对象管理器撤消。,2.8.4Windows2000/XP的线程调度1单处理机的线程调度Windows2000/XP线程调度算法是一种改进的32路多级反馈队列算法。与UNIX系统不同,Windows2000/XP并没有一个统一的调度程序,它的调度算法是异步的,基于事件的,调度操作分布在各个相关的内核例程中。Windows2000/XP在以下4种情况下发生调度:,(1)自愿切换。由于线程要等待某个对象(事件、消息、信号量等)而进入等待状态,因此Windows2000/XP把它放入该对象的等待队列中,然后选择一个新线程来运行。(2)抢占。当一个较高优先级的线程变为就绪态时,当前运行的较低优先级的线程将被抢占。,(3)时间片结束。当进程用完它的时间片时,Windows2000/XP必须重新确定当前线程的优先级,与就绪队列中的线程比较,确定把当前进程插入就绪队列的什么位置。(4)终止。线程完成执行,线程列表删除该线程的信息。,2多处理机的线程调度Windows2000/XP多处理机的线程调度方式有以下几种:(1)运行线程的调度。这是指当前进程被选中分配处理机,系统有多个空闲处理机时,要先安排进程创建时自己选定的首选处理机,否则安排选定的第二处理机,之后考虑正在执行调度程序的处理机。(2)就绪线程的调度。如果当前处理机都忙,系统就查看下一个就绪进程是否可以抢占哪个处理机。系统先查看首选和第二处理机,之后考虑编号最大的处理机。,(3)特定处理器的调度。在决定由哪个线程占有刚让出的CPU时,Windows2000/XP系统会找到满足以下四个条件之一的线程:该处理机是线程的首选处理机。线程上一次在该处理机上执行。处于就绪态的时间已经超过2个单位的分配额。优先级不小于24。,2.8.5空闲线程空闲线程是一个比较特殊的线程,Windows2000/XP系统为它制定的线程优先级为0,每一个处理机都对应一个空闲线程,但它只有在某个处理机没有线程运行的时候才执行。空闲线程实质上是个检测线程,在处理机空闲的时候检测是否有工作要进行。空闲线程的工作流程视处理机结构的不同而不同,但基本流程大致如下:,(1)处理所有待处理的中断请求。(2)检查并处理延迟过程调用(DPC),清除相应的软中断并执行DPC。(3)检查就绪线程,如有可进入运行态的,则进行相应的调度。(4)调用硬件抽象层的处理器空闲例程,执行相应的电源管理功能。,2.8.6多线程编程1.线程的创建进程的主线程在任何需要的时候都可以创建新的线程。当线程执行完后,自动终止线程。当进程结束后,所有的线程都终止。WIN32函数库中提供了操作多线程的函数,包括创建线程、终止线程、建立互斥区等。在应用程序的主线程或者其他活动线程中创建新的线程的函数如下:,HANDLECreateThread(LPSECURITY_ATTRIBUTESlpThreadAttributes,DWORDdwStackSize,LPTHREAD_START_ROUTINElpStartAddress,LPVOIDlpParameter,DWORDdwCreationFlags,LPDWORDlpThreadId);,2线程的终止当调用线程的函数返回后,线程自动终止。当需要在线程的执行过程中终止线程时,则可调用函数:voidExitThread(DWORDdwExitCode);如果要在线程的外面终止线程,则可调用下面的函数:BOOLTerminateThread(HANDLEhThread,DWORDdwExitCode);,2.线程的同步如果各线程完全独立,与其他线程没有资源共享等冲突,则可按照通常单线程的方法进行编程。但是,在采用多线程机制时,所有活动的线程共享进程的资源,因此,在编程时需要考虑在多个线程访问同一资源时产生冲突的问题。,表2.2WIN32提供的对象,图2.30WIN32的对象的描述结构,1)互斥体对象Mutex对象的状态在它不被任何线程拥有时才有信号,而当它被拥有时则无信号。Mutex对象很适合用来协调多个线程对共享资源的互斥访问。可按下列步骤使用该对象:(1)建立互斥体对象,得到句柄:HANDLECreateMutex();(2)在线程访问共享资源之前,调用WaitForSingleObject,将句柄传给函数,请求占用互斥对象:dwWaitResult=WaitForSingleObject(hMutex,5000L);,(3)共享资源访问结束,释放对互斥体对象的占用:ReleaseMutex(hMutex);互斥体对象在同一时刻只能被一个线程占用,当互斥体对象被一个线程占用时,若有另一线程想占用它,则必须等到前一线程释放后才能成功。,2)信号对象信号对象允许同时对多个线程共享资源进行访问,在创建对象时指定最大可同时访问的线程数。当一个线程申请访问成功后,信号对象中的计数器减1,调用ReleaseSemaphore函数后,信号对象
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 长治市农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)附答案详解(模拟题)
- 百色市农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)含答案详解(典型题)
- 咸宁市农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)有完整答案详解
- 2026年金昌市农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)及答案详解(考点梳理)
- 2026年临夏州农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)附答案详解(综合卷)
- 2025年农村金融服务农村农业病虫害防治(保险+技术)创新考核试卷
- 2025年冷链物流乳制品技术应用专项能力测试考核试卷
- 2025年房地产行业AI营销决策支持能力考核试卷
- 2025年农村人居环境整治专项考核模式试卷
- 2025年房地产行业绿色建筑大数据分析推广能力考核试卷
- 牙膏包装模型
- T/CECS 10214-2022钢面镁质复合风管
- 学校网评员能力提升培训体系
- 四川省绵阳市2024-2025学年上学期八年级期末数学试卷(含答案)
- 全国统一市政工程预算定额 第8册 路灯工程
- 桥梁涂装专项施工方案
- 园林绿化工程绿化施工法律法规考核试卷
- 【大学课件】证券发行市场
- 新农村太阳能路灯照明设计方案
- 中国高血压防治指南(2024年修订版)解读课件
- 租赁共同经营协议模板
评论
0/150
提交评论