深入理解Linux进程间通讯(IPC)

linux下的进程通讯手段基本上是从Unix平台上的进程通讯手段继承而来的。而对Unix发展作出重大贡献的两大主力AT&T的贝尔实 验室及BSD(加州大学伯克利分校的伯克利软件发布中心)在进程间通讯方面的侧重点有所不一样。前者对Unix早期的进程间通讯手段进行了系统的改进和扩 充,造成了“system V IPC”,通讯进程局限在单个计算机内;后者则跳过了该限制,造成了基于套接口(socket)的进程间通讯机制。Linux则把二者继承了下来,如图 示:基于java反射的验证框架html

其中,最初Unix IPC包括:管道、FIFO、信号;System V IPC包括:System V消息队列、System V信号灯、System V共享内存区;Posix IPC包括: Posix消息队列、Posix信号灯、Posix共享内存区。有两点须要简单说明一下:1)因为Unix版本的多样性,电子电气工程协会(IEEE)开 发了一个独立的Unix标准,这个新的ANSI Unix标准被称为计算机环境的可移植性操做系统界面(PSOIX)。现有大部分Unix和流行版本都是遵循POSIX标准的,而Linux从一开始就遵 循POSIX标准;2)BSD并非没有涉足单机内的进程间通讯(socket自己就能够用于单机内的进程间通讯)。事实上,不少Unix版本的单机 IPC留有BSD的痕迹,如4.4BSD支持的匿名内存映射、4.3+BSD对可靠信号语义的实现等等。java

图一给出了linux 所支持的各类IPC手段,在本文接下来的讨论中,为了不概念上的混淆,在尽量少说起Unix的各个版本的状况下,全部问题的讨论最终都会归结到 Linux环境下的进程间通讯上来。而且,对于Linux所支持通讯手段的不一样实现版本(如对于共享内存来讲,有Posix共享内存区以及System V共享内存区两个实现版本),将主要介绍Posix API。linux

linux下进程间通讯的几种主要手段简介:编程

  1. 管道(Pipe)及有名管道(named pipe):管道可用于具备亲缘关系进程间的通讯,有名管道克服了管道没有名字的限制,所以,除具备管道所具备的功能外,它还容许无亲缘关系进程间的通讯;
  2. 信号(Signal):信号是比较复杂的通讯方式,用于通知接受进程有某种事件发生,除了用于进程间通讯 外,进程还能够发送信号给进程自己;linux除了支持Unix早期信号语义函数sigal外,还支持语义符合Posix.1标准的信号函数 sigaction(实际上,该函数是基于BSD的,BSD为了实现可靠信号机制,又可以统一对外接口,用sigaction函数从新实现了signal 函数);
  3. 报文(Message)队列(消息队列):消息队列是消息的连接表,包括Posix消息队列system V消息队列。有足够权限的进程能够向队列中添加消息,被赋予读权限的进程则能够读走队列中的消息。消息队列克服了信号承载信息量少,管道只能承载无格式字 节流以及缓冲区大小受限等缺点。
  4. 共享内存:使得多个进程能够访问同一块内存空间,是最快的可用IPC形式。是针对其余通讯机制运行效率较低而设计的。每每与其它通讯机制,如信号量结合使用,来达到进程间的同步及互斥。
  5. 信号量(semaphore):主要做为进程间以及同一进程不一样线程之间的同步手段。
  6. 套接口(Socket):更为通常的进程间通讯机制,可用于不一样机器之间的进程间通讯。起初是由Unix系统的BSD分支开发出来的,但如今通常能够移植到其它类Unix系统上:Linux和System V的变种都支持套接字。

下面将对上述通讯机制作具体阐述。网络

附1:参考文献[2]中对linux环境下的进程进行了归纳说明:框架

通常来讲,linux下的进程包含如下几个关键要素:socket

  • 有一段可执行程序;
  • 有专用的系统堆栈空间;
  • 内核中有它的控制块(进程控制块),描述进程所占用的资源,这样,进程才能接受内核的调度;
  • 具备独立的存储空间

进程和线程有时候并不彻底区分,而每每根据上下文理解其含义。函数

 

参考资料 操作系统

  • UNIX环境高级编程,做者:W.Richard Stevens,译者:尤晋元等,机械工业出版社。具备丰富的编程实例,以及关键函数伴随Unix的发展历程。

  • linux内核源代码情景分析(上、下),毛德操、胡希明著,浙江大学出版社,提供了对linux内核很是好的分析,同时,对一些关键概念的背景进行了详细的说明。

  • UNIX网络编程第二卷:进程间通讯,做者:W.Richard Stevens,译者:杨继张,清华大学出版社。一本比较全面阐述Unix环境下进程间通讯的书(没有信号和套接口,套接口在第一卷中)。
相关文章
相关标签/搜索