进程通信是指进程之间的信息交换,其交换的信息量由一个状态或数值到成千上万字节不等。
进程间同步互斥操作由于交换信息量少被称为低级通信。本文主要介绍高级通信机制,其可以归结为三大类:
共享存储器、消息传递、管道通信。
共享存储器
相互通信的进程共享某些数据结构或者共享存储区,进程通过这些共享空间进行通信。进一步划分为:基于共享数据结构的通信方式和基于共享存储器的通信方式。
-
1. 基于共享数据结构的通信方式
要求进程公用某些数据结构,借此实现进程间的信息交换。例如,生产者-消费者模型中的有界缓冲区。操作系统只提供共享存储器,其设置与处理交给程序员。故,该方式是低效的,只适用于传递少量的数据。 -
2. 基于共享存储器的通信方式
在存储器中划出一块共享存储区,诸进程可以通过对共享数据区的读或者写来实现通信,属于高级通信。
消息传递
在消息传递系统中,进程间的数据交换是以格式化的消息(Message)为单位的。若通信的进程之间不存在可直接访问的共享空间,则必须利用操作系统提供的消息传递方法实现进程通信。
进程通过系统提供的发送消息和接收消息两个原语进行数据交换,隐藏了通信细节,简化通信程序编制的复杂性,得到了广泛的应用。进一步划分为:直接通信方式和间接通信方式。
-
1. 直接通信方式
发送进程直接把消息发送给接收进程,并将它挂在接收进程的消息缓冲队列上,接收进程从消息缓冲队列中取得消息。 -
2. 间接通信方式
发送进程把消息发送到共享数据结构的实体中,接收进程从中间实体中取得消息。这种中间实体一般称为信箱,这种通信方式又称为信箱通信方式。既可实现实时通信,又可以实现非实时通信。
信箱可以由操作系统创建也可以由用户创建,创建者是信箱的拥有者。据此,信箱可以分为私有信箱、公用信箱、共享信箱。
管道通信
所谓“管道”,是指用于连接一个读进程和一个写进程以实现它们之间通信的一个共享文件,又名pipe文件。
向管道(共享文件)提供输入的发送进程(即写进程),以字符流形式将大量的数据送入管道;而接收管道输出的接收进程(即读进程),则从管道中接收数据。为了协调双方的通信,管道机制必须提供以下三方面的协调能力:
-
1. 互斥
当一个进程对管道进行读写时,另一进程必须等待。 -
2. 共享
当写(输入)进程将一定数量的数据(4KB)写入pipe,便去睡眠等待,直到读(输出)进程将数据取走后,再将其唤醒。当读进程读空pipe时,也应睡眠等待,直到写进程将数据写入,再将其唤醒。 -
3. 确定对方是否存在
只有确认对方存在,才能进行通信。
网友评论