Interprocess Communication

  • 进程通信是进程进行通信和同步的机制
  • IPC 提供2个基本操作
    • 发送操作:send(message)
    • 接收操作:receive(message)
  • 进程通信流程
    • 在通信进程间建立通信链路
    • 通过 send/receive 交换消息
  • 进程链路特征
    • 物理 (如,共享内存,硬件总线)
    • 逻辑 (如,逻辑属性)

Direct Communication

  • 进程必须正确的命名对方

    • send (P, message) – 发送信息到进程P
    • receive(Q, message) – 从进程 Q接受消息
  • 通信链路的属性

    • 自动建立链路
    • 一条链路恰好对应一对通信进程
    • 每对进程之间只有一个链接存在
    • 链接可以是单向的,但通常为双向的

Indirect Communication

  • 通过操作系统维护的消息队列实现进程间的消息接收和发送
    • 每个消息队列都有一个唯一的标识
    • 只有共享了相同消息队列的进程,才能够通信
  • 通信链路的属性
    • 只有共享了相同消息队列的进程,才建立连接
    • 连接可以是单向或双向
    • 消息队列可以与多个进程相关联
    • 每对进程可以共享多个消息队列
  • 通信流程
    • 创建一个新的消息队列
    • 通过消息队列发送和接收消息
    • 销毁消息队列
  • 基本通信操作
    • send(A, message) – 发送消息到队列 A
    • receive(A, message) – 从队列 A 接受消息

Blocking and Non-blocking Communication

  • 进程通信可划分为阻塞(同步)或非阻塞(异步)
  • 阻塞通信:阻塞发送和接受
  • 非阻塞通信:非阻塞发送和接受
    没有消息发送时,接收者在请求接收消息后,接收不到任何消息

Signal

  • 进程间的软件中断通知和处理机制
  • 信号的接收处理
    • 捕获 (catch):执行进程指定的信号处理函数被调用
    • 忽略 (ignore):执行操作系统指定的缺省处理
    • 屏蔽 (mask):禁止进程接收和处理信号
  • 不足
    • 传送的信息量小,只有一个信号类型

Pipe

  • 进程间基于内存文件的通信机制
    • 子进程从父进程继承文件描述符
    • 缺省文件描述符:0 stdin, 1 stdout, 2 stderr
  • 进程不知道(或不关心)的另一端
    • 可能从键盘、文件、程序读取
    • 可能写入到终端、文件、程序

Message Queue

  • 消息队列是由操作系统维护的以字节序列为基本单位的间接通信机制
    • 每个消息 Message 是一个字节序列
    • 相同标识的消息组成按先进先出顺序组成一个消息队列 Message Queues

Shared Memory

  • 共享内存是把同一个物理内存区域同时映射到多个进程的内存地址空间的通信机制
  • 进程
    • 每个进程都有私有内存地址空间
    • 每个进程的内存地址空间需明确设置共享内存段
  • 线程
    • 同一进程中的线程总是共享相同的内存地址空间
  • 优点
    • 快速、方便地共享数据
  • 不足
    • 必须用额外的同步机制来协调数据访问