您好,欢迎访问三七文档
进程通信进程通信-----概念和类别概念:进程之间的信息交换称为进程通信类别:进程通信按通信内容可分为:控制信息的传送大批量数据传送把进程间控制信息的交换称为低级通信(信号量机制);把进程间大批量数据的交换称为高级通信。进程通信-----高级通讯工具•高级进程通信机制可分为四大类:•1.共享存储器系统(Shared-MemorySystem)•2.消息传递系统(Messagepassingsystem)•3.管道(Pipe)通信:又名共享文件通信•4.客户机-服务器系统(Client-Serversystem)进程通信-----共享存储器系统基于共享数据结构的通信方式:进程之间公用某些数据结构,如生产者-消费者中的缓冲区。程序员需要对进程间的同步做处理,效率比较低,只适用于传输少量数据。基于共享存储区的通信方式。在存储器中划出了一块共享存储区,各进程可通过对共享存储区中的数据的读和写来实现通信。适用于传输大量数据。进程通信-----消息传递系统消息传递机制:进程间的数据交换以消息为单位,程序员利用系统的通信原语(要进行消息传递时执行send;当接收者要接收消息时执行receive)实现通信。这种通信方式属于高级通信。优点:操作系统隐藏了通信的实现细节,简化了通信程序编制的复杂性。分类:直接通信(消息缓冲通信):发送进程直接把消息发送给接收者,并将它挂在接收进程的消息缓冲队列上。接收进程从消息缓冲队列中取得消息。间接通信(信箱通信):发送进程将消息发送到某种中间实体中(信箱),接收进程从中取得消息。在网络中称为电子邮件系统。进程通信-----管道(Pipe)通信管道(pipe文件)通信(也称共享文件通信):连接读写进程的一个特殊文件,允许进程按先进先出方式传送数据,也能使进程同步执行操作。实质:是一个共享文件,基本上可借助于文件系统的机制实现,包括(管道)文件的创建、打开、关闭和读写。管道通信:发送进程以字符流形式把大量数据送入管道,接收进程从管道中接收数据,所以叫管道通信。写进程共享文件读进程进程通信-----客户机-服务器系统用途:在网络环境的各种应用领域。实现方法:套接字、远程过程调用和远程方法调用。进程通信-----消息传递通信的实现方式•直接通信方式(消息缓冲通信)发送进程发消息时要指定接收进程的名字,反过来,接收时要指明发送进程的名字;对称形式:一对一发送原语:Send(receiver,message)接收原语:Receiver(sender,message)非对称形式:多对一发送原语:Send(P,message)接收原语:Receiver(id,message)进程通信-----消息传递通信的实现方式消息格式:(1)短定长消息格式(在单机系统环境中)(2)变长的消息格式(进程发送的消息的长度是可变的)进程的同步方式:(1)发送进程阻塞,接收进程阻塞(2)发送进程不阻塞,接收进程阻塞(3)发送进程和接收进程都不阻塞进程通信-----消息传递通信的实现方式通信链路:第一种方式(主要用于计算机网络中):由发送进程在通信之前用显式的“建立连接”命令请求系统为之建立一条通信链路,在链路使用完后拆除链路。第二种方式(主要用于单机系统中):发送进程无须明确提出建立链路的请求,只须利用系统提供的发送命令(原语),系统会自动地为之建立一条链路。注:根据通信方式的不同,又可以把链路分为两种(1)单向通信链路(2)双向通信链路进程通信-----邮箱通信概念:邮箱通信属于间接通信方式,即进程之间的通信需要通过某种中间实体来完成。该实体建立在随机存储器的公共缓冲区上,用来暂存发送进程发送给目标进程的消息,接收进程可以从该实体取出发送进程发送给自己的的消息,通常把这种实体称为邮箱。邮箱特点:(1)每一个邮箱有一个唯一的标识符;(2)消息在邮箱中可以安全保存,只允许核准的用户随时读取;(3)利用邮箱可以实现实时通信,又可以实现非实时通信。进程通信-----信箱通信信箱结构:信箱定义为一种数据结构,在逻辑上可以分为:•1,信箱头,用以存放有关信箱的描述信息,如信箱标识符,信箱的拥有者,信箱口令,信箱的空格数等;•2,信箱体,由若干个可以存放的信息(货消息头)的信箱格式组成,信箱格的数目以及每个大小的是在创建信箱是确定的。进程通信-----信箱通信信箱通信原语:1,信箱的创建和撤销。进程可利用邮箱创建的原语来建立一个新的邮箱,创建者进程应该给出邮箱名字,邮箱属性(公用,私用或共享);对于共享邮箱,还应给出共享这的名字,当进程不再需要读邮件时,可用邮箱撤销原语将之撤消。2,消息的发送和接受。当进程之间要利用邮箱进行通信时,必须给使用共享邮箱,并利用系统提供的下述通信原语进行通信。Send(mailbox,message);将一个消息发送到制定邮箱Receive(mailbox,message);从指定邮箱中接受一个消息。进程通信-----信箱通信信箱的类型:•1,私用邮箱。用户进程可为自己建立一个新邮箱,并作为哦该进程的一部分。邮箱的拥有者有权从邮箱中读取消息,其他用户则只能将自己构成的消息发送到该邮箱中。这种私用邮箱可采用单项通信链路的邮箱来实现。当拥有该邮箱的进程结束时,邮箱也随之消失。•2,公用邮箱。有操作系统创建,并提供给系统中的所有核准进程使用。核准进程既可把消息发送给该邮箱中,也可行邮箱中读取发送给自己的消息,显然,公用邮箱应采用双向通信链路的邮箱来实现。通常,公用邮箱在系统运行期间始终存在。•3,共享邮箱。由某进程创建,在创建时或创建后指明它是可共享的,挺尸须指出共享进程(用户)的名字。邮箱的拥有者和共享者都有权从邮箱中取走发送给自己的消息。进程通信-----信箱通信邮箱通信时发送进程和接收进程之间关系:•1,一对一关系。•2,多对一关系。•3,一对多关系。•4,多对多关系。3.2.2直接通信方式一、直接通信方式的基本思想二、实例—消息缓冲队列通信机制一、直接通信方式的基本思想3.2.2直接通信方式根据生产者—消费者关系原理,利用内存的公用消息缓冲池实现进程之间的信息交换。发送者进程直接将消息送入内存公用消息缓冲池,并将它挂接在接收者进程的消息缓冲队列上,接收进程从消息缓冲队列中取走消息。二、实例—消息缓冲队列通信机制1、通信描述原语描述进程A发送区send(B,a)进程B接收区mqmutexsm公用消息缓冲池PCB(B)asender:Asize:5text:Helloreceive(b)bEmpheadNULLisender:Asize:5Text:Hellonext:0进程A发送区send(B,a)进程B接收区mqmutexsm公用消息缓冲池PCB(B)asender:Asize:5text:Helloreceive(b)bEmpheadNULLsender:Asize:5Text:Hellonext:0sender:Asize:5text:Hello1、通信描述i原语描述二、实例—消息缓冲队列通信机制进程A发送区send(B,a)进程B接收区mqmutexsm公用消息缓冲池PCB(B)asender:Asize:5text:Helloreceive(b)bEmpheadNULLsender:Asize:5text:Hello1、通信描述i二、实例—消息缓冲队列通信机制sender:Asize:5Text:Hellonext:0二、实例—消息缓冲队列通信机制3.2.2直接通信方式2、发送、接收原语发送原语--send(receiver,a)send(receiver,a)原语用来发送消息,receiver是接收者进程,a是发送区起始地址;接收原语--receive(b)receive(b)原语用来接收消息,b是接收区首地址;send(receiver,a)原语描述:申请一个空消息缓冲块把以a为首址的消息写到空缓冲块中把消息缓冲块链入接收者的消息缓冲队列中receive(b)原语描述:从消息缓冲队列中取一条消息写到以b为首址的接收区释放消息缓冲块二、实例—消息缓冲队列通信机制3.2.2直接通信方式2、发送、接收原语通信描述原语实现二、实例—消息缓冲队列通信机制3.2.2直接通信方式3、实现数据结构消息缓冲块typedefstructMessageBuffersender:size:text:next:PCB中有关通信的数据项mq:消息队列头指针;mutex:消息队列互斥信号量,初值为1;sm同步信号量,用于消息队列中的消息计数,初值为0;Bufmutex:缓冲池的互斥信号量,初值为1;消息缓冲通信机制还应包含的内容:Emphead:空缓冲队列头指针;Bufempty:缓冲池的同步信号量,初值为n;二、实例—消息缓冲队列通信机制3.2.2直接通信方式3、实现发送、接收原语的类C语言描述3.2.2直接通信方式例1:如下图所示的是高级通讯原语SEND和RECEIVE不完整的框图。请填充适当的P,V操作,并说明所用信号量的意义和初值。对消息链表互斥访问的信号量S,初值为1私有信号量S1,表示当前消息链中消息的数目,初值为0③④⑤①②发送者申请一消息区消息送消息区消息挂入消息链V(S1)接收者从消息链摘下一消息消息送接收区释放消息区③④⑤①②发送者申请一消息区消息送消息区消息挂入消息链V(S1)接收者从消息链摘下一消息消息送接收区释放消息区P(S)V(S)P(S1)P(S)V(S)3.2.2直接通信方式例1:3.2.3管道通信•1.实质:利用外存进行数据通信•2.通信描述:Write(fd[1],buf,size)read(fd[0],buf,size)•3.Pipe操作的同步与互斥①互斥:即当一个进程正在对pipe执行读/写操作时,其它(另一)进程必须等待。②同步:指当写(输入)进程把一定数量(如4KB)的数据写入pipe,便去睡眠等待,直到读(输出)进程取走数据后,再把他唤醒。当读进程读一空pipe时,也应睡眠等待,直至写进程将数据写入管道后,才将之唤醒。③确定对方是否存在,只有确定了对方已存在时,才能进行通信。3.2.3管道通信进程通信-----直接消息传递系统实例消息缓冲队列通信机制中的数据结构:•(1)消息缓冲区。在消息缓冲队列通信方式中,主要利用的数据结构是消息缓冲区。•它可描述如下:•typedefstructmessage_buffer{•intsender;//发送者进程标识符•intsize;//消息长度•char*text;//消息正文•structmessage_buffer*next;//指向下一个消息缓冲区的指针•}进程通信-----直接消息传递系统实例消息缓冲队列通信机制中的数据结构:(2)PCB中有关通信的数据项。在操作系统中采用了消息缓冲队列通信机制时,除了需要为进程设置消息缓冲队列外,还应在进程的PCB中增加消息队列队首指针,用于对消息队列进行操作,以及用于实现同步的互斥信号量mutex和资源信号量sm。在PCB中应增加的数据项可描述如下:•typedefstructprocesscontrol_block{•...•structmessage_buffer*mq;//消息队列队首指针•semaphoremutex;//消息队列互斥信号量•semaphoresm;//消息队列资源信号量•...•}PCB;进程通信-----直接消息传递系统实例发送原语:发送进程在利用发送原语发送消息之前,应先在自己的内存空间设置一发送区a,把待发送的消息正文、发送进程标识符、消息长度等信息填入其中,然后调用发送原语,把消息发送给目标(接收)进程。发送原语首先根据发送区a中所设置的消息长度a.size来申请一缓冲区i,接着,把发送区a中的信息复制到缓冲区i中。为了能将i挂在接收进程的消息队列mq上,应先获得接收进程的内部标识符j,然后将i挂在j.mq上。由于该队列属于临界资源,故在执行insert操作的前后都要执行wait和signal操作。消息缓冲队列通信机制1、通信描述原
本文标题:操作系统进程通信.
链接地址:https://www.777doc.com/doc-2381515 .html