前言:本文摘自IBM DeveloperWorks ,by郑彦兴 (mlinux@163.com)国防科大计算机学院

文章大致说明了UNIX,linux的IPC的历史发展和分类。大致说明了IPC的六种手段,但是,其中一些介绍过于简单,编纂的时候做了修改。笔者转载同时修正了一下极少的一些错误。
https://www.ibm.com/developerworks/cn/linux/l-ipc/

一 序

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

图一,linux 所支持的各种IPC手段

二 不同系统下IPC的主要列表

Unix IPC包括:管道、FIFO、信号;

System V IPC包括:System V消息队列、System V信号灯、System V共享内存区;

Posix IPC包括: Posix消息队列、Posix信号灯、Posix共享内存区。有两点需要简单说明一下:

1)由于Unix版本的多样性,电子电气工程协会(IEEE)开发了一个独立的Unix标准,这个新的ANSI Unix标准被称为计算机环境的可移植性操作系统界面(POSIX)。现有大部分Unix和流行版本都是遵循POSIX标准的,而Linux从一开始就遵循POSIX标准;

2)BSD并不是没有涉足单机内的进程间通信(socket本身就可以用于单机内的进程间通信)。事实上,很多Unix版本的单机IPC留有BSD的痕迹,如4.4BSD支持的匿名内存映射、4.3+BSD对可靠信号语义的实现等等。

对于Linux所支持通信手段的不同实现版本(如对于共享内存来说,有Posix共享内存区以及System V共享内存区两个实现版本),将主要介绍Posix API。

3 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的变种都支持套接字

4 进程的定义

附1:参考文献[2]中对linux环境下的进程进行了概括说明:

一般来说,linux下的进程包含以下几个关键要素:

有一段可执行程序;

有专用的系统堆栈空间;

内核中有它的控制块(进程控制块),描述进程所占用的资源,这样,进程才能接受内核的调度;

具有独立的存储空间

进程和线程有时候并不完全区分,而往往根据上下文理解其含义。

参考资料

  • UNIX环境高级编程,作者:W.Richard Stevens,译者:尤晋元等,机械工业出版社。具有丰富的编程实例,以及关键函数伴随Unix的发展历程。
  • linux内核源代码情景分析(上、下),毛德操、胡希明著,浙江大学出版社,提供了对linux内核非常好的分析,同时,对一些关键概念的背景进行了详细的说明。
  • UNIX网络编程第二卷:进程间通信,作者:W.Richard Stevens,译者:杨继张,清华大学出版社。一本比较全面阐述Unix环境下进程间通信的书(没有信号和套接口,套接口在第一卷中)。
  • 可能需要修改的地方
    1 linux 所继承的进程间的通讯 应当为所支持的进程间通讯

【编撰】linux IPC 001 - 概述相关推荐

  1. 【编撰】linux IPC 002 - 匿名管道PIPE和有名管道FIFO的概念和实例,以及应用比较

    前言:上一节提到IPC的概述,本一节,原文作者比较详细的讨论了,管道的概念和实例和使用场景: 原文作者:郑彦兴 (mlinux@163.com)国防科大计算机学院 http://www.ibm.com ...

  2. Linux下进程间通信概述

    1. Linux下进程间通信概述 P83-P84 将第一页和第二页合并起来讲了 引言:前面我们学习了一下进程,我们知道多,进程间的地址空间相对独立.进程与进程间不能像线程间通过全局变量通信. 如果想进 ...

  3. 自动驾驶QNX,Linux,Autosar概述

    自动驾驶QNX,Linux,Autosar概述 QNX是一个分布式.嵌入式.可规模扩展的实时操作系统.遵循POSIX.1 (程序接口)和POSIX.2 (Shell和工具).部分遵循POSIX.1b( ...

  4. Unix/Linux IPC及线程间通信总结

    一.互斥与同步 1.互斥:是指某一资源同时只允许一个访问者对其进行访问,具有唯一性和排它性.但互斥无法限制访问者对资源的访问顺序,即访问是无序的. 2.同步:是指在互斥的基础上(大多数情况),通过其它 ...

  5. Linux系统安全概述-sudo授权-pam认证机制-对称加密-非对称加密-md5-数字证书

    内容: 17.1 Linux系统安全概述-su-sudo授权 17.2 pam认证机制概述 17.3 对称加密-非对称加密方法 17.4 md5-sha1-哈希算法使用方法 17.5 CA证书的作用 ...

  6. linux 使用了哪个存储阵列卡,Linux中RAID概述及配置实验

    Linux中RAID概述及配置实验 一.RAID磁盘阵列概述 RAID 0 (条带化存储) RAID 1(镜像存储) RAID 5 RAID 6 RAID 1+0(先做镜象,再做条带) RAID 0+ ...

  7. Linux共享库概述

    Linux共享库概述 共享库是一种将库函数打包成一个单元使之能够在运行时被多个进程共享的技术.这种技术能够节省磁盘空间和RAM. 在继续阐述共享库之前,先来说说静态库,它是比共享库更早的存在.静态库也 ...

  8. Linux驱动开发概述

    第 1 章 Linux驱动开发概述 设备驱动程序是计算机硬件与应用程序的接口,是软件系统与硬件系统沟通的桥梁.如果没有设备驱动程序,那么硬件设备就只是一堆废铁,没有什么功能.本章将对Linux驱动开发 ...

  9. linux高可集群用软件,Linux集群概述及高可用软件keepalived配置、测试

    一.Linux集群概述 1). 根据功能划分为两大类:高可用和负载均衡 高可用集群通 常为两台服务器,一台工作,另外一台作为冗余,当提供服务的机器宕机,冗余将接替继续提供服务 2).实现高可用的开源软 ...

最新文章

  1. mysql 写 性能,MySQL在大型,只写表上的性能
  2. python自学网站推荐-杭州python自学网站
  3. cookie session token区别_彻底理解cookie,session,token
  4. android之Fragment(官网资料翻译)三
  5. linux算法设计,嵌入式Linux平台下随机序列算法设计.doc
  6. python 剪切一行内容到另一个文件
  7. .ai域名注册已经极具投资价值进入火爆期
  8. linux-vim-进入编辑模式的多种方法
  9. leetcode 旋转图像
  10. Python之数据分析(Numpy通用属性、数据可视化与matplotlib库通用函数)
  11. spring securiy使用总结
  12. NOIP模拟题——LGTB与序列
  13. 美国当地时间4月17日中国概念股收盘行情
  14. 【软件与系统安全】栈溢出利用的分析
  15. vue 动态引入组件
  16. ESXI安装以及重新安装
  17. MacBook安装rar解压工具
  18. 如何用CSS实现div元素高度相对于整个屏幕100%
  19. 手把手教你打造一个VIM-IDE
  20. 颐 山雷颐 艮上震下

热门文章

  1. 04737 c++ 自学考试2019版 第二章课后程序设计题 3
  2. 【Python】科赫雪花绘制
  3. “Mvc.ExceptionHandling.AbpExceptionFilter – Processing of the LINQ expression ‘xxx’ by ‘NavigationEx
  4. C#LeetCode刷题之#661-图片平滑器( Image Smoother)
  5. sql使用逻辑控制语句
  6. 通过这个免费的,由23部分组成的互动课程,学习ES6 +
  7. 如果我用你待我的方式来待你 恐怕你早已离去
  8. python怎么设计奥运五环_python 相关语法 图形绘制 奥运五环
  9. 利用Python爬虫刷新某网站访问量
  10. 数电与模电的根本区别 转