《操作系统课件-第三章进程管理6(进程通信).ppt》由会员分享,可在线阅读,更多相关《操作系统课件-第三章进程管理6(进程通信).ppt(25页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、进程管理3.6 进程通信(communication)进程通信:指进程间的信息交换。按通信内容可以划分为2种低级通信:进程之间控制信息的交换称为低级通信。一般只传送一个和几个字节的信息,达到控 制进程执行速度的作用。(进程的同步和互斥)信号量机制作为同步工具是卓有成效的,但作为通讯工具则不够理想,(效率低。通讯对用户不透明。)高级通信:用户可以直接利用操作系统所提供的一组通信命令,高效地传送大量数据的一种通信方式。1进程管理 进程的同步与互斥是一种通讯方式,一进程的同步与互斥是一种通讯方式,一进程可通过修改变量或信号量告知另一进程,进程可通过修改变量或信号量告知另一进程,它是否可以继续执行下去
2、,利用生产者它是否可以继续执行下去,利用生产者消费者算法,生产者进程可以传送一批数据消费者算法,生产者进程可以传送一批数据给消费进程,或者说生产者通过缓冲区与消给消费进程,或者说生产者通过缓冲区与消费者进行通讯,但费者进行通讯,但P P、V V操作只能操作只能传递信号传递信号,信号本身不包含任何数据,而进程不当还容信号本身不包含任何数据,而进程不当还容易导致进程死锁,因此,称这些同步机构为易导致进程死锁,因此,称这些同步机构为低级通讯机构低级通讯机构.2进程管理进程通信的类型进程通信的类型一、单机系统中进程间通信的四种形式单机系统中进程间通信的四种形式 P62 P62 主从式、会话式、消息或邮
3、箱机制、共享存储区方式主从式、会话式、消息或邮箱机制、共享存储区方式二、二、高级通讯机制类型1 共享存储器系统(Shared-Memory System)2 消息传递系统(Message passing System)3 管道(pipe)通信系统 3进程管理1 共享存储器系统 共享存储器系统共享存储器系统:相互通讯的进程通过:相互通讯的进程通过共享数据共享数据结构结构和和存储区存储区进行通讯,因而可进一步分为:进行通讯,因而可进一步分为:基于共享数据结构的通讯方式基于共享数据结构的通讯方式;(低效,只适;(低效,只适于传递少量数据)于传递少量数据)基于共享存储区的通讯方式基于共享存储区的通讯方
4、式。为了传送大量数为了传送大量数据,在存储区中划出一块共享存储区,诸进程可据,在存储区中划出一块共享存储区,诸进程可通过对共享存储区进行读或写数据实现通讯。通过对共享存储区进行读或写数据实现通讯。1向系统申请共享存储区中的一个分区2指定该分区的关键字3如果已经给其他进程分配了这样的存储区,4 将使用分区的描述符返回给申请者54 申请者将申请到的共享分区挂到本进程上返回4进程管理2 消息传递系统在消息传递系统中,进程间的数据交换是以消息(message,在计算机网络中又称报文)为单位。程序员直接利用系统提供的一组通讯命令(原语)来实现通讯。因其实现方法的不同,又可分为 直接通信方式(消息缓冲机制
5、)间接通信方式(信箱通信方式)5进程管理 直接通信方式:发送进程直接将消息发送给接收进程,并将它挂在接收进程的消息缓冲队列上。接收进程从消息缓冲队列中取得消息。故称为消息缓冲机制。间接通信方式:发送进程将消息发送到某个中间实体(一般称为信箱)中,接收进程从中取得消息,所以称为信箱通讯方式,相应地系统称为电子邮件系统。6进程管理消息缓冲机制(直接通信)发送进程在自己的内存空间设置一个把要发送的消息填入发送区发送区接收区接收进程在自己的内存空间设置一个公用缓冲区两通信进程必须满足下列条件两通信进程必须满足下列条件1在发送进程把消息写入缓冲区和把缓冲区挂入消息队列时,在发送进程把消息写入缓冲区和把缓
6、冲区挂入消息队列时,2 应禁止其他进程对缓冲区消息队列的访问。同理,接收应禁止其他进程对缓冲区消息队列的访问。同理,接收进程取消息时也禁止其他进程访问缓冲区消息队列进程取消息时也禁止其他进程访问缓冲区消息队列2 当缓冲区中没有信息存在时,接收进程不能接收到任何消息当缓冲区中没有信息存在时,接收进程不能接收到任何消息7进程管理 消息的一般形式消息的一般形式 消消息息缓缓冲冲通通讯讯技技术术由由Hansen Hansen 首首先先提提出出的的,基基本本思思想想是是:根根据据“生生产产者者消消费费者者关关系系”原原理理,利利用用公公用用消消息息缓缓冲冲区区实实现现进进程程间间的的信信息息交换。交换。
7、发送进程先申请一个消息缓冲区,写入消发送进程先申请一个消息缓冲区,写入消息后把该消息缓冲区送入接收进程的消息队列息后把该消息缓冲区送入接收进程的消息队列中,通知接收进程。接收进程从消息队列中摘中,通知接收进程。接收进程从消息队列中摘下一消息缓冲区,取出所需要的信息。下一消息缓冲区,取出所需要的信息。8进程管理消息的一般形式消息的一般形式:发送消息的进程名发送消息的进程名 接收消息的进程名接收消息的进程名 消息长度消息长度 消息正文消息正文9进程管理 消息缓冲通讯机构包含下列内容:消息缓冲通讯机构包含下列内容:消息缓冲区是一个数据结构消息缓冲区是一个数据结构 用用Pascal Pascal 描述
8、为:描述为:type msg=recorod type msg=recorod sender sender:消息发送者名消息发送者名 size size:消息长度消息长度 Text Text:消息正文消息正文 Next Next:下一个消息的链指针下一个消息的链指针10 发送进程和接收进程发送进程和接收进程发送原语发送原语SendSend()和接收原语()和接收原语receivereceive()()设公用信号量设公用信号量mutexmutex,并置初值为,并置初值为1 1设设SMSM为接收进程的私用信号量,置初值为为接收进程的私用信号量,置初值为0 0Send(m)begin 向系统申请一个
9、消息缓冲区 P(mutex)使用公用缓冲区 将发送区消息m送入新申请的消息缓冲区 把消息缓冲区挂入接收进程的消息队列 V(mutex)释放缓冲区 V(SM)向接收进程发送消息 endReceive(m)begin P(SM)等待接的消息的个数 P(mutex)使用公用缓冲区 摘下消息队列中的消息m 将消息队列m从缓冲区复制到接收区 释放缓冲区 V(mutex)释放公用缓冲区 end11进程管理邮箱通信邮箱通信(间接通信)(间接通信)1 1 信(邮)箱信(邮)箱 信信箱箱是是一一种种数数据据结结构构,逻逻辑辑上上它它分分成成两两部部分分:信信箱箱头头和由若干格子组成的和由若干格子组成的信箱体信箱
10、体。信信箱箱中中每每个个格格子子存存放放一一封封信信,信信箱箱中中格格子子的的数数目目和和每每格的大小在创建信箱时确定。格的大小在创建信箱时确定。进程间的通信要满足如下条件:进程间的通信要满足如下条件:a.a.发发送送进进程程发发送送消消息息时时,邮邮箱箱中中至至少少要要有有一一个个空空格格存存放放该消息。该消息。b.b.接收进程接收消息时,邮箱中至少要有一个消息存接收进程接收消息时,邮箱中至少要有一个消息存在。在。12进程管理 信箱可由OS创建,也可由用户进程创建,创建者是信箱的拥有者,据此可把信箱分为:私用信箱,公用信箱,共享信箱。在利用信箱通信时,在发送进程和接收进程之间,存在着四种关系
11、:一对一关系:即可以为发送进程和接收进程建立一条专用的通信链路;多对一关系:允许提供服务的进程与多个用户进程进行交互,也称客户/服务器交互;一对多关系:允许一个发送进程与多个接收进程交互,使发送进程用广播的形式,发送消息;多对多关系:允许建立一个公用信箱,让多个进程都能向信箱投递消息,也可取走属于自己的消息。13进程管理发送进程A 邮箱头邮箱头 邮箱体邮箱体接收进程接收进程B BDeposite(m)Remove(m)邮箱通信结构邮箱通信结构邮箱头:邮箱名称、邮箱大小、拥有该邮箱的进程名邮箱体:存放消息使用邮箱的时候应该满足:1发送进程发送消息时,邮箱中至少要有一个空格能存放该消息2接收进程接
12、收消息时,邮箱中至少有一个消息存在14进程管理 该该发发送送进进程程调调用用过过程程deposit(m)deposit(m)将将消消息息发发送送到到邮邮箱箱,接接收收进进程程调调用用过过程程remove(m),remove(m),将将消消息息m m从邮箱中取出。从邮箱中取出。FromnumFromnum发发送送进进程程的的私私用用信信号号量量。记记录录信信箱箱空格,初值为空格,初值为n n MesnumMesnum接接收收进进程程的的私私用用信信号号量量。记记录录信信箱箱有消息的个数有消息的个数 初值为初值为0 015进程管理FromnumFromnum记录信箱空格,初值为记录信箱空格,初值为
13、n nMesnumMesnum记记录录信信箱箱有有消消息息的的个个数数 初初值为值为0 0Deposit(m);BeginlocalxP(fromnum)空格数减空格数减1选择空格选择空格x将消息将消息m放入空格放入空格x中中置格置格x的标志为满的标志为满V(mesnum)向接收进程发送消息向接收进程发送消息end消息个数消息个数1Remove(m)beinglocalxP(mesnum)消息个数加消息个数加1选择满格选择满格x把满格把满格x中的消息取出放中的消息取出放m中中置格置格x标志为空标志为空V(mesnum)空格个数加空格个数加1end返回16进程管理3.6.5 3.6.5 进程通信
14、的例进程通信的例管道管道 管管道道(pipepipe)通通讯讯由由UNIXUNIX首首创创的的一种借助文件和文件系统形成的一种通信方式,。由由于于其其有有效效性性,一一些些系系统统继继UNIXUNIX之之后后相相继继引引入入了了管管道道技技术术,如如pc-dospc-dos,管管道道通通信信将将成成为为进进程程通讯的一种重要方式。通讯的一种重要方式。消息缓冲通信机构是以内存缓冲区为基础。消息缓冲通信机构是以内存缓冲区为基础。管道是以文件系统为基础。管道是以文件系统为基础。有名管道有名管道无名管道无名管道17进程管理 管道 是指用于连接一个读进程和一个写进程,以实现它们之间通信的共享方式,又称p
15、ipe文件。向管道(共享文件)提供输入的发送进程(即写进程),以字符流形式将大量的数据送入管道;而接收管道输出的接收进程(即读进程),可从管道接收数据,由于发送和接收都是利用管道进行通信的,故称为管道通信。18进程管理 为了协调双方的通信,管道通信机制必须提供以下三方面的协调能力:互斥。一个进程正在对pipe进行读/写操作时,另一进程必须等待。同步。当写(输入)进程把一定数量的数据写入pipe后,便去睡眠等待,直到读(输出)进程取走数据将其唤醒;当读进程读一空pipe,也应睡眠等待,直至写进程将数据写入管道,才将其唤醒。对方是否存在。只有确定对方已存在时,才能进行管道通信,否则会造成因对方不存
16、在而无限期等待。19进程管理管道通信的思想管道通信的思想(1 1)发发送送进进程程可可以以源源源源不不断断的的从从pipepipe一一端端写写入入数数据据流流,在在规规定定的的pipepipe文文件件的的最最大大长长度度(如如40964096字字节节)范范围围内内,每每次次写写入入的的信信息长度是可变的息长度是可变的(2 2)接接收收进进程程在在需需要要时时可可以以从从pipepipe的的另另一一端读出数据,读出单位长度也是可变的端读出数据,读出单位长度也是可变的20进程管理1 1 Pipe Pipe的建立和使用方式的建立和使用方式 pipe pipe 文件在使用之前,必须先由使用者文件在使用
17、之前,必须先由使用者建立并打开,建立并打开,建立建立pipepipe的主要工作是在系统打开文件表中建的主要工作是在系统打开文件表中建立该立该pipepipe的两个表目,的两个表目,一个表目用于控制该一个表目用于控制该pipepipe的写操作(写入端)的写操作(写入端)另一表目用于控制该另一表目用于控制该pipepipe的读操作(读出端)的读操作(读出端)此时,此时,pipepipe本身还是个空白文件。本身还是个空白文件。21进程管理 系统文件系统文件 write(Fd1,buf,size)write(Fd1,buf,size)功功能能:把把bufbuf中中的的长长度度为为sizesize字字符
18、符的的消消息息送送入入管道入口管道入口fd1fd1 fd1pipe fd1pipe入口入口 buf:buf:存放消息的空间存放消息的空间 size:size:要写入的字符长度要写入的字符长度 系统文件系统文件 read(fd0,buf,size)read(fd0,buf,size)fd0Pipefd0Pipe的出口的出口功功能能:从从pipepipe出出口口fd0fd0读读出出sizesize字字符符的的消消息息置置入入 buf buf中。中。22进程管理 pipepipe只只允允许许建建立立者者及及其其子子进进程程使使用用。一一进进程程及及其其所所有有子子孙孙构构成成一一个个进进程程族族,同
19、同族族中中的的多多个个进进程程可可共共享享一一个个pipepipe,为为了了避避免免混混乱乱,通通常常一一个个pipepipe为为两两个个进进程程专专用用,且且一一个个进进程程只只用用其其写写入入端端,另另一一进进程程只只用用其读出端。其读出端。pipe(fd)写入端读出端fd1write(fd1,buf,size)fd0read(fd0,buf,size)管道按先进现出方式FIFO传送消息,且只能单向传送消息23进程管理1 1 Pipe Pipe文件的读写操作的同步与互斥文件的读写操作的同步与互斥 如如同同消消息息缓缓冲冲一一样样,在在对对pipepipe文文件件进进行行读读写写操操作作过过
20、程程中中要要对对发发送送进进程程和和接接送送进进程程实实施施正正确确的的同同步步与与互互斥斥以以确确保保通通信信的的正确性正确性.接接收收进进程程:当当接接收收进进程程读读pipepipe时时,若若发发现现pipepipe为为空空,则则进进入入等等待待状状态态。一一旦旦有有发发送送进进程对该程对该pipepipe执行写操作是唤醒等待进程执行写操作是唤醒等待进程.24进程管理发发送送进进程程:当当发发送送进进程程在在写写pipepipe时时,总总是是先先按按pipepipe文文件件的的当当前前长长度度设设置置,如如果果pipepipe文文件件长长度度已已经经到到40964096字字节节,但但仍仍有有一一部部分分信信息息没没有有写写入入,则则系系统统使使要要求求写写pipepipe的的进进程程进进入入睡睡眠眠状状态态,当当读读pipepipe进进程程收收走走了了全全部部信信息息时时,此此时时,系系统统再再唤唤醒醒待待写写的的进进程程。它它将将余余下下部部分分信信息息继继续续送入送入pipepipe中。中。25