3.7进程通信进程通信的概念进程之间的信息交换称为进程通信进程通信按通信内容可分为:控制信息的传送大批量数据传送把进程间控制信息的交换称为低级通信,把进程间大批量数据的交换称为高级通信。3.7.1进程的通信方式在单机操作系统中,进程间通信可分为4种形式:主从式;会话式;消息或邮箱机制;共享存储区方式。主从式通信系统的主要特点是:①主进程可自由地使用从进程的资源或数据;②从进程的动作受主进程的控制;③主进程和从进程的关系是固定的。主从式通信系统的典型例子是终端控制进程和终端进程。3.7.1进程的通信方式1.主从式通信3.7.1进程的通信方式2.会话式通信会话式通信系统的特点:①使用进程在使用服务进程所提供的服务之前,必须得到服务进程的许可;②服务进程根据使用进程的要求提供服务,但对所提供服务的控制由服务进程自身完成。③使用进程和服务进程在通信时有固定连接关系。3.7.1进程的通信方式2.会话式通信用户进程与磁盘管理进程之间的通信是会话系统的一个例子。各用户进程向磁盘管理进程提出使用要求并得到许可之后,才可以使用相应的存储区。而且,由磁盘管理进程自身完成对磁盘存储区的管理和控制。另外,用户进程与磁盘管理进程之间,只有在用户进程要求使用磁盘存储区时才有通信关系。3.7.1进程的通信方式3.消息或邮箱机制无论接收进程是否已准备好接收消息,发送进程都将把所要发送的消息送入缓冲区或邮箱消息由4部分组成:发送进程名、接收进程名、数据和有关数据的操作只要存在空缓冲区或邮箱,发送进程就可以发送消息两进程之间无直接连接关系两个进程之间存在缓冲区或邮箱用来存放被传送消息消息或邮箱机制的特点是:3.7.1进程的通信方式3.消息或邮箱机制3.7.1进程的通信方式4.共享存储区方式共享存储区方式不要求数据移动。两个需要互相交换信息的进程通过对同一共享数据区(sharedmemory)的操作来达到互相通信的目的。这个共享数据区是每个互相通信进程的一个组成部分。如生产者-消费者问题中的有界缓冲区1.消息传递系统进程间的数据交换以消息为单位,程序员利用系统的通信原语实现通信。操作系统隐藏了通信的实现细节,简化了通信程序编制的复杂性。因而得到广泛应用。3.7.2消息传递系统3.7.2消息传递系统消息传递系统因其实现方式不同分为:直接通信方式间接通信方式3.7.2消息传递系统直接通信方式发送进程直接把消息发送给接收者,并将它挂在接收进程的消息缓冲队列上。接收进程从消息缓冲队列中取得消息。消息缓冲通信就是一种直接通信方式间接通信方式3.7.2消息传递系统发送进程将消息发送到某种中间实体中(信箱),接收进程从中取得消息。信箱通信就是一种间接通信方式。信箱通信广泛用于计算机网络,即电子邮件系统。3.7.2消息传递系统思考:两种方式的主要区别?前者需要两进程都存在,后者不需要。2.消息缓冲通信发送进程在发送消息前,先在自己的内存空间设置一个发送区,把欲发送消息填入表中,然后再用发送原语将其发送出接收进程则在接收消息之前,在自己的内存空间内设置相应的接收区,然后用接收原语接收消息1)消息缓冲通信的原理:2)使用的缓冲区必须满足的条件:在发送进程把消息写入缓冲区和把缓冲区挂入消息队列时,应禁止其他进程对该缓冲区消息队列的访问当缓冲区中无消息存在时,接收进程不能接收到任何消息2.消息缓冲通信2.消息缓冲通信3)消息缓冲通信的实现设公用信号量mutex为控制对缓冲区访问的互斥信号量,其初值为1。设SM为接收进程的私用信号量,表示等待接收的消息个数,其初值为0。设发送进程调用过程send(m)将消息m送往缓冲区,接收进程调用过程Receive(m)将消息m从缓冲区读往自己的数据区主要还是采用P,V操作实现Send(m):begin向系统申请一个消息缓冲区P(mutex)将发送区消息m送入新申请的消息缓冲区把消息缓冲区挂入接收进程的消息队列V(mutex)V(SM)end2.消息缓冲通信发送进程的描述:2.消息缓冲通信Receive(n):beginP(SM)P(mutex)摘下消息队列中的消息n将消息n从缓冲区复制到接收区释放缓冲区V(mutex)end接受进程的描述:3.7.3.邮箱通信邮箱通信就是由发送进程申请建立一与接收进程链接的邮箱。发送进程把消息送往邮箱,接收进程从邮箱中取出消息,从而完成进程间信息交换。邮箱实际式发送进程与接收进程之间的大小固定的私有数据结构只有一发送进程和一接收进程使用的邮箱需满足的条件:•发送进程发送消息时,邮箱中至少要有一个空格能存放该消息•接收进程接收消息时,邮箱中至少要有一个消息存在邮箱的结构:邮箱通信的实现:设发送进程调用deposit(m)将消息发送到邮箱,接收进程调用remove(m)将消息m从邮箱中取出信号量fromnum为发送进程的私用信号量,记录空格数,初值为信箱的空格数nmesnum为接收进程的私用信号量,记录消息个数,初值为0deposit(m)描述如下:deposit(m):beginlocalxP(fromnum)选择空格x将消息m放入空格x中置格x的标志为满V(mesnum)endremove(m)描述如下:remove(m):beginlocalxP(mesnum)选择满格x把满格x中的消息取出放m中置格x标志为空V(fromnum)end3.7.5管道通信系统管道是用于连接读进程和写进程的文件以实现它们之间通信的共享文件,称pipe文件。向管道提供输入的进程(称写进程),以字符流的形式将大量数据送入管道,而接收管道输出的进程(读进程)可从管道中接收数据。该方式首创于UNIX,它能传送大量数据,被广泛采用。管道按FIFO方式传送消息,且只能单向传送消息3.8死锁问题3.8.1死锁的概念3.8.2死锁的排除方法交通死锁的示例让路!让路!让路!让路!3.8.1死锁的概念1.死锁举例例1:设系统有一台打印机和一台扫描仪,进程P1、P2并发执行,在某时刻T,进程P1和P2分别占用了打印机和扫描仪。在时刻T1(T1T),P1又要申请扫描仪,但由于扫描仪被P2占用,P1只有等待。在时刻T2(T2T),P2又申请打印机,但由于打印机被P1占用,P2只有等待。如此两进程均不能执行完成。称这种现象为死锁。进程A进程B①申请输入设备①申请输出设备②申请输出设备②申请输入设备③释放输入设备③释放输出设备④释放输出设备④释放输入设备如果执行次序为:进程A①→进程B①...,则发生死锁。输入设备输出设备BA输入设备输出设备A在干什么?B在干什么?竞争外设死锁示例3.8.1死锁的概念1.死锁举例例2:在生产者-消费者问题中将生产者进程的两个P操作颠倒时会发生死锁(如果缓冲区中数据满)。将消费者进程的两个P操作颠倒时也会发生死锁。因此要注意P操作的执行次序3.8.1死锁的概念2.死锁定义死锁,是指各并发进程彼此互相等待对方所拥有的资源,且这些并发进程在得到对方的资源之前不会释放自己所拥有的资源。从而造成大家都想得到资源而又都得不到资源,各并发进程不能继续向前推进的状态。死锁的起因是并发进程的资源竞争根本原因在于系统提供的资源个数少于并发进程所要求的该类资源数由于资源的有限性不可能为所有要求资源的进程无限制的提供资源,但是可以采用适当的资源分配算法,以达到消除死锁的目的3.8.1死锁的概念3.死锁的起因参与死锁的进程最少是两个(两个以上进程才会出现死锁)参与死锁的进程至少有两个已经占有资源参与死锁的所有进程都在等待资源参与死锁的进程是当前系统中所有进程的子集如果死锁发生,会浪费大量系统资源,甚至导致系统崩溃关于死锁的一些结论:4.产生死锁的必要条件3.8.1死锁的概念互斥条件:涉及的资源是非共享的,不能同时被两个进程以上的进程使用不剥夺条件:不能强行剥夺进程拥有的资源部分分配条件:进程在等待一新资源时继续占有已分配的资源环路条件:存在一种进程的循环链,链中的每一个进程已获得的资源同时被链中的下一个进程所请求3.8.2死锁的排除方法解决死锁的方法一般可分为:•预防死锁•避免死锁•检测与恢复1、预防死锁:3.8.2死锁的排除方法预防是采用某种策略,限制并发进程对资源的请求,从而使得死锁的必要条件在系统执行的任何时间都不满足。较易实现,广泛使用,但由于所施加的限制往往太严格,可能导致系统资源利用率和系统吞吐量的降低。死锁的预防策略:1.在系统设计时确定资源分配算法,保证不发生死锁2.具体的做法是破坏产生死锁的四个必要条件之一1.破坏资源的互斥条件例如允许进程同时访问某些资源等不能解决那些不允许被同时访问的资源时所带来的死锁问题,比如打印机等2.破坏不可剥夺条件一个已拥有资源的进程,若它再提出新资源要求而不能立即得到满足时,它必须释放已经拥有的所有资源。以后需要时再重新申请。实现复杂、要付出很大的代价。剥夺策略设计复杂,如:–当进程Pi申请资源时,若有则分配,若没有则剥夺Pi占有的所有资源。–当进程Pi申请ri类资源时,若有则分配,若无则剥夺占有ri类资源进程所占的ri类资源分配给Pi;3.破坏部分分配条件系统要求所有进程要一次性地申请在整个运行过程中所需的全部资源。如某个进程的资源得不到满足时,则安排一定的等待次序让其他进程释放资源优点:简单、易于实现且安全。但有缺点。3.破坏部分分配条件缺点:(1)在许多情况下,一个进程在执行之前不可能提出它所需要的全部资源。(2)无论所需资源何时用到,一个进程只有在所有要求资源都得到满足之后才开始执行。(3)对于那些不经常使用的资源,进程在生存过程期间一直占用它们是一种极大的浪费。(4)降低了进程的并发性。4.破坏环路条件系统中的所有资源都有一个确定的唯一号码,所有分配请求必须以序号上升的次序进行例如:系统中有下列设备:输入机(1),打印机(2),穿孔机(3),磁带机(4),磁盘(5)。有一进程要先后使用输入机、磁盘、打印机,则它申请设备时要按输入机、打印机、磁盘的顺序申请优点:同前两法相比,其资源利用率和系统吞吐量有较明显的改善缺点:进程实际需要资源的顺序不一定与资源的编号一致,因此仍会造成资源浪费;对资源的分类编号也消耗一定的系统开销,破坏设备无关性。4.破坏环路条件3.8.2.1死锁预防结论:从上面所学习的来看,显然,死锁预防所采用的策略,都施加了较强的限制条件.不实用!2、避免死锁:不事先采取限制去破坏产生死锁的条件,而是在资源的动态分配过程中,用某种方法去防止系统进入不安全状态,从而避免死锁的发生。实现较难1.死锁避免策略:在系统运行过程中,对进程发出的每一个系统能够满足的资源申请进行动态检查,并根据检查结果决定是否分配资源,若分配后系统可能发生死锁,则不予分配,否则予以分配。在检查是否死锁时,主要时检查系统是否处于安全状态还是不安全状态。如果系统能按某种顺序(如P4,P1,…,Pn,称为安全序列)为每个进程分配其所需的资源,直至所有进程都能运行完成,称系统处于安全状态。若不存在这样一个安全序列称系统处于不安全状态。2.安全状态3.我们通过一个例子来说明安全性。假定系统中有三个进程P1、P2和P3,共有12台磁带机。进程P1总共要求10台磁带机,P2和P3分别要求4台和9台。假设在T0时刻,进程P1、P2和P3已分别获得5台、2台和2台磁带机,尚有3台空闲未分配,如下表所示:进程最大需求已分配可用P1P2P310495223经分析发现,在T0时刻,系统是安全的。因为存在一个安全序列p2、p1、p3。如果不按照安全序列分配资源,则系统可能会由安全状态进入不安全状态。死锁避免的典型算法就是银行家算法银行家算法介绍假设系统中有n个进程P1,P2,…,Pn,m类资源R1,R2,…,Rm。1.先了解在这个算法中用到的数据结构。(1)可利用资源向量Available。这是一个含有m个元素的数组,其中的每一个元素代表一类可利用的资源数目,其初始值是系统中所配置的该类全部可用资源的数目,其数值随该类资源的分配和回收而动态地改变。如果Available[j]=K,则表示系统中现有Rj类资源K个。