进程通信
文章目录
一、进程通信概述
1.1 进程同步、互斥与进程通信
进程通信是指进程之间的信息交换。根据交换信息量的大小可以分为低级进程通信方式和高级进程通信方式:
- 低级进程通信方式:交换信息量较少并且效率较低,如进程同步与互斥
- 高级进程通信方式:交换信息量较多并且效率较高
1.2 高级进程通信方式分类
- 共享存储器系统
- 消息传递系统
- 管道通信系统或共享文件系统
二、常见高级进程通信方式介绍
2.1 共享存储器系统
共享存储器系统是指相互通信的进程之间共享某些数据结构或者存储区。
2.1.1基于共享数据结构的通信方式
进程之间能够通过某种类型的数据结构(如有界缓冲区)交换信息,如生产者和消费者问题。操作系统只负责提供共享存储区,而共享数据结构和对进程间的同步处理都是程序员的事。因而,通信效率低,只适合于传递少量信息。
2.1.2基于共享存储区的通信方式:
在存储器中划出一块共享存储区,诸进程可通过对共享存储区进行读或写来实现通信。包括建立共享存储区、附接及断接。
- 系统在存储中划出一块共享存储区,各进程间可通过对共享存储区中- 的数据进行读或写来实现通信;
- 进程在通信之前应向系统申请共享存储区中的一个分区,并指定该分区的关键字,若系统已经给进程分配了这样的分区,则将该分区的描述符返回给申请者;
- 接着,申请者把获得的共享存储区连接到本进程上,此后就像读写普通存储器一样;
- 主要用于UNIX System V中。
2.2 消息传递系统
进程间的信息交换以消息或报文为单位,程序员利用系统提供的一组通信命令(原语)实现通信。操作系统隐藏了通信的实现细节,简化了编程的复杂性。分为两种:
- 直接通信方式:发送进程将消息发送到接收进程,并将其挂在接收进程的消息队列上;接收进程从消息队列上取消息。(可以这样理解消息队列,每个进程都附带有一个消息队列,进程通信时,发送进程将发送的消息挂在接收进程的消息队列上,而接收方则从消息队列上收取消息。)
- 间接通信方式:发送进程将消息发送到信箱,接收进程从信箱中取消息。
2.3 管道通信(共享文件)
通过连接读进程和写进程的共享文件来实现读写进程之间通信。
使用管道通信时,基本上采用文件系统的原有机制实现。包括创建、打开、关闭、读写等。管道机制应提供以下三方面的协调能力:
- 互斥
- 同步
- 存在
2.3 1 互斥:诸进程互斥读写管道
当一个进程正在对PIPE进行读写时,另一个必须等待(一次只有一个进程可以访问)
2.3.2 同步:管道空、满情况处理
当写进程把一定量的数据(如4KB)写入PIPE后(创建后,大小是固定字节的),便睡眠等待,直到读进程取走数据后再唤醒它;当读进程读一个空PIPE时,也应睡眠等待,直到写进程将消息写入管道为止,才将它唤醒
2.3.3 存在:确定对方是否存在
只有已确定对方存在时,方能进行通信