1. 进程通讯相关概念
1. 通讯流程、属性、链路
进程通讯是进程之间进行信息交流和同步的机制,任何一个进程通讯机制都包含两个基本操作:一个是发送操作(send),一个是接收操作(receive)。
-
进程通讯流程
在通信进程间建立相应的通信链路,然后通过send/receive交换信息 -
通讯链路特征
不同通讯的链路特征不一样,比如说有物理链路(如共享内存、硬件总线),有逻辑链路(如逻辑属性等) -
阻塞(同步)和非阻塞(异步)通信
通讯有两种属性,分别是阻塞通讯和非阻塞通讯
-
通讯链路的缓冲特征
2. 进程通讯方式:直接通讯、间接通讯
进程通讯共有两种方式:间接通讯和直接通讯,如下图。
间接通讯
:该通讯方式是依赖于操作系统内核完成的通讯方式。首先在通讯进程和内核之间建立相应的机构支持通讯(如建立消息队列),进程A可以把消息发送到内核的消息队列上,然后进程B从内核里读出消息,从而实现通讯。这个通讯过程,通讯进程的生命周期可以不一样,比如说A发送消息的时候,B可以还没有创建
直接通讯
:在两个进程直接建立一个通讯信道(共享信道)。两个进程必须同时存在才能通讯,发送方向共享信道发送数据,接收方从共享信道读数据
- 直接通讯
直接通讯的发送和接收操作必须明确进程的命曾,如下图
通讯链路的属性:
- 间接通讯
通讯链路的属性:
通讯流程:
2. 进程通讯的机制
1. 信号
信号是进程间的软件中断通知和处理机制
。在第2章中讲过中断,中断实际上CPU在执行指令的时候的一种异常处理机制,这里的信号就是借鉴了这种中断机制。仅仅用来做一种快速的响应机制。
- 信号的实现
2. 管道
管道是进程间基于内存文件的通信机制
。也就是说两个进程想通讯,它中间的数据放在临时文件中(也就是管道),一个进程往管道里写数据,另一个进程读数据。其中,文件描述符表式的当前进程是管道的写端还是读端,
- 与管道相关的系统调用
读管道、写管道、创建管道。利用继承的关系在两个进程中使用不同的文件描述符,实现通讯。
- 管道示例
下图中,先创建管道,将ls命令的标准输出与管道的输入端绑定在一起,然后将管道的输出与more的标准输入绑定在一起
3. 消息队列
消息队列是由操作系统维护的,以字节序列为基本单位的间接通信机制。
也就是说这种通讯机制的基本单位为字节序列。下图中,若干个进程往消息队列里发送消息,然后另外的进程从消息队列里接收消息。
- 与消息队列相关的系统调用
4. 共享内存
共享内存是把同一段物理内存区域同时映射到多个进程的内存空间的通信机
。这种机制在进程和线程中是不一样的。
- 共享内存的实现
- 与共享内存相关的系统调用