消息传递通信的实现方式

直接消息传递系统 —— 利用OS所提供的发送命令(原语)

  1. 直接通信原语
    1)对称寻址方式 —— 要求发送进程和接收进程都必须以显式方式提供对方的标识符。
    系统提供以下两条通信命令:
    send(receiver,message);
    receive(sender,message);

    不足:一旦改变进程的名称,则可能需要检查所有其他进程的定义,有关对该进程旧名称的所有引用都必须查找到,以便将其修改为新名称,显然,这样的方式不利于实现进程定义的模块化。

    2)非对称寻址方式 —— 接收进程可能需要与多个发送进程通信,无法事先指定发送进程。因此,在接受进程的原语中,不需要命名发送进程,只填写表示源进程的参数,即完成通信后的返回值,而发送进程仍需要命名接收进程。
    send(receiver,message);
    receive(id,message); 接收来自任何进程的消息,id变量可设置为进行通信的发送方进程id或名字。

  2. 消息格式
    比较短的定长消息格式 —— 减少对消息的处理和存储开销
    变长的消息格式 —— 处理、存储方面付出更多的开销,方便用户

  3. 进程的同步方式
    在完成消息的发送或接收后,存在三种情况:
    1)发送进程阻塞,接收进程阻塞 —— 这种情况主要用于进程之间紧密同步,发送进程和接收进程之间无缓冲时。
    2)发送进程不阻塞,接收进程阻塞 —— 发送进程不阻塞,因而它可以尽快地把一个或多个消息发送给多个目标;而接收进程平时处于阻塞状态,直到发送进程发来消息时才被唤醒
    3)发送进程不阻塞,接收进程不阻塞 —— 发送进程和接收进程都在忙于自己的事情,仅当发生某事件使它无法继续运行时,才把自己阻塞起来等待

  4. 通信链路
    通信双方建立链路,两种方式:

    1)由发送进程在通信之前用显式的“建立连接”命令(原语)请求系统为之建立一条通信链路,在链路使用完成后拆除链路 —— 主要用于计算机网络

    2)发送进程无须明确提出建立链路的请求,只须利用系统提供的发送命令(原语),系统会自动地为之建立一条链路 —— 主要用于单机系统中

    根据通信方式的不同,把链路分成两种:
    1)单向通信链路
    2)双向通信链路

间接通信方式 —— 信箱通信
进程之间的通信,需要通过某种中间实体来完成,该实体建立在随机存储器的公用缓冲区上,用来暂存发送进程发送给目标进程的消息;接收进程可以从该实体中取出发送进程发送给自己的消息,通常把这种中间实体称为邮箱,每个邮箱都有唯一的标识符。消息在邮箱中可以安全地保存,只允许核准的目标用户随时读取。既可实现实时通信,又可实现非实时通信。

  1. 信箱的结构 —— 一种数据结构,两个部分
    1)信箱头,用以存放有关信箱的描述信息 —— 信箱标识符、信箱的拥有者、信箱口令、信箱的空格数等
    2)信箱体 —— 由若干个可以存放消息的信箱格组成,信箱格的数目以及每格的大小是在创建信箱时确定的

  2. 信箱通信原语
    1)邮箱的创建和撤销
    进程可利用邮箱创建原语来建立一个新邮箱,创建者进程应给出邮箱名字、邮箱属性(公用、私用或共享);对于共享邮箱,还应给出共享者的名字,当进程不再需要读邮箱时,可用邮箱撤销原语将之撤销。
    2)消息的发送和接收。当进程之间要利用邮箱进行通信时,必须使用共享邮箱,并利用系统提供的通信原语进行通信。
    Send(mailbox,message);
    Receive(mailbox,message);

  3. 信箱的类型
    1)私用邮箱。用户进程可为自己建立一个新邮箱,并作为该进程的一部分。邮箱的拥有者有权从邮箱中读取消息,其他用户则只能将自己构成的消息发送到该邮箱中,可采用单向通信链路的邮箱来实现。当拥有该邮箱的进程结束时,邮箱也随之消失。

    2)公用邮箱。由操作系统创建,并提供给系统种的所有核准进程使用。核准用户既可把消息发到该邮箱,也可从邮箱读取给自己的消息,应采用双向通信链路的邮箱来实现。在系统运行期间始终存在。

    3)共享邮箱。由某进程创建,在创建时或创建后指明它是可共享的,同时须指出共享进程的名字。邮箱的拥有者和共享者都有权从邮箱中取走发送给自己的消息。

    发送进程和接收进程存在以下四种关系:
    1)一对一
    2)多对一
    3)一对多
    4)多对多

  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值