IPC是进程间通信(interprocess communication)的简称。
消息传递(message passing):
- 管道(pipe),命名管道(named pipe)(FIFO)
- System V消息队列(System V message queue)
- Posix消息队列
- 远程过程调用(Remote Procedure Call, RPC):从一个系统上某个程序调用另一个系统上的某个函数的一种方法。
同步(synchronization):
- 记录上锁(record locking)
- System V 信号量 和 System V 共享内存区
- Posix 信号量 和 Posix 共享内存区
- 互斥锁(mutex)和 条件变量(condition Variable)
- 读写锁
————————————————————————————————————————————————————————————————————
进程间共享信息的三种方式:
(1)两个进程共享存留与文件系统中某个文件上的某些信息。(穿越内核)
(2)两个进程共享驻留在内核中的某些信息。
(3)两个进程有一个双方都能访问的共享内存区。
一个给定的进程内所有线程共享同样的全局变量。
IPC对象的持续性(persistence)
fork、exec 和 exit 对IPC对象的影响:
errno的定义:
#ifdef _REENTRANT
#define errno (*_errno())
#else
extern int errno;
#endif
每个线程必须有自己的errno变量。当常值 _REENTRANT 有定义时,该宏就扩展成一个函数,由它访问errno 变量的某个局限于线程的副本。
POSIX是“可移植操作系统接口”(Portable Operating System Interface)。
主要讨论 4 个领域:
- 消息传递(管道、FIFO、消息队列);
- 同步(互斥锁、条件变量、读写锁、信号量);
- 共享内存区(匿名共享内存区,有名共享内存区);
- 过程调用(Solaris门,Sun RPC)。