1.1 概述
1、IPC概念
IPC是进程间通信的简称,即interprocess communication。用来描述运行在某个操作系统之上不同进程间各种消息传递的方式。
2、消息传递的发展阶段:
(1)管道
只能在具有共同祖先的进程间使用,有名管道解决了该问题。
(2)System V消息队列
在同一主机上有亲缘关系或无亲缘关系的进程之间。
亲缘关系:通过fork派生的子进程之间、父进程和子进程之间存在亲缘关系。
(3)Posix消息队列
在同一主机上有亲缘关系和无亲缘关系的进程之间。
(4)远程过程调用RPC(remote procedure call)
从客户机上某个程序调用服务器上某个函数的一种方法。
3、同步形式的演进
记录上锁、System V信号量、Posix信号量、互斥锁和条件变量、读写锁。
1.2 进程、线程与信息共享
1.3 IPC对象的持续性
任意类型的IPC的持续性:该类型的一个对象一直存在多长时间。
1.4 名字空间
当两个或多个无亲缘关系的进程使用某种类型的IPC对象来进行彼此交换信息时,该IPC对象必须有一个某种形式的名字或标识符,其中一个进程创建IPC对象,其余进程可指定同一个IPC对象。
管道没有名字,因此无法在无亲缘关系的进程间通信。FIFO使用路径名作为其标识符,因此可在无亲缘关系的进程间通信。
对于一种给定的IPC类型,其可能得名字集合称为它的名字空间。
1.5 fork、exec和exit对IPC对象的影响
1.6 出错处理:包裹函数
包裹函数执行实际的函数调用,测试其返回值,并在遇到错误时终止进程。将函数的第一个字母改为大写。
线程出错时并不设置标准的Unix errno变量,而是将错误值返回调用者。每次调用任意一个线程函数时,分配一个变量保存函数返回值,在调用err_sys函数前,将errno设置成保存的值。
1.7 Unix标准
Posix是可移植操作系统接口(Portable Operating System Interface)的缩写。