1.直接消息传递系统
这是指发送进程利用OS所提供的发送命令,直接把消息发送给目标进程。
1.1直接通信原语
(1)对称寻址方式。
系统提供下述两条通信命令(原语)
Send(Receiver,message); 发送一个消息给接收进程;
Receive(Sender,message); 接收Sender发 来的消息;
例如,原语Send(P2, m)表示将消息m1发送给接收进程P2;而原语Receive(P1,my)则 表示接收由P1发来的消息m1。
(2)非对称寻址方式
通常,系统提供下述两条通信命令(原语):
Send(P,message);发送 一个消息给进程P;
Receive(id,Imessage);接收来自任何进程的消息,id变量可设置为进行通信的发送方进程id或名字。
1.2消息的格式
在消息传递系统中所传递的消息,必须具有一定的消息格式。
通常,可把一个消息分成消息头和消息正文两部分。
消息头包括消息在传输时所需的控制信息,如源进程名、目标进程名、消息长度、消息类型、消息编号及发送的日期和时间;
消息正文则是发送进程实际上所发送的数据。在某些0S中,消息采用比较短的定长消息格式,在有的0S中,采用变长的消息格式,即进程所发送消息的长度是可变的。
1.3进程同步方式
在进程之间进行通信时,同样需要有进程同步机制,以使诸进程间能协调通信。我们可得到以下三种情况:
(1)发送进程阻塞,接收进程阻塞。这种情况主要用于进程之间紧密同步,发送进程和接收进程之间无缓冲时。这两个进程平时都处于阻塞状态,直到有消息传递时。
(2)发送进程不阻塞,接收进程阻塞。这是一种应用最广的进程同步方式。平时,发送进程不阻塞,因而它可以尽快地把一一个或多个消息发送给多个目标;而接收进程平时则处于阻塞状态,直到发送进程发来消息时才被唤醒。
(3)发送进程和接收进程均不阻塞。这也是一.种较常见的进程同步形式。平时,发送进程和接收进程都在忙于自己的事情,仅当发生某事件使它无法继续运行时,才把自己阻塞起来等待。
1.4通信链路
为使在发送进程和接收进程之间能进行通信,必须在两者之间建立一条通信链路。有两种方式建立通信链路:
第一种方式是由发送进程在通信之前用显式的“建立连接”命令(原语)请求系统为之建立一条通信链路;在链路使用完后,也用显式方式拆除链路。这种方式主要用于计算机网络中。
第二种方式是发送进程无须明确提出建立链路的请求,只须利用系统提供的发送命令(原语),系统会自动地为之建立一条链路。这种方式主要用于单机系统中。
而根据通信方式的不同,则又可把链路分成两种:
①单向通信链路,只允许发送进程向接收进程发送消息,或者相反;
②双向链路;即允许由进程A向进程B发送信息,也允许进程B同时向进程A发送消息。
2.信箱通信
信箱通信属于间接通信方式,即进程之间的通信需要 通过某种中间实体来完成。该实体用来暂存发送进程发送给目标进程的消息;接收进程则从该实体中取出对方 发送给自己的消息。 通常把这种中间实体称为信箱。信箱可分为信箱头和 信箱体两部分。利用信箱通信方式,既可实现实时通信, 又可实现非实时通信。 系统为信箱通信提供了若干条原语,分别用于信箱的创建、撤消和消息的发送、接收等。
2.1信箱的结构
信箱定义为一种数据结构。在逻辑上,可以将其分为两个部分:
(1)信箱头,用以存放有关信箱的描述信息,如信箱标识符、信箱的拥有者、信箱口令、信箱的空格数等;
(2)信箱体,由若千个可以存放消息(或消息头)的信箱格组成,信箱格的数目以及每格的大小是在创建信箱时确定的。
2.2心想通信原语
(1)信箱的创建和撤消。进程利用信箱创建原语来建立一个新信箱。当进程不再需要读信箱时,可用信箱撤消原语将之撤消。
(2)消息的发送和接收。当进程之间要利用信箱进行通信时,必须使用共享信箱,并利用系统提供的通信原语进行:
Send(mailbox,message);将一个消息发送到指定信箱;
Receive(mailbox,message); 从 指定信箱中接收一一个消息;
2.3信箱的类型
信箱分为以下三类:
1)私用信箱:由用户进程创建,并作为该进程的- -部分。信箱的拥有者有权从信箱中读取消息,其他用户则只能将自己构成的消息发送到该信箱中。-- 单向通信链路
2)公用信箱:由操作系统创建,并提供给系统中的所有核准进程使用。--双向通信链路核准进程既可把消息发送到该信箱中,也可从信箱中读取发送给自己的消息。
3)共享信箱:由某进程创建,需指出共享进程的名字。
标签:发送,--,通信,信箱,消息,链路,进程,消息传递,2.6 From: https://blog.51cto.com/hwuu/6149652