3.3.4进程通信
进程通信是指进程之间的信息交换,而进程之间的互斥和同步,也可看作是一种进程通信的特例。在进程互斥中,进程通过只修改信号量来向其他进程表明临界资源是否可用。进程通信方式可归结为三大类:共享存储器方式、消息传递方式以及管道通信方式。
在共享存储器方式中,相互通信的进程共享某些数据结构或共享存储区,进程之间能够通过这些空间进行通信。共享存储器方式又可再分为两种类型:一种是基于共享数据结构的通信方式。在这种通信方式中,要求诸进程共用某些数据结构,借以实现诸进程问的信息交换。这种通信方式的特点是,操作系统只提供共享存储器,而公用数据结构的设置以及对进程问同步的处理都是由程序员负责。另一种是基于共享存储区的通信方式。为了传输大量数据,存储器中划出了一块共享存储区,诸进程可通过对共享存储区中数据的读或写来实现通信。在使用基于共享存储区的通信时,进程先向系统申请获得共享存储区中的一个分区,并指定该分区的关键字。若系统已经给其他进程分配了这样的分区,则将该分区的描述符返回给申请者,由申请者把获得的共享存储分区连接到本进程上。此后,便可像读、写普通存储器一样读、写该公用存储分区,从而实现进程间的通信。
在消息传递方式中,进程间的数据交换是以格式化的消息为单位的。程序员直接利用系统提供的一组通信命令(原语)进行通信。操作系统隐藏了通信的实现细节。在进程之间通信时,源进程可以直接或间接地将消息传送给目标进程,由此可将基于消息传递的进程通信再分为直接和间接两种通信方式。直接通信方式是指发送进程利用Os所提供的发送命令,直接把消息发送给目标进程。此时,要求发送进程和接收进程都以显式方式提供对方的标识符。间接通信方式是指进程之间的通信需要通过作为共享数据结构的中间实体。
……
展开