1、2.62.6进程通信2013级05班1.进程通信的类型进程通信的类型 陈海昊陈海昊 P4P162.消息传递通信的实现方式消息传递通信的实现方式 张志成张志成 P17353.直接消息传递系统实例直接消息传递系统实例 荣玉华荣玉华 P3648 进程通信之进程通信的类型2.6 进程通信 Process Communication一、进程通信的类型一、进程通信的类型The type of process communication2.6 进程通信 Process Communication1 共享存储器系统(Shared-Memory System)间接通信:间接通信:建立一个通信参与者共享的逻辑实体
2、建立一个通信参与者共享的逻辑实体信箱信箱,发送者向信箱发送消息;接收者到信箱取消息。用于联系不十发送者向信箱发送消息;接收者到信箱取消息。用于联系不十分紧密的进程之间。分紧密的进程之间。2 消息传递系统(Message Passing System)管道通信系统Y所谓“管道”,是用于连接一个读进程和一个写进程以实现他们之间通信的一个共享文件,共享文件,又名pipe文件Y发送进程发送进程以字符流形式将大量数据送入管道,接收进程可从管道接收数据,二者利用管道进行通信,所以被称为管道通信Y管道通信是一种单双工的通信系统。1 1)互斥:)互斥:管道可看作是临界资源。对管道的操作管道可看作是临界资源。对
3、管道的操作是互斥的。是互斥的。2 2)同步:)同步:当写进程把一定数量数据写入当写进程把一定数量数据写入pipepipe后后,便便去等待,直到读出进程取走数据后,把它唤醒。反去等待,直到读出进程取走数据后,把它唤醒。反之亦然。之亦然。3 3)对方是否存在:)对方是否存在:只有确定对方存在时,才可通只有确定对方存在时,才可通信。信。管道通信机制应能提供三方面的协调功能:管道通信机制应能提供三方面的协调功能:管道的分类Y1)无名管道Y进程的亲缘关系一般指的是父子关系.管道一般用于两个不同进程之间的通信.当一个进程创建了一个管道,并调用fork创建自己的一个子进程后,父进程关闭读管道端,子进程关闭写
4、管道端,这样提供了两个进程之间数据流动的一种方式.Y2)有名管道Y有名管道也是一种半双工的通信方式,但是它允许允许无亲缘关系进程间的通信无亲缘关系进程间的通信.但是由于其长期存在于系统之中,使用不当容易出错所以普通用户一般不建议使用 客户机-服务器系统Y前面所说的共享内存,消息传递等技术,虽然也可以用于实现不同计算机进程的双向通信,但客户机-服务器系统的通信机制,在网络环境的各种应用领域已成为当前主流的通信实现机制。Y实现方法:1)套接字Y 2)远程过程调用和远程方法调用套接字Y一个套接字是一个通信表示类型的数据结构,通常套接字包括两类:Y1)基于文件型Y一个套接字关联到一个特殊的文件,通信双
5、方通过对这个特殊文件的读写实现通信,原理类似于管道Y2)基于网络型Y通信双方运行在不同主机的网络环境下,被分配了一对套接字一个属于发送进程一个属于接收进程,接收方一旦接到请求就会接受并完成连接并实现进程间的通信,通信结束后系统会关闭接收方的套接字来撤销连接套接字与管道通信的区别Y1)套接字体系是全双工而管道通信是半双工Y2)套接字机制不但可以单机的不同进程通信,而且使得跨网机器间进程可以通信。Y3)套接字明确地将客户端与服务器区分开来,套接字可以实现多个客户端连到同一服务器。远程过程调用和远程方法调用Y远程过程调用远程过程调用是一个通信协议,它允许运行于一台主机系统上的进程调用另一台主机系统上
6、的进程,如果涉及的软件采用面向对象编程,那么远程过程调用也可以被称为远远程方法调用程方法调用Y远程过程的调用过程详见课本远程过程的调用过程详见课本P70陈海浩消息传递实现方式 以及进程线程对比制作人:张志成消息传递实现方式消息传递的通信方式直接消息传递系统(直接通信方式)信箱通信(间接通信方式)1.直接通信原语2.消息的格式3.进程的同步方式4.通信链路1.信箱通信结构2.信箱通信原语3.信箱通信类型直接消息传递系统1)直接通信原语(direct Communication way)(1)对称寻址方式该方式要求发送接受进程必须以显式方式提供对方标识符。send(receiver,message
7、);发送一个消息给接受进程receive(sender,message);接受发送方发来的消息直接消息传递系统(2)非对称寻址方式。接受进程可能需要与多个发送进程通信通信,无法事先指定发送进程send(P,message);发送一个消息给进程Preceive(id)接受来自任何进程的消息,id变量可设置为进行通信的发送方进程id或名字直接消息传递系统2)消息的格式字符流字符流:发送方发送的数据没有一定:发送方发送的数据没有一定的格式,接收方不需要保留各次发送的格式,接收方不需要保留各次发送之间的分界之间的分界报文报文:是网络环境下采用的消息格式:是网络环境下采用的消息格式 报头报头(heade
8、r):包括数据传输时所包括数据传输时所需的控制信息。如发送进程名,报文需的控制信息。如发送进程名,报文长度、数据类型、发送时间等长度、数据类型、发送时间等 正文正文(text):消息内容。分为定长:消息内容。分为定长和变长两种和变长两种直接消息传递系统3)进程的同步方式等接收者回信后才继续向前执行,称为等接收者回信后才继续向前执行,称为阻塞发送阻塞发送发送完消息后不等回信继续执行,称为发送完消息后不等回信继续执行,称为不阻塞发送不阻塞发送直到收到发送进程的消息。称为直到收到发送进程的消息。称为阻塞接收阻塞接收不要求进程等待,当需要信件时,去查找并接收信件,不要求进程等待,当需要信件时,去查找并
9、接收信件,需要时再发送回答信件。称为需要时再发送回答信件。称为非阻塞接收非阻塞接收直接消息传递系统3)进程的同步方式(1)发送进程阻塞,接受进程阻塞(主要用)发送进程阻塞,接受进程阻塞(主要用于进程之间紧密同步,发送进程和接受进程之于进程之间紧密同步,发送进程和接受进程之间无缓冲)间无缓冲)(2)发送进程不阻塞,接受进程阻塞(应用)发送进程不阻塞,接受进程阻塞(应用最广泛的进程同步方式)最广泛的进程同步方式)(3)发送进程和接受进程均不阻塞(较常见)发送进程和接受进程均不阻塞(较常见的进程同步方式)的进程同步方式)直接消息传递系统4)通信链路)通信链路(communication link):
10、在发:在发送进程和接收进程之间为信息传送而建立送进程和接收进程之间为信息传送而建立的一条通路的一条通路根据建立方式分为:显示建立:由发送进程利用建立命令建立,用完后用删除显示建立:由发送进程利用建立命令建立,用完后用删除命令拆除。(网络中)命令拆除。(网络中)隐式建立:利用发送命令(原语),系统自动建立。隐式建立:利用发送命令(原语),系统自动建立。(单机中)(单机中)直接消息传递系统根据连接方式分为:点点连接:点点连接:一条链路只有两个结点。一条链路只有两个结点。多点连接:多点连接:一条链路连接多个结点。一条链路连接多个结点。根据通信方向分为:根据通信方向分为:单向:单向:发送进程发送进程
11、接收进程。接收进程。双向:双向:进程进程 进程进程根据链路的容量分为:根据链路的容量分为:无容量:无容量:链路上没有缓冲区,不能暂存信息。链路上没有缓冲区,不能暂存信息。有容量:有容量:链路上有缓冲区,能暂存信息。链路上有缓冲区,能暂存信息。信箱通信属于间接通信方式,即进程之间的通信,需要通过某种中间实体来完成。发送者向信箱发送消息;接收者到信箱取消息。用于联系不十分紧密的进程之间。1)信箱的结构 信箱头格子1格子2格子3格子4信箱头:信箱头:用以存放有关信用以存放有关信箱的描述信息,如信箱标箱的描述信息,如信箱标识符,信箱的拥有者,信识符,信箱的拥有者,信箱口令,信箱的空格数等箱口令,信箱的
12、空格数等 信箱体:信箱体:由若干个可以存由若干个可以存放消息的信箱格组成放消息的信箱格组成2)信箱通信原语信箱的创建和撤消信箱的创建和撤消 进程利用信箱创建原语建立一个新信箱。进程利用信箱创建原语建立一个新信箱。消息的发送与接收消息的发送与接收 当进程之间要利用邮箱进行通信时,必当进程之间要利用邮箱进行通信时,必须要用共享信箱,并利用系统提供的下述须要用共享信箱,并利用系统提供的下述通信原语进行通信通信原语进行通信。Send(mailbox,message);将一个消息发送到指定邮箱Receive(mailbox);从指定邮箱中接受一个消息3)邮箱的类型私用信箱私用信箱(private mai
13、lbox):由用户进程自己创建,并作为该进由用户进程自己创建,并作为该进程的一部分。拥有者可从中读,其它进程只能向其中发送。拥程的一部分。拥有者可从中读,其它进程只能向其中发送。拥有者进程结束,信箱消失。有者进程结束,信箱消失。公用信箱公用信箱(public mailbox):由由OS创建,允许系统中所有核准创建,允许系统中所有核准用户读、放。用户读、放。共享信箱共享信箱(shared mailbox):由某进程创建,指明共享属性及共由某进程创建,指明共享属性及共享进程名。创建者和共享者有权从信箱中取走消息。享进程名。创建者和共享者有权从信箱中取走消息。发送者进程和接收者进程之间的关系发送者进
14、程和接收者进程之间的关系一对一:一对一:专用的通信链路,两个进程间建立私用的通信连接,专用的通信链路,两个进程间建立私用的通信连接,不受其他进程的干扰和影响。不受其他进程的干扰和影响。多对一:多对一:允许提供服务的进程与多个用户进程交互,多个向一允许提供服务的进程与多个用户进程交互,多个向一个发信息。用于现代操作系统个发信息。用于现代操作系统(客户(客户/服务器)服务器)一对多:一对多:一个发送者和多个接收者的通信关系。发送进程可利一个发送者和多个接收者的通信关系。发送进程可利用广播形式,向接收者发送消息。用广播形式,向接收者发送消息。多对多:多对多:如公用信箱,允许多个进程都能象信箱中投递消
15、息,如公用信箱,允许多个进程都能象信箱中投递消息,也可从信箱中取走属于自己的消息。也可从信箱中取走属于自己的消息。进程与线程的关系和区别1.定义进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源进程与线程的关系和区别2.关系 一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之间可以并发执行.相
16、对进程而言,线程是一个更加接近于执行体的概念,它可以与同进程中的其他线程共享数据,但拥有自己的栈空间,拥有独立的执行序列。进程与线程的关系和区别3.区别 进程和线程的主要差别在于它们是不同的操作系统资源管理方式。进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。进程与线程的关系和区别1)简
17、而言之,一个程序至少有一个进程,一个进程至少有一个线程.2)线程的划分尺度小于进程,使得多线程程序的并发性高。3)另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。4)线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。5)从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。这就是进程和线程的重要区别。谢谢观看直接消息传递系
18、统实例制作人:荣玉华直接消息传递系统实例 消息缓冲队列通信机制,是在物理上实现消息缓冲队列通信机制,是在物理上实现“消息传递系统消息传递系统”的一种通信机制。首先由的一种通信机制。首先由Hansan提出,并在提出,并在RC4000系统上实现。系统上实现。在一个消息定长的简单直接通信消息系统中,进程间通过两在一个消息定长的简单直接通信消息系统中,进程间通过两个基本操作进行通信。个基本操作进行通信。在这种通信机制中,发送进程利用在这种通信机制中,发送进程利用send原语将消息直接发送原语将消息直接发送给接收进程;接收进程则利用给接收进程;接收进程则利用receive原语接收信息。原语接收信息。&S
19、end(A,a):发送者用以发送消息。发送者用以发送消息。A A为为&Receive(b):接收者用以接收当前已到达的消息。接收者用以接收当前已到达的消息。b b。若当前无消息到达,则接收者进入等待状态直到到。若当前无消息到达,则接收者进入等待状态直到到达一个消息。达一个消息。二、消息缓冲队列通信机制二、消息缓冲队列通信机制2.6 进程通信 Process Communication1 1)消息缓冲区:)消息缓冲区:int 发送者进程标识符发送者进程标识符 int 消息长度消息长度 *消息正文消息正文 指向下指向下一个消息缓冲区的指针一个消息缓冲区的指针1.消息缓冲队列通信机制中的数据结构 为
20、保证消息缓冲区的互斥,协调发送进程和接收进程为保证消息缓冲区的互斥,协调发送进程和接收进程的同步,在的同步,在的的PCB中增加的有关数据项。中增加的有关数据项。Typdef struct 消息队列队首指针消息队列队首指针 semaphore 消息队列互斥信号量,初值为消息队列互斥信号量,初值为1 semaphore 消息队列私有信号量,记录消息个数,消息队列私有信号量,记录消息个数,初值为初值为0;2 2)PCBPCB中有关通信的数据项中有关通信的数据项,即发送进程把消息写入缓冲区、把缓冲即发送进程把消息写入缓冲区、把缓冲区挂入消息队列时,应禁止其他进程对该缓冲队列的访问,同区挂入消息队列时,
21、应禁止其他进程对该缓冲队列的访问,同理,当接收进程正从消息队列中取消息时,应禁止其他进程对理,当接收进程正从消息队列中取消息时,应禁止其他进程对该队列的访问。应设该队列的访问。应设mutex-互斥信号量互斥信号量 消息缓冲队列是消息缓冲队列是,每个接收进程拥有自己,每个接收进程拥有自己的消息队列。因此的消息队列。因此。Sm为接收进程的私用信号量为接收进程的私用信号量(初值为初值为0)2.过程说明A A的的PCBPCB.Send(B,a).Sender:ASIZE:消息长度消息长度TEXT:消息正文消息正文B的的PCB.mq Mutex sm.Receive(b).Sender:ASIZE:消息
22、长度消息长度TEXT:消息正文消息正文.发发送送区区a:a:接接收收区区b b发送进程发送进程 A A消息消息消息消息.Sender:ASIZE:消息长度消息长度TEXT:消息正文消息正文接收进程接收进程 B BSend(receiver,m)Begin 向系统申请一个消息缓冲区;向系统申请一个消息缓冲区;把把m送入新申请的消息缓冲区,送入新申请的消息缓冲区,wait(mutex);把消息缓冲区挂入接收进程的把消息缓冲区挂入接收进程的消息队列。消息队列。signal(mutex);signal(Sm);End;Receive(n)Begin wait(Sm);Wait(mutex);摘下消息队
23、列中的消息摘下消息队列中的消息n,Signal(mutex);将消息将消息n从缓冲区复制到接收从缓冲区复制到接收区;区;释放缓冲区;释放缓冲区;End;发送进程是否可以发送消息,则取决于是否申请到缓冲区。发送进程是否可以发送消息,则取决于是否申请到缓冲区。具体见课本具体见课本P743 发送原语procedure send(receiver,a)begin getbuf(a.size,i)i.sender:=a.sender i.size:=a.size i.text:=a.text i.next:=0 getid(PCB.receiver.j)wait(j.mutex)insert(j.mq.
24、I)signal(j.mutex)signal(j.sm)enda为发送进程在自己的内存空为发送进程在自己的内存空间中设置的一发送区。间中设置的一发送区。把消息正文、发送进程标识符、把消息正文、发送进程标识符、消息长度等信息填入消息长度等信息填入a中。中。根据根据a.size申请一缓冲区申请一缓冲区i,把,把a中信息复制到中信息复制到i中,中,获得接收进程的内部标识符获得接收进程的内部标识符j,将将i挂在挂在j.mq上。因为消息队上。因为消息队列为临界资源,对其操作要求列为临界资源,对其操作要求互斥。互斥。4 接收原语procedure receive(b)begin j:=internal
25、name wait(j.sm)wait(j.mutex)remove(j.mq.i)signal(j.mutex)b.sender:=i.sender b.size:=i.size b.text:=i.text end接收进程调用接收原语,在自接收进程调用接收原语,在自己的消息缓冲队列己的消息缓冲队列mq中,摘下中,摘下第一个消息缓冲区(如第一个消息缓冲区(如i),将),将其复制到以其复制到以b为首址的指定消息为首址的指定消息接收区内。接收区内。重要问题1.低级通信和高级通信 低级通信:效率低;通信不透明,只为进程通信提供了共享存储器。高级通信:使用方便;高效地传输大量数据。2.消息在传递中的两种方式 直接通信 间接通信直接通信:发送进程利用OS所提供的发送命令(原语),直 接把消息发送给目标进程。间接通信:发送和接收进程,都通过共享中间体(称为邮箱)的方式经行消息的发送和接受,完成进程间的通信。重要问题重要问题3.管道通信含义管道通信含义所谓“管道”,是用于连接一个读进程和一个写进程以实现他们之间通信的一个共享文件,共享文件,又名pipe文件发送进程发送进程以字符流形式将大量数据送入管道,接收进程可从管道接收数据,二者利用管道进行通信,所以被称为管道通信谢谢大家!作者:荣玉华班级:五班THANKS