文章目录
  1. 进程通信基本概念
    1. 直接通信与间接通信
    2. 阻塞通信与非阻塞通信
  2. 信号与管道
    1. 信号
    2. 管道
  3. 消息队列与共享内存
    1. 消息队列
    2. 共享内存
  4. D-bus机制
  5. Binder机制
    1. 一次拷贝

进程通信基本概念

进程通信,简称IPC,是进程进行通信与同步的机制;IPC提供2个基本操作——send(发送操作)与receive(接收操作);进程通信的流程为:(1)在通信进程间建立通信链路,(2)通过send/receive交互消息;

直接通信与间接通信

直接通信:send(P,mes)<->receive(Q,mes),进程在直接通信时必须指明发送/接收的对象是谁。

间接通信:通过操作系统维护的消息队列(内核中)实现进程间消息的接收与发送。每个消息队列都有一个唯一的标识,只有共享了相同消息队列的进程才可以通信。

阻塞通信与非阻塞通信

阻塞通信

  • 发送:发送进程在发送消息后进入等待,直到接收进程成功接收。
  • 接收:接收进程在请求消息后进入等待,直到接收到消息。

非阻塞通信

  • 发送:发送进程在发送完消息后不用等待,可继续进行其他操作。
  • 接收:接收进程在请求消息后如果没有收到消息不用等待,可继续进行其他操作。

信号与管道

信号

进程间软件中断通知与处理机制。信号机制的实现如下图。

管道

进程间基于内存文件的通信机制。是一种间接通信机制。

  • 创建管道:pipe(rgfd);rgfd是两个文件描述符组成的数组,其中rgfd[0]是读文件描述符、rgfd[1]是写文件描述符。
  • 读管道:系统调用read(fd, buffer, n)
  • 写管道:系统调用write(fd, buffer, n)

消息队列与共享内存

消息队列

操作系统维护的以字节序列为基本单位的间接通信机制。

共享内存

操作系统通过将同一物理内存区域映射到多个进程的地址空间来实现进程通信。需要额外的同步互斥机制。是进程间最快速的通信机制。

D-bus机制

 

Binder机制

一次拷贝

当进程A向进程B拷贝数据时,首先将进程A的数据从用户空间拷贝到内核空间,再将内核空间中的数据所在内存区域映射到进程B的用户空间,这样使用一次拷贝即可传递进程A的数据到进程B,之所以没有使用共享内存是为了避免同步互斥的开销。