计算机操作系统(第三章) 3.7.2(进程的通信与死锁)课件.ppt
《计算机操作系统(第三章) 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系统设计的一种避免死结产生的算法。它以银行借贷系统的分配策略为基础,判断并
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机操作系统第三章 3.7.2进程的通信与死锁课件 计算机 操作系统 第三 3.7 进程 通信 死锁 课件

链接地址:https://www.31ppt.com/p-1596225.html