《计算机操作系统(第三章) 3.7.2(进程的通信与死锁)课件.ppt》由会员分享,可在线阅读,更多相关《计算机操作系统(第三章) 3.7.2(进程的通信与死锁)课件.ppt(74页珍藏版)》请在三一办公上搜索。
1、计算机操作系统第三章 进程管理_3,3.7 进 程 通 信,通信(communication)意味着在进程间传送数据进程间的通信根据通信内容可以划分为二种:即控制信息的传送与大批量数据传送。低级通信:进程间控制信息的交换。高级通信:进程间大批量数据的交换。低级通信一般只传送一个或几个字节的信息,以达到控制进程执行速度的作用。高级通信要传送大量数据。高级通信的目的不是为了控制进程的执行速度,而是为了交换信息。,第三章 进程管理,第2页,2022/12/10,在单机系统中,进程间通信可分为4种形式:(1) 主从式:终端控制进程和终端进程(2) 会话式:通信进程双方可分别称为使用进程和服务进程(3)
2、 消息或邮箱机制;(4) 共享存储区方式。,第三章 进程管理,第3页,2022/12/10,主从式通信系统的主要特点是:, 主进程可自由地使用从进程的资源或数据; 从进程的动作受主进程的控制; 主进程和从进程的关系是固定的。 主从式通信系统的典型例子是终端控制进程和终端进程。,第三章 进程管理,第4页,2022/12/10,会话方式具有如下特点:, 使用进程在使用服务进程所提供的服务之前,必须得到服务进程的许可; 服务进程根据使用进程的要求提供服务,但对所提供服务的控制由服务进程自身完成。 使用进程和服务进程在通信时有固定连接关系。 用户进程与磁盘管理进程之间的通信是会话系统的一个例子,第三章
3、 进程管理,第5页,2022/12/10,会话方式中,通信进程双方可分别称为使用进程和服务进程。其中,使用进程调用服务进程提供的服务。它们具有如下特点: 使用进程在使用服务进程所提供的服务之前,必须得到服务进程的许可; 服务进程根据使用进程的要求提供服务,但对所提供服务的控制由服务进程自身完成。 使用进程和服务进程在通信时有固定连接关系。 各用户进程向磁盘管理进程提出使用要求并得到许可之后,才可以使用相应的存储区。而且,由磁盘管理进程自身完成对磁盘存储区的管理和控制。另外,用户进程与磁盘管理进程之间,只有在用户进程要求使用磁盘存储区时才有通信关系。,第三章 进程管理,第6页,2022/12/1
4、0,消息的一般形式为个部分组成。即:发送进程名、接收进程名、数据和有关数据的操作(图3.15)。,图3.15消息的组成,第三章 进程管理,第7页,2022/12/10,消息或邮箱机制的特点,无论接收进程是否已准备好接收消息,发送进程都将把所要发送的消息送入缓冲区或邮箱。消息或邮箱机制的特点是: 只要存在空缓冲区或邮箱,发送进程就可以发送消息。 与会话系统不同,发送进程和接收进程之间无直接连接关系,接收进程可能在收到某个发送进程发来的消息之后,又转去接收另一个发送进程发来的消息。 发送进程和接收进程之间存在缓冲区或邮箱(图3.16)用来存放被传送消息,图3.16缓冲区或邮箱通信结构,flash演
5、示: 生产者、消费者,第三章 进程管理,第8页,2022/12/10,共享存储区方式:,共享存储区方式不要求数据移动。两个需要互相交换信息的进程通过对同一共享数据区(shared memory)的操作来达到互相通信的目的。这个共享数据区是每个互相通信进程的一个组成部分。 以上几种通信方式都可用于大量数据传送,而且,由于其通信方式不同,需要使用不同的控制方式来达到通信进程之间同步或互斥的目的。,第三章 进程管理,第9页,2022/12/10,3.7.2 消息缓冲机制,发送进程和接收进程采用消息缓冲机制进行数据传送时,发送进程在发送消息前,先在自己的内存空间设置一个发送区,把欲发送的消息填入其中,
6、然后再用发送过程将其发送出去。接收进程则在接收消息之前,在自己的内存空间内设置相应的接收区,然后用接收过程接收消息。,发送进程,在自己的内存空间设置一个,把要发送的消息填入发送区,发送区,接收区,接收进程,在自己的内存空间设置一个,公用缓冲区,由于消息缓冲机制中所使用的缓冲区为公用缓冲区,使用消息缓冲机制传送数据时,两通信进程必须满足如下条件: 在发送进程把消息写入缓冲区和把缓冲区挂入消息队列时,应禁止其他进程对该缓冲区消息队列的访问。否则,将引起消息队列的混乱。同理,当接收进程正从消息队列中取消息缓冲时,也应禁止其他进程对该队列的访问。 当缓冲区中无消息存在时,接收进程不能接收到任何消息。
7、至于发送进程是否可以发送消息,则由发送进程是否申请到缓冲区决定。,第三章 进程管理,第12页,2022/12/10,例:设公用信号量mutex 为控制对缓冲区访问的互斥信号量,其初值为1 。设SM为接收进程的私用信号量,表示等待接收的消息个数,其初值为0 。设发送进程调用过程send(m)将消息m 送往缓冲区,接收进程调用过程Receive(m)将消息m从缓冲区读往自己的数据区,则Send(m)和Receive(n)可分别描述为:,Send(m):begin向系统申请一个消息缓冲区 (mutex) P(SM)将发送区消息m送入新申请的消息缓冲区把消息缓冲区挂入接收进程的消息队列(mutex)(
8、SM)end,第三章 进程管理,第13页,2022/12/10,Receive(n):begin(SM)(mutex) 摘下消息队列中的消息n 将消息n从缓冲区复制到接收区V(SM) 释放缓冲区(mutex)end,3.7.3 邮箱通信,邮箱通信就是由发送进程申请建立一与接收进程链接的邮箱。发送进程把消息送往邮箱,接收进程从邮箱中取出消息,从而完成进程间信息交换。设置邮箱的最大好处就是发送进程和接收进程之间没有处理时间上的限制。一个邮箱可考虑成发送进程与接收进程之间的大小固定的私有数据结构,它不像缓冲区那样被系统内所有进程共享。,第三章 进程管理,第14页,2022/12/10,邮箱由邮箱头和
9、邮箱体组成。其中邮箱头描述邮箱名称、邮箱大小、邮箱方向以及拥有该邮箱的进程名等。邮箱体主要用来存放消息(图3.17)。,图3.17 邮箱通信结构,对于只有一发送进程和一接收进程使用的邮箱,则进程间通信应满足如下条件: 发送进程发送消息时,邮箱中至少要有一个空格能存放该消息。 接收进程接收消息时,邮箱中至少要有一个消息存在。,第三章 进程管理,第15页,2022/12/10,deposit(m)和remove(m)可描述如下:deposit(m):begin local x(fromnum)选择空格x将消息m放入空格x中置格x的标志为满(mesnum)end,第三章 进程管理,第16页,2022
10、/12/10,例:设发送进程调用过程 deposit(m)将消息发送到邮箱,接收进程调用过程remove(m)将消息m 从邮箱中取出。另外,为了记录邮箱中空格个数和消息个数,信号量fromnum 为发送进程的私用信号量,信号量mesnum为接收进程的私用信号量。fromnum 的初值为信箱的空格数 n,mesnum 的初值为 0。,remove(m):begin local x(mesnum)选择满格x把满格x中的消息取出放m中 置格x标志为空(fromnum)end,3.7.4 进程通信的实例和控制台的通信,通用计算机中,除了用户终端之外,还有一台由系统操作员控制的控制台终端。各用户进程可将
11、消息送到控制台进程,操作员在读到这些消息后做出相应的处理。,图3.18 和控制台通信示例,第三章 进程管理,第17页,2022/12/10,3.7.5 进程通信的实例管道,1. 管道pipe进程通信的实用例子之一是UNIX系统的管道通信。UNIX系统从System开始,提供有名管道和无名管道两种数据通信方式.无名管道为建立管道的进程及其子孙提供一条以比特流方式传送消息的通信管道。该管道在逻辑上被看作管道文件,在物理上则由文件系统的高速缓冲区构成,而很少启动外设。发送进程利用文件系统的系统调用write(fd1,buf,size),把buf中的长度为size字符的消息送入管道入口fd1,接收进程
12、则使用系统调用read(fd0,buf,size)从管道出口fd0 读出size字符的消息置入buf 中。这里,管道按FIFO(先进先出)方式传送消息,且只能单向传送消息(图3.20)。,第三章 进程管理,第18页,2022/12/10,利用UNIX提供的系统调用pipe,可建立一条同步通信管道。其格式为:pipe(fd)intfd2;这里,fd1 为写入端,fd0为读出端。例: p71,图3.20 管道通信,第三章 进程管理,第19页,2022/12/10,例2: 编写一程序,建立一个管道。同时,父进程生成子进程P1,P2,这两个子进程分别向管道中写入各自的字符串,父进程读出它们(如图3.2
13、1)。图3.21 父进程和子进程P1,P2通信例子解:程序框图如图3.22所示:,第三章 进程管理,第20页,2022/12/10,图3.22 例2程序流图,源程序如下p72,第三章 进程管理,第21页,2022/12/10,3.8 死 锁,3.8.1 死锁的概念3.8.2 死锁的排出方法,第三章 进程管理,第22页,2022/12/10,Bridge Crossing Example,车辆只允许单向通行。桥上的每个位置可以看作一个资源。如果发生死锁, 可以通过让一辆车后退来解决 (剥夺资源,回滚)。死锁时,可能要求多辆车后退。可能会出现饥饿现象(Starvation )。,哲学家进餐问题,v
14、oid philosoper(int i) / i为哲学家号 while (TRUE) think(); / 思考,直至饥饿 P( forki );/ 试图拿左侧叉子 P( fork( i + 1) % N ); / 试图拿右侧叉子 eat();/ 取到两把叉子 V( forki ); / 放下左侧叉子 V( fork( i + 1) % N ); / 放下右侧叉子 程序有什么问题?,flash演示:导致死锁的情况,3.8.1死锁的定义,死锁:各并发进程彼此互相等待对方所拥有的资源,且这些并发进程在得到对方的资源之前不会释放自己所拥有的资源。从而造成大家都想得到资源而又都得不到资源,各并发进程
15、不能继续向前推进的状态。,图3.22 死锁的概念,第三章 进程管理,第25页,2022/12/10,死锁的描述,有并发进程P1,P2,Pn,它们共享资源R1,R2,Rm(n0,m0,n=m)。其中,每个Pi(1in)拥有资源Rj(1 j m),直到不再有剩余资源。同时,各Pi又在不释放Rj 的前提下要求得到Rk(kj,1 km),从而造成资源的互相占有和互相等待。在没有外力驱动的情况下,该组并发进程停止往前推进,陷入永久等待状态,第三章 进程管理,第26页,2022/12/10,2. 死锁的起因,死锁的起因是并发进程的资源竞争。产生死锁的根本原因系统提供的资源个数少于并发进程所要求的该类资源数
16、。显然,由于资源的有限性,不可能为所有要求资源的进程无限制地提供资源。消除死锁的方法:采用适当的资源分配算法。,第三章 进程管理,第27页,2022/12/10,3.产生死锁有四个必要条件:,(1) 互斥条件: 并发进程所要求和占有的资源是不能同时被两个以上进程使用或操作的,进程对它所需要的资源进行排他性控制。(2) 不剥夺条件: 进程所获得的资源在未使用完毕之前,不能被其他进程强行剥夺,而只能由获得该资源的进程自己释放。(3) 部分分配:进程每次申请它所需要的一部分资源,在等待新资源的同时继续占用已分配到的资源。(4) 环路条件:存在一种进程循环链,链中每一个进程已获得的资源同时被下一个进程
17、所请求。,flash演示:哲学家进餐问题,第三章 进程管理,第28页,2022/12/10,3.产生死锁有四个必要条件:,互斥条件: 一个资源一次只能被一个进程使用不剥夺条件:一个资源仅能被占有它的进程释放部分分配条件:一个进程已占有了一些资源,但仍然要求其它资源环路条件:系统中存在着一个由若干个进程形成的环形请求链,第三章 进程管理,第29页,2022/12/10,资源分配图的实例,存在死锁的资源分配图,存在环路但是没有死锁,3.8.2死锁的排出方法,解决死锁的方法一般可分为预防、避免、检测与恢复等三种。预防是采用某种策略,限制并发进程对资源的请求,从而使得死锁的必要条件在系统执行的任何时间
18、都不满足。避免是指系统在分配资源时,根据资源的使用情况提前做出预测,从而避免死锁的发生。死锁检测与恢复是指系统设有专门的机构,当死锁发生时,该机构能够检测到死锁发生的位置和原因,并能通过外力破坏死锁发生的必要条件,从而使得并发进程从死锁状态中恢复出来。 注意:在实际操作系统中大都使用检测与恢复法排除死锁。,第三章 进程管理,第33页,2022/12/10,1.死锁的预防,破坏第一个条件使资源可同时访问而不是互斥使用 破坏第二个条件采用剥夺式调度方法当进程在申请资源未获准许的情况下,如主动释放资源(一种剥夺式),然后才去等待破坏第三个条件预先分配各并发进程所需要的全部资源,并且直到它所要的资源都
19、得到满足后才开始执行破坏第四个条件把资源分类按顺序排列,使进程在申请、保持资源时不形成环路,第三章 进程管理,第34页,2022/12/10,死锁的预防的缺点,(1) 在许多情况下,一个进程在执行之前不可能提出它所需要的全部资源。(2) 无论所需资源何时用到,一个进程只有在所有要求资源都得到满足之后才开始执行。(3) 对于那些不经常使用的资源,进程在生存过程期间一直占用它们是一种极大的浪费。(4) 降低了进程的并发性。(5)限制了进程对资源的请求,而且对资源的分类编序也耗去一定的系统开销,第三章 进程管理,第35页,2022/12/10,2、死锁的避免,死锁避免即动态预防,因为系统采用动态分配
20、资源,在分配过程中预测出死锁发生的可能性并加以避免的方法。死锁避免:资源被分成多个层次当进程得到某一层的一个资源后,它只能再申请较高层次的资源当进程要释放某层的一个资源时,必须先释放占有的较高层次的资源当进程得到某一层的一个资源后,它想申请该层的另一个资源时,必须先释放该层中的已占资源,第三章 进程管理,第36页,2022/12/10,2022/12/10,第三章 进程管理,第37页,银行家算法(Bankers Algorithm)是一个避免死锁(Deadlock)的著名算法,是由艾兹格迪杰斯特拉在1965年为T.H.E系统设计的一种避免死结产生的算法。它以银行借贷系统的分配策略为基础,判断并
21、保证系统的安全运行。,在银行中,客户申请贷款的数量是有限的,每个客户在第一次申请贷款时要声明完成该项目所需的最大资金量,在满足所有贷款要求时,客户应及时归还。银行家在客户申请的贷款数量不超过自己拥有的最大值时,都应尽量满足客户的需要。在这样的描述中,银行家就好比操作系统,资金就是资源,客户就相当于要申请资源的进程。,系统安全状态,1. 安全状态 在避免死锁的方法中,允许进程动态地申请资源,但系统在进行资源分配之前,应先计算此次资源分配的安全性。若此次分配不会导致系统进入不安全状态,则将资源分配给进程; 否则,令进程等待。 所谓安全状态,是指系统能按某种进程顺序(P1, P2, ,Pn)(称P1
22、, P2, , Pn序列为安全序列),来为每个进程Pi分配其所需资源,直至满足每个进程对资源的最大需求,使每个进程都可顺利地完成。如果系统无法找到这样一个安全序列,则称系统处于不安全状态。,2. 安全状态之例 我们通过一个例子来说明安全性。假定系统中有三个进程P1、 P2和P3,共有12台磁带机。进程P1总共要求10台磁带机,P2和P3分别要求4台和9台。假设在T0时刻,进程P1、P2和P3已分别获得5台、2台和2台磁带机,尚有3台空闲未分配,如下表所示:,安全序列:p2p1p3,3. 由安全状态向不安全状态的转换 如果不按照安全序列分配资源,则系统可能会由安全状态进入不安全状态。例如,在T0
23、时刻以后,P3又请求1台磁带机,若此时系统把剩余3台中的1台分配给P3,则系统便进入不安全状态。 因为,此时也无法再找到一个安全序列, 例如,把其余的2台分配给P2,这样,在P2完成后只能释放出4台,既不能满足P1尚需5台的要求,也不能满足P3尚需6台的要求,致使它们都无法推进到完成,彼此都在等待对方释放资源,即陷入僵局,结果导致死锁。,银行家算法原理,2022/12/10,第三章 进程管理,第41页,我们可以把操作系统看作是银行家,操作系统管理的资源相当于银行家管理的资金,进程向操作系统请求分配资源相当于用户向银行家贷款。 为保证资金的安全,银行家规定: (1) 当一个顾客对资金的最大需求量
24、不超过银行家现有的资金时就可接纳该顾客; (2) 顾客可以分期贷款,但贷款的总数不能超过最大需求量; (3) 当银行家现有的资金不能满足顾客尚需的贷款数额时,对顾客的贷款可推迟支付,但总能使顾客在有限的时间里得到贷款; (4) 当顾客得到所需的全部资金后,一定能在有限的时间里归还所有的资金. 操作系统按照银行家制定的规则为进程分配资源,当进程首次申请资源时,要测试该进程对资源的最大需求量,如果系统现存的资源可以满足它的最大需求量则按当前的申请量分配资源,否则就推迟分配。当进程在执行中继续申请资源时,先测试该进程本次申请的资源数是否超过了该资源所剩余的总量。若超过则拒绝分配资源,若能满足则按当前
25、的申请量分配资源,否则也要推迟分配。,1. 银行家算法中的数据结构,(1) 可利用资源向量Available。这是一个含有m个元素的数组,其中的每一个元素代表一类可利用的资源数目,其初始值是系统中所配置的该类全部可用资源的数目,其数值随该类资源的分配和回收而动态地改变。如果Availablej=K,则表示系统中现有Rj类资源K个。,(2) 最大需求矩阵Max。这是一个nm的矩阵,它定义了系统中n个进程中的每一个进程对m类资源的最大需求。如果Maxi,j=K,则表示进程i需要Rj类资源的最大数目为K。,(4) 需求矩阵Need。这也是一个nm的矩阵,用以表示每一个进程尚需的各类资源数。如果Nee
26、di,j=K,则表示进程i还需要Rj类资源K个,方能完成其任务。,Needi,j=Maxi,j-Allocationi,j,(3) 分配矩阵Allocation。这也是一个nm的矩阵,它定义了系统中每一类资源当前已分配给每一进程的资源数。如果Allocationi,j=K,则表示进程i当前已分得Rj类资源的数目为K。,2. 银行家算法 设Requesti是进程Pi的请求向量,如果Requestij=K,表示进程Pi需要K个Rj类型的资源。当Pi发出资源请求后,系统按下述步骤进行检查: (1) 如果RequestijNeedi,j,便转向步骤2;否则认为出错,因为它所需要的资源数已超过它所宣布的
27、最大值。 (2) 如果RequestijAvailablej,便转向步骤(3);否则, 表示尚无足够资源,Pi须等待。,reqi=needi,error,reqi=availi,block,(3) 系统试探着把资源分配给进程Pi,并修改下面数据结构中的数值: Availablej=Availablej-Requestij; Allocationi,j=Allocationi,j+Requestij; Needi,j=Needi,j-Requestij; (4) 系统执行安全性算法,检查此次资源分配后,系统是否处于安全状态。若安全,才正式将资源分配给进程Pi,以完成本次分配;否则, 将本次的试探
28、分配作废,恢复原来的资源分配状态,让进程Pi等待。,avail=avail-reqialloci=alloci+reqineedi=needi-reqi,finishi=.F.needi=work,work=work+allocifinishi=.T.,3. 安全性算法,(1) 设置两个向量: 工作向量Work: 它表示系统可提供给进程继续运行所需的各类资源数目,它含有m个元素,在执行安全算法开始时,Work=Available; Finish: 它表示系统是否有足够的资源分配给进程,使之运行完成。开始时先做Finishi=false; 当有足够资源分配给进程时, 再令Finishi=true
29、。,(2) 从进程集合中找到一个能满足下述条件的进程: Finishi=false; Needi,jWorkj; 若找到, 执行步骤(3), 否则,执行步骤(4)。 (3) 当进程Pi获得资源后,可顺利执行,直至完成,并释放出分配给它的资源,故应执行: Workj=Worki+Allocationi,j; Finishi=true; go to step 2;,(4) 如果所有进程的Finishi=true都满足, 则表示系统处于安全状态;否则,系统处于不安全状态。,银行家算法之例,假定系统中有五个进程P0, P1, P2, P3, P4和三类资源A, B, C,各种资源的数量分别为10、5、
30、7,在T0时刻的资源分配情况如图 3-15 所示。,图 3-15 T0时刻的资源分配表,(1) T0时刻的安全性:,图 3-16 T0时刻的安全序列,(2) P1请求资源:P1发出请求向量Request1(1,0,2),系统按银行家算法进行检查: Request1(1, 0, 2)Need1(1, 2, 2) Request1(1, 0, 2)Available1(3, 3, 2) 系统先假定可为P1分配资源,并修改Available, Allocation1和Need1向量,由此形成的资源变化情况如图 3-15 中的圆括号所示。 再利用安全性算法检查此时系统是否安全。,图 3-17 P1申请
31、资源时的安全性检查,2022/12/10,第三章 进程管理,第53页,例如:进程PA,使用资源的顺序是R1,R2; 进程PB,使用资源的顺序是R2,R1;若采用动态分配有可能形成环路条件,造成死锁。采用有序资源分配法:R1的编号为1,R2的编号为2; PA:申请次序应是:R1,R2 PB:申请次序应是:R1,R2 这样就破坏了环路条件,避免了死锁的发生。,第三章 进程管理,第54页,2022/12/10,2. 银行家算法 检查申请者对各类资源的最大需求量,如果系统现存的各类资源可以满足它的最大需求量,就满足当前的申请。 缺点: 必须事先知道每个进程的资源最大需求量。 算法过于保守。 要求系统资
32、源与用户数不变。,第三章 进程管理,第55页,2022/12/10,例子:假定系统有10个资源(为了说明问题的简单,不管它是什么资源),目前分配的情况如上表:此时,系统中只剩下2个资源,这时就要考察能满足哪个进程,不能满足P和R的最大要求,能满足Q,于是将剩下的2个资源分配给Q,Q就能完成,然后释放所占用的6个资源。可满足P,也可满足R,这时不论分给谁都能保证完成。,第三章 进程管理,第56页,2022/12/10,3. 死锁的检测与恢复,1. 死锁的检测 由系统提供检测算法 由计算机操作员检测 通常的方法是程序员的经验,如UNIX系统中,可考察进程的运行时间。在UNIX系统中有命令PS可显示
33、进程占用CPU的时间,若发现有一组进程在一段时间内没有占用CPU,就认为这类进程出现了死锁。,第三章 进程管理,第57页,2022/12/10,2. 死锁的恢复 撤消陷于死锁的全部进程; 逐个撤消陷于死锁的进程,直到死锁不存在; 从陷于死锁的进程中逐个强迫放弃所占用的资源,直至死锁消失; 从某个存在的中间检测点重新启动各死锁进程。,第三章 进程管理,第58页,2022/12/10,3.9 线程,3.9.1 为什么要引入线程3.9.2 线程的基本概念3.9.3 线程与进程的区别3.9.4 线程的实用范围,第三章 进程管理,第59页,2022/12/10,3.9.1 线程的引入,(1)创建进程。系
34、统在创建进程时,必须为之分配其所必需的、除处理机以外的所有资源。如内存空间、I/O设备以及建立相应的PCB结构。(2)撤消进程。系统在撤消进程时,又必须先对这些资源进行回收操作,然后再撤消PCB结构。(3)进程切换。在对进程进行切换时,由于要保留当前进程的CPU环境和设置新选中进程的CPU环境,为此需花费不少处理机时间。 为了减少进程切换和创建、撤销进程的开销,提高执行效率和节省资源,人们开始在操作系统中引进“线程”的概念。,第三章 进程管理,第60页,2022/12/10,3.9.2 线程的基本概念,引入线程主要是为了提高系统的执行效率,减少处理机的空转时间和调度切换(保护现场信息)的时间,
35、以及便于系统管理 线程是进程内的一个执行单元,也是进程内的一个可调度实体。 一个进程内的基本调度单位称为线程或称为轻权进程(Light weight process),这个调度单位既可以由操作系统内核控制,也可以由用户程序控制,第三章 进程管理,第61页,2022/12/10,3.9.2 线程的概念,进程是程序的一次执行过程和资源分配的基本单位。线程是一个进程内的基本调度单位,又称为轻权进程(Light weight process)调度单位既可以由操作系统内核控制,也可以由用户程序控制引入线程的目的:为了提高系统的执行效率,减少处理机的空转时间和调度切换(保护现场信息)的时间,以及便于系统管
36、理。,第三章 进程管理,第62页,2022/12/10,3.9.3 线程与进程的比较,1调度:在传统的操作系统中,拥有资源的基本单位和独立调度、分派的基本单位都是进程。 2并发性:在引入线程的操作系统中,不仅进程之间可以并发执行,而且在一个进程中的多个线程之间亦可并发执行,因而使操作系统具有更好的并发性,从而能更有效地使用系统资源和提高系统吞吐量。 3拥有资源:不论是传统的操作系统,还是设有线程的操作系统,进程都是拥有资源的一个独立单位,它可以拥有自己的资源。 4系统开销:由于在创建或撤消进程时,系统都要为之分配或回收资源,如内存空间、I/O设备等。因此,操作系统所付出的开销将明显地大于在创建
37、或撤消线程时的开销。,第三章 进程管理,第63页,2022/12/10,二. 线程和进程的关系 线程是进程的一个组成部分。 一个进程可以有多个线程,一个进程的多个线程都在进程的地址空间内活动。 资源分配的对象是进程,而不是线程。 处理机调度的基本单位是线程而不是进程,但线程使用的资源是进程分到的资源。 线程在执行过程中,需要协作同步。,第三章 进程管理,第64页,2022/12/10,进程,进程,线程,线程,指令计数器,指令计数器,(a) 三个进程,各有一个线程,(b) 一个进程有三个线程,进程和线程,第三章 进程管理,第65页,2022/12/10,3.9.4线程的实用范围,使用进程最大的好
38、处是在多个任务需要处理机处理时,减少处理机的切换时间。线程的三个典型应用 (1)服务器中的文件管理或通信控制 (2)前后台处理 (3)异步处理,第三章 进程管理,第66页,2022/12/10,引入线程的优点 创建一个线程的开销比创建一个进程的开销小。 CPU在线程之间转换的开销比进程之间转换的开销小。 线程可共享同一进程的地址空间。 通过线程可以方便有效地实现并行。进程可以创建多个线程执行同一程序的不同部分。 当创建多线程进程时,便于为各个用户服务。,第三章 进程管理,第67页,2022/12/10,1. 线程的状态和变迁创建:刚建立的新线程所处的状态。就绪:线成已具备执行条件,等待调度程序
39、分给CPU时间。运行:一个线程正占用CPU,执行它的程序。等待:线程正等待某个事件的发生。终止:一个线程已退出,但该信息还没被其它线程收集。,3.10 线程的分类与执行,第三章 进程管理,第68页,2022/12/10,3.10.1线程的分类,线程的两个基本类型是:用户级线程和系统级线程(核心级线型)。在同一个操作系统中,有的使用纯用户级线程,有的使用纯核心级线程用户及线程(user level threads)的管理过程全部由用户程序完成,操作系统内核只对进程进行管理。当一个线程被派生时,线程库为其生成相应的线程控制块TCB等数据结构,并为TCB中的参量赋值和把该线程置于就绪状态。其处理过程
40、与进程创建过程大致相似。,第三章 进程管理,第69页,2022/12/10,不同点是:,用户级线程的调度算法和调度过程全部由用户自行选择和确定,与操作系统内核无关。用户级线程的调度算法只进行线程上下文切换而不进行处理机切换,且其线程上下文切换是在内核不参与的情况下进行的。因为用户级线程的上下文切换与内核无关,所以可能出现如下情况,第三章 进程管理,第70页,2022/12/10,运行,创建,就绪,等待,终止,线程的状态及变迁,线程的执行特性:,第三章 进程管理,第71页,2022/12/10,第三章 小结,一进程概念1 顺序程序、并发程序的定义与特点2 与时间有关的错误3 进程定义4 进程状态
41、:三个基本状态及转换5进程控制块:PCB定义与作用、进程的组成,第三章 进程管理,第72页,2022/12/10,二. 进程控制1 进程控制的基本功能(基本进程控制原语)2 进程创建:形式、实现过程3 进程撤消:形式、实现过程三同步机构1 锁、上锁原语、开锁原语2 信号灯、P、V操作,第三章 进程管理,第73页,2022/12/10,四进程互斥1 临界资源、临界区、互斥的定义2 互斥的实现:用信号灯的P、V操作实现互斥五进程同步1 同步概念2两种类型的同步问题:合作进程的执行次序、共享缓冲区的合作进程的同步3 生产者消费者问题六、进程通信七、线程,第三章 进程管理,第74页,2022/12/10,