进程通信(IPC, Inter-Process Communication)
概述
-
进程通信是进程进行通信和同步的机制
-
IPC提供2个基本操作
- 发送操作:send(message)
- 接收操作:receive(message)
-
进程通信流程
- 在通信进程间建立通信链路
- 通过send/receive交换信息
-
进程链路特征
- 物理(如,共享内存,硬件总线)
- 逻辑(如,逻辑属性)
直接通信
-
进程必须正确的命名对方
- send(P, message)——发送信息到进程P
- receive(Q, message)——从进程Q接收消息
-
通信链路的属性
- 自动建立链路
- 一条链路恰好对应一个通信进程
- 每对进程之间只有一个链接存在
- 链接可以是单向的,但通常为双向的
间接通信
-
通过操作系统维护的消息队列实现进程间的消息接收和发送
- 每个消息队列都有一个唯一的标识
- 只有共享了相同消息队列的进程,才能够通信
-
通信链路的属性
- 只有共享了相同消息队列的进程,才建立连接
- 连接可以是单向或双向
- 消息队列可以与多个进程相关联
- 每对进程可以共享多个消息队列
-
通信流程
- 创建一个新的消息队列
- 通过消息队列发送和接收消息
- 销毁消息队列
-
基本通信操作
- send(A, message)——发送消息到队列A
- receive(A, message)——从队列A接受消息
阻塞(同步)与非阻塞(异步)通信
-
阻塞通信
- 阻塞发送——发送者在发送消息后进入等待,直到接收者成功收到
- 阻塞接收——接收者在请求接收消息后进入等待,直到成功收到一个消息
-
非阻塞通信
- 非阻塞发送——发送者可在消息发送后,可立即进行其它操作
- 非阻塞接收——没有消息发送时,接收者在请求接收消息后,接收不到任何消息
通信方式
-
信号(signal):进程间的软件中断通知和处理机制,如SIGKILL,SIGSTOP,SIGCONT等
-
信号的接收处理
- 捕获:执行进程指定的信号处理函数被调用
- 忽略:执行操作系统指定的缺省处理
- 屏蔽:禁止进程接收和处理信号
- 不足:传送的信息量小,只有一个信号类型
-
信号的接收处理
-
管道(pipe)
-
进程间基于内存文件的通信机制
- 子进程从父进程继承文件描述符
- 缺省文件描述符:0 stdin,1 stdout, 2 stderr
-
进程不知道另一端
- 可能从键盘、文件、程序读取
- 可能写入到终端、文件、程序
-
-
消息队列:是由操作系统维护的以字节序列为基本单位的间接通信机制
- 每个消息是一个字节序列
- 相同标识的消息组成按先进先出顺序组成一个消息队列
-
共享内存:是把同一物理内存区域同时映射到多个进程的内存地址空间的通信机制
-
进程
- 每个进程都有私有内存地址空间
- 每个进程的内存地址空间需要明确设置共享内存段
-
线程
- 同一进程中的线程总是共享相同的内存地址空间
-
优点:快速、方便的共享数据
-
不足:必须用额外的同步机制来协调数据访问
-
网友评论