Linux进程间通信(IPC)简介

Linux IPC的发展

    Linux下的进程通信手段基本上是从UNIX平台上的进程通信手段继承而来的。而对UNIX发展做出重大贡献的两大主力AT&T的贝尔实验室BSD(加州大学伯克利分校的伯克利软件发布中心)在进程间的通信方面的侧重点有所不同。前者是对UNIX早期的进程间通信手段进行了系统的改进和扩充,形成了“system V IPC”,其通信进程主要局限在单个计算机内;而BSD则跳过了该限制,形成了基于套接口(socket)的进程间通信机制。而Linux则把两者的优势都继承了下来.

 

进程间通信包括

   UNIX进程间通信(IPC)方式包括管道、FIFO以及信号。

   System V进程间通信(IPC)包括System V消息队列、System V信号量以及System V共享内存区。

   Posix 进程间通信(IPC)包括Posix消息队列、Posix信号量以及Posix共享内存区。

 

有关POSIX

    POSIX 表示可移植操作系统接口(Portable Operating System Interface ,缩写为 POSIX ),POSIX标准定义了操作系统应该为应用程序提供的接口标准,是IEEE为要在各种UNIX操作系统上运行的软件而定义的一系列API标准的总称,其正式称呼为IEEE 1003,而国际标准名称为ISO/IEC 9945。

    POSIX标准意在期望获得源代码级别的软件可移植性。换句话说,为一个POSIX兼容的操作系统编写的程序,应该可以在任何其它的POSIX操作系统(即使是来自另一个厂商)上编译执行。

    POSIX 并不局限于 UNIX。许多其它的操作系统,例如 DEC OpenVMS 支持 POSIX 标准,尤其是 IEEE Std. 1003.1-1990(1995 年修订)或 POSIX.1,POSIX.1 提供了源代码级别的 C 语言应用编程接口(API)给操作系统的服务程序,例如读写文件。POSIX.1 已经被国际标准化组织(International Standards Organization,ISO)所接受,被命名为 ISO/IEC 9945-1:1990 标准。

 

有关POSIX2

    POSIX的诞生和Unix的发展是密不可分的,电气和电子工程师协会(Institute of Electrical and Electronics Engineers,IEEE)最初开发 POSIX 标准,是为了提高 UNIX 环境下应用程序的可移植性。Unix于70年代诞生于贝尔实验室,并于80年代向美各大高校分发V7版的源码以做研究。加州大学伯克利分校在V7的基础上开发了BSD Unix。后来很多商业厂家意识到Unix的价值也纷纷以贝尔实验室的System V或BSD为基础来开发自己的Unix,较著名的有Sun OS,AIX,VMS。

    POSIX 已发展成为一个非常庞大的标准族,某些部分正处在开发过程中。POSIX 与 IEEE 1003 和 2003 家族的标准是可互换的。

    Windows NT-based 系统不能直接支持新版POSIX接口,仅支持第一版POSIX v1:ISO/IEC9945-1:1990[1] 版标准。由于仅支持第一版POSIX的Windows NT-based系统不能创建符合POSIX接口标准的线程和窗体、套接字,所以微软公司提供POSIX兼容层Microsoft POSIX subsystem软件包(Windows Services for UNIX)以支持新版POSIX接口,Windows 系统还可以运行其他POSIX兼容层例如Cygwin.

 

进程间通信分类

q 文件

q 文件锁

q 管道(pipe)和有名管理(FIFO)

q 信号(signal)

q 消息队列

q 共享内存

q 信号量

q 互斥量

q 条件变量

q 读写锁

q 套接字(socket)

 

 

System V IPC & POSIX IPC

  System V IPC

    System V 消息队列

    System V 共享内存

    System V 信号量

  POSIX IPC

    消息队列

    共享内存

    信号量

    互斥量

    条件变量

    读写锁

 

 

进程间共享信息方式

 

 

IPC对象的持续性

    随进程持续:一直存在直到打开的最后一个进程结束。(如pipe和FIFO(进程结束,数据删除))

    随内核持续:一直存在直到内核自举或显式删除(如System V消息队列、共享内存、信号量)

    随文件系统持续:一直存在直到显式删除,即使内核自举还存在。(POSIX消息队列、共享内存、信号量如果是使用映射文件来实现

        [IPC对象是由Linux内核管理的]

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。