浅谈操作系统——消息传递间接通信的实现方法

494 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第12天,点击查看活动详情

消息传递间接通信的实现方法

信箱的种类

  • 私用信箱
    • 用户进程为自己创建的信箱,是进程的一部分。 只有自己有权读,可采用单向链路实现。
  • 公用信箱
    • 由操作系统创建,所有系统核准进程都可使用, 采用双向通信链路实现。
  • 共享信箱
    • 由某进程创建并指明可共享,则拥有者和共享者可使用。

信箱的结构

image.png

间接通信方式

  • 信箱的创建与撤消
  • 信箱中消息的发送与接收
  • 信箱使用规则
    • 若发送信件时信箱已满,则发送进程被置为“等信箱”状态, 直到信箱有空时才被唤醒
    • 若取信件时信箱中无信,则接收进程被置为“等信件”状态, 直到有信件时才被唤醒

image.png

Send实现

send(MailBox,M):

把信件M送到指定的信箱MailBox中

步骤

  • 查找指定信箱MailBox ;
  • 若信箱未满,则把信件M送入信箱且唤醒“等信件”者;
  • 若信箱已满,置发送信件进程为“等信箱”状态;

receive实现

receive(MailBox,X):

从指定信箱MailBox中取出一封信,存放 到指定的地址X中

步骤

  • 查找指定信箱MailBox ;
  • 若信箱中有信,则取出一封信存于X中且唤醒“等信箱”者;
  • 若信箱中无信件,置接收信件进程“等信件”状态

在操作系统空间设置一组缓冲区。

  • 当发送进程需要发送消息时,执行send系统调用,产生访管 中断,进入操作系统。
  • 操作系统为发送进程分配一个空缓冲区,并将所发送的消息 从发送进程copy到缓冲区中,然后将该载有消息的缓冲区连 接到接收进程的消息队列队尾,如此就完成了发送过程。
  • 发送进程返回到用户态继续执行
  • 在以后某个时刻,当接收进程执行到receive接收原语时,也产 生访管中断进入操作系统。
  • 由操作系统将载有消息的缓冲区从消息队列中取出,并把消息 内容copy到接收进程空间,之后收回缓冲区,如此就完成了消 息的接收,接收进程返回到用户态继续进行