操作系统----消息传递

消息传递是以消息为单位进行进程之间一种通信的手段,消息是由一组消息组成的集合,包括了消息头和消息尾,消息的传递实现需要两个原语分别是Send()Seceive(),Send()负责发送消息,Receive()是负责接受消息的,当没有接受到消息的时候,接受进程进入等待的状态,直到有消息到达为止。这样的话不仅起到交换信息的功能,还能使进程同步。

   消息传递的方式有两种:直接消息传递,采用信箱传递方式

  直接的消息的传递:只需要每个进程知道的消息发向哪和从哪里接受到消息。

  格式:

Send(Target,Message);//将消息发送给目标的进程

receive(Soure,&Message);//从源进程中接受一个消息

直接消息传递下,由于没有缓冲机制,该方式假如发送进程先行发送,执行Send()原语,则发送的进程阻塞,直到接受进程执行Receive()原语进行接受,反之也是一样的。所以没有缓冲,所以发送进程和接受进程之间必须交替的进行。

信箱的消息传递方式:

采用消息信箱的方式是一种简介的通信的方式,接受方和发送方需要通过信箱进行交互信息,就像是以前通信一样。那么刚刚的target ,he Soure都是信箱了,就是mailbox.

Send()

Send(MailBox,Message);//

其中MailBox就是信箱,是一种结构体,原语将信息发送到信箱,过程为:首先是检查指定的邮箱是否满,如果满了,则发送信件进程就会被堵塞,进入“等待发送信件”,状态,假如没有满的话,将信件Message存入信箱中,有进程等待取信件,那么将会唤醒正在等待取信件的进程。

Receive():

Receive(MailBox,&Message);

执行的过程:首先还是检查信箱中的文件,如果信箱中有信的话,那么就会取出信件,放入Message,假如这时有进程在等待将信件存入信箱中,则等待的发送的进程将会被唤醒。如果没有信件,那么取信件的进程将会被阻塞。

你可能感兴趣的:(操作系统)