进程通信
进程通信,是指进程之间的信息交换。
信号量机制作为同步工具是卓有成效的,但作为通信工具,则不够理想,主要表现在下述两方面:
(1) 效率低,生产者每次只能向缓冲池投放一个产品(消息),消费者每次只能从缓冲区中取得一个消息;
(2) 通信对用户不透明。
进程通信的类型
目前,高级通信机制可归结为三大类:共享存储器系统、消息传递系统以及管道通信系统。
1.共享存储器系统
(1) 基于共享数据结构的通信方式。在这种通信方式中,要 求 诸 进程公用某些数据结构,借以实现诸进程间的信息交换。如在生产者—消费者问题中,就是用有界缓冲区这种数据结构来实现通信的。这里,公用数据结构的设置及对进程间同步的处理,都是程序员的职责。这无疑增加了程序员的负担,而操作系统却只须提供共享存储器。因此,这种通信方式是低效的,只适于传递相对少量的数据。
(2) 基于共享存储区的通信方式。为了传输大量数据,在存储器中划出了一块共享存储区,诸进程可通过对共享存储区中数据的读或写来实现通信。这种通信方式属于高级通信。
2.消息传递系统
消息传递系统(Message passing system)是当前应用最为广泛的一种进程间的通信机制。在该机制中,进程间的数据交换是以格式化的消息(message)为单位的;在计算机网络中,又把message称为报文
根据实现方式的不同,有两类:(1)直接通信方式。(2)间接通信方式。
3.管道通信系统
概念 :所谓“管道”,是指用于连接一个读进程和一个写进程以实现它们之间通信的一个共享文件,又名pipe文件。向管道(共享文件)提供输入的发送进程(即写进程),以字符流形式将大量的数据送入管道;而接受管道输出的接收进程(即读进程),则从管道中接收(读)数据。由于发送进程和接收进程是利用管道进行通信的,故又称为管道通信
管道机制必须提供以下三方面的协调能力:
(1) 互斥,即当一个进程正在对pipe执行读/写操作时,其它(另一)进程必须等待。
(2) 同步,指当写(输入)进程把一定数量(如4 KB)的数据写入pipe,便去睡眠等待,直到读(输出)进程取走数据后,再把它唤醒。当读进程读一空pipe时,也应睡眠等待,直至写进程将数据写入管道后,才将之唤醒。
(3) 确定对方是否存在,只有确定了对方已存在时,才能进行通信。
4.客户机-服务器系统
主要实现方法有三类:套接字、远程过程调用和远程方法调用。
(1)套接字:一个套接字就是一个通信标识类型的数据结构,包含了通信目的地址、通信端口号、通信网络的传输层协议、进程所在的网络地址,以及针对客户或服务器程序提供的不同API函数,是进程通信和网络通信的基本构件。(套接字是为客户/服务器模型而设计的,包含两类:基于文件型;基于网络型。)
(2)远程过程调用:是一个通信协议,用于通过网络连接的系统。该协议允许一台主机系统上的进程调用另一台主机系统上的进程,通常表现为常规的过程调用。
(3)远程方法调用:远程过程调用涉及的软件采用面向对象编程,亦可称作远程方法调用。