1 概述
IPC是进程间通信(interprocess communication)的简称。传统上该术语描述的是运行在某个操作系统上的不同进程间的消息传递的不同方式。
在Unix操作系统演变史中,消息传递经历了如下几个发展阶段:
- 管道(pipe)是第一个广泛使用的IPC形式,既可在程序中使用,也可从shell中使用。管道的问题在于只能在父子进程中使用,但此问题已被有名管道(named pipe)的引入解决
- System V消息队列(System V message queue)是在20世纪80年代早期加到SystemV内核中的。它们可用于同一主机上有或无亲缘关系的进程之间
- Posix消息队列是由Posix实时标准加入的。它们可用于同一主机上有和无亲缘关系的进程之间
- 远程过程调用(Remote Procedure Call, RPC)出现在20世纪80年代中期,它是从一个系统上的某个程序调用另一个系统上的某个函数的一种方法
2 进程、线程与信息共享
Unix共有如下三种信息共享方式
- 左边两个进程共享存留于文件系统中某个文件上的某些信息。为访问这些信息必须访问内核(如read,write,lseek)。当某个文件有待更新时,某种形式的同步是需要的。
- 中间两个进程共享存留于内核中的某些信息。管道,System V消息队列以及System V信号灯也是。现在访问共享信息的每次操作涉及系统调用
- 右边两个进程有一个双方都能访问的共享内存区,每个进程一旦设置好共享内存区就可以直接访问数据。