系统相关
首页 > 系统相关> > 操作系统 进程通信方式

操作系统 进程通信方式

作者:互联网

进程通信的类型

信号量机制就是一种进程通信方式!!

进程通信的概念

通信方式:

共享内存通信方式

共享存储器系统(Shared-Memory System)

通信方法:

在这里插入图片描述

消息传递通信方式

直接通信方式
发送进程直接将消息发送给接收进程,并将消息挂在接收进程
的消息队列上,接收进程从消息队列中取得消息。

间接通信方式
发送进程发送消息到“信箱”中,接收进程从“信箱”中取得消息,
相应的系统称为电子邮件系统。

消息传递方式的变种很多,常用的有直接通信(消息缓冲区)方式和间接通信(信箱)方式,下图是消息传递通信机制模型。
在这里插入图片描述

消息缓冲通信方式

在这里插入图片描述
发送者,在通信中存在两种可能的行为:

接收者,也存在两种可能的行为:

消息缓冲机制通信过程描述如下:

(1)发送者在发送消息前,先在自己的内存空间设置一个发送区,把欲发送的消息填入其中。
(2)发送者申请一个消息缓冲区,将已准备好的消息从发送区送到该消息缓冲区,并将发送者进程的名字、消息的开始地址以及消息的长度(通常以字节或字为单位)等信息填入该消息缓冲区中,然后把该消息缓冲区挂到接收进程的消息链上。
(3)接收者在接收消息前先在自己的内存空间设置相应的接收区。
(4)接收者摘下消息链上的第一条消息,将该消息从消息缓冲区复制到接收区,然后释放该消息缓冲区

据结构描述如下:

struct messagebuffer{
	int sender;         //发送进程标识符
	int size;           //消息长度
	char text[MAXSIZE]; //消息正文,MAXSIZE为数组text的长度
	struct messagebuffer *next;// next为指向下一个消息缓冲区的指针}

在这里插入图片描述

发送原语send描述如下

void send(receiver,a){
	lock out interrupts;     //关中断
	getbuffer(a.size,i);     
	i.sender=a.sender;       
	i.size=a.size;
	i.text=a.text;
	i.next=NULL;
	getid(PCBset,receiver,j);  
	P(j.mutex);                //互斥使用j的消息队列
	Insert(j.mq,i);            
	V(j.mutex); V(j.sm); 
	unlock interrupts;         //开中断}

接收原语receive描述如下:

void receive(b){
	lock out interrupts;    //关中断
	j=internal name;        
	P(j.sm);                
	P(j.mutex);             //互斥使用j的消息队列
	Remove(j.mq,i);         
	V(j.mutex); 
	b.sender=i.sender;      
	b.size=i.size;
	b.text=i.text;
	Releasebuff(i); unlock interrupts;      //开中断}

信箱通信方式

在这里插入图片描述

信箱通信的同步规则

(1)若发送信件时信箱已满,则发送进程应转变成等待信箱状态,直到信箱有空信格时才被唤醒。
(2)若取信件时信箱中已无信件,则接收进程转变成等待信件状态,直到有信件时才被唤醒。

以私用信箱为例描述信箱机制的通信过程

(1)接收者创建属于自己的私用信箱;
(2)发送者产生一封信件(即一个消息)。
(3)发送者把信件投入接收者的私用信箱。
(4)接收者从自己的私用信箱中读取信件。

投递原语desposit描述如下

void deposit(boxname,msg){   
	lock out interrupts;     //关中断
	P(emptynum);          //有空格子否,无则阻塞自己
	选择标志位为空的格子;
	把信件msg放入该空格子中;
	置该格子的标志位为满;
	V(mesnum); //信件多了一个,若有接收者进程被阻塞则唤醒之
	unlock interrupts;      //开中断  }

读取原语remove描述如下

void remove(boxname,msg){  
	lock out interrupts;       //关中断
	P(mesnum);                //有信件否,无则阻塞自己
	选择标志位为满的格子;
	把该满格子中的信件放入msg中;
	置该格子的标志位为空;
	V(emptynum);          
	//空格子多了一个,若有发送者进程被阻塞则唤醒之
	unlock interrupts;        //开中断}

管道通信方式

管道(Pipe)通信(共享文件方式)

管道的作用类似于消息缓冲区(生产-消费),但有显著不同特点:
① 以文件为传输介质,可传输大量数据。
② 以字符流方式读写,不必以消息为单位。
③ 以队列方式工作,先写入的先读出。

管道(Pipe)通信

标签:信箱,操作系统,通信,发送,消息,进程,接收
来源: https://blog.51cto.com/u_14175378/2759917