分类: 系统运维
2012-04-02 16:38:41
在第8章,我们描述过进程控制原始例程,并看过如何调用多个进程。但是这些进程交换信息的唯一方法是通过在fork或exec时传递打开的文件或通过文件系统。我们现在将描述其它让进程与对方通信的技术:IPC,与就是进程间通信。
在过去,UNIX系统IPC是各种方法的大杂烩,其中几乎没有可以在所有UNIX系统实现上移植的。通过POSX和The Open Group(X/Open的前身)标准化的努力,状态得到改善,但是区别仍然存在。下表总结了由本文讨论的四个实现IPC的各种形式,
IPC 类型 | SUS | Free BSD 5.2.1 | Linux 2.4.22 | Mac OS X 10.3 | Solaris 9 |
---|---|---|---|---|---|
半双工(half-duplex)管道 | * | (全双工) | * | * | (全双工) |
FIFO | * | * | * | * | * |
全双工管道 | 允许 | *、UDS | 可选、UDS | UDS | *、UDS |
命名全双工管道 | XSI 可选项 | UDS | 可选、UDS | UDS | *、UDS |
消息队列 | XSI | * | * | * | |
信号量 | XSI | * | * | * | * |
共享内存 | XSI | * | * | * | * |
套接字 | * | * | * | * | * |
STREAMS | XSI | 可选 | * |
在上表,我们在基于功能被支持时显示一个着重号。对于全双工管道,如果特性通过UNIX域套接字(17.3节)支持, 我们在列里展示“UDS”。一些实现用管道和UNIX域套接字支持这个特性,所以这些项同时有着重号和“UDS”。
正 如在14.4节里提过的,STREAMS的支持在SUS里可选的。命名全双工管道作为挂载的基于STREAMS的管道被支持,也是SUS的可选项。在 Linux上,STREAMS的支持在一个独立可选的名为“Lis”(Linux STREAMS)的包里支持。我们在平台通过一个可选包提供特性的支持的地方显示“可选”--通常默认是不安装的。
上表的前7种形式的IPC通常局限于同一主机上的进程间的IPC。最后两行--套接字和STREAMS--是仅有的两个支持不同主机上进程间的IPC。
我们把IPC的讨论分为三章。在本章,我们检查经典的IPC:管道、FIFO、消息队列、信号量、和共享内存。在下一章,我们看下使用套接字机制的网络IPC。在17章,我们看下IPC的一些高级特性。