进程间通信的基本机制:
1、管道和FIFO(命名管道):最适合在进程之间实现生产者/消费者的交互。进程A向管道写入数据,进程B从管道读出数据。
2、信号量:内核信号量的用户态版本。
3、消息:允许进程在预定义的消息队列中读和写消息来交换消息(小块数据)。Linux提供两种不同的消息版本:System V IPC;POSIX消息
4、共享内存区:允许进程通过共享内存块来交换信息。在必须共享大量数据的应用中,这可能是最高效的进程间通信。
5、套接字:允许不用计算机上的进程通过网络交换数据。同样可以用作相同主机上的进程间通信。例如 X Window系统图形接口。
6、文件系统 管道:
1、一种进程间通信机制,所有Unix系统都愿意提供
2、进程间单向数据流;一个进程写入,另一个进程读取
3、shell中使用‘|’操作符来创建管道;例如 ls|more; 临时文件的实现方式:ls>temp; more < temp;
4、POSIX实现了半双工的管道,虽然pipe系统调用返回了两个文件描述符,但每个进程在使用一个的时候必须关闭另一个
5、System V Releas 4实现了全双工的管道。允许两个文件描述符即可以读,也可以写。虽然仍然是单向的,但是不必关闭。
6、同一个管道可以被多个进程进行读写。
7、对于每个管道,内核都要创建一个索引节点和两个文件对象;还有多个(1或者16)管道缓冲区,它是一个单独的页,包含了已经写入等待读出的数据。
8、管道没有对应的磁盘映像,作为一组VFS对象来实现的,在Linux2.6中被组织成pipefs特殊文件系统。
9、无法打开已经存在的管道。任意的两个进程不可能共享同一个管道,除非管道由一个共同的祖先进程创建。 命名管道(FIFO):
1、在文件系统中不拥有磁盘块
2、打开的FIFO总是于一个内核缓冲区相关联,存放进程间交换的数据
3、因为有了磁盘索引节点,任何进程都可以访问FIFO。因为FIFO文件名包含在系统的目录树中。
4、FIFO索引节点出现在系统目录树,而不是pipefs特殊文件系统
5、FIFO是一种双向通信管道,可能以读写模式打开一个FIFO System V IPC:
1、通过信号与其他进程同步,通过semget 创建IPC资源
2、通过消息队列;通过msgget 创建IPC资源
3、共享内存和其他进程;通过shmget创建IPC资源
4、所有进程都可以,不必有相同都祖先进程

深入理解LInux内核-进程通信的更多相关文章

  1. 深入理解linux内核-进程和程序

    进程描述符task_struct task_struct { //进程基本信息 pid 进程id号 tgid 线程组id号,与线程组领头线程pid号相同   getpid()返回该值 tasks in ...

  2. 读书笔记之Linux系统编程与深入理解Linux内核

    前言 本人再看深入理解Linux内核的时候发现比较难懂,看了Linux系统编程一说后,觉得Linux系统编程还是简单易懂些,并且两本书都是讲Linux比较底层的东西,只不过侧重点不同,本文就以Linu ...

  3. Linux之进程通信20160720

    好久没更新了,今天主要说一下Linux的进程通信,后续Linux方面的更新应该会变缓,因为最近在看Java和安卓方面的知识,后续会根据学习成果不断分享更新Java和安卓的方面的知识~ Linux进程通 ...

  4. 《深入理解Linux内核》 读书笔记

    深入理解Linux内核 读书笔记 一.概论 操作系统基本概念 多用户系统 允许多个用户登录系统,不同用户之间的有私有的空间 用户和组 每个用于属于一个组,组的权限和其他人的权限,和拥有者的权限不一样. ...

  5. Linux下进程通信的八种方法

    Linux下进程通信的八种方法:管道(pipe),命名管道(FIFO),内存映射(mapped memeory),消息队列(message queue),共享内存(shared memory),信号量 ...

  6. 【读书笔记::深入理解linux内核】内存寻址【转】

    转自:http://www.cnblogs.com/likeyiyy/p/3837272.html 我对linux高端内存的错误理解都是从这篇文章得来的,这篇文章里讲的 物理地址 = 逻辑地址 – 0 ...

  7. 【读书笔记::深入理解linux内核】内存寻址

    我对linux高端内存的错误理解都是从这篇文章得来的,这篇文章里讲的 物理地址 = 逻辑地址 – 0xC0000000:这是内核地址空间的地址转换关系. 这句话瞬间让我惊呆了,根据我的CPU的知识,开 ...

  8. 尝试理解Linux容器进程与宿主机共享内核到底是什么意思?

    背景 近期接触容器技术时,经常看到各类比较容器与虚拟机区别的文章中会提到:容器是共享宿主机的内核,而虚拟机则是拥有自己独立的内核,所以不可能在Linux上用容器运行windows,但是用虚拟机则可以. ...

  9. 《深入理解linux内核》第三章 进程

    进程的七种状态 在内核源码的 include/linux/sched.h文件中: task_struct的status可表示 #define TASK_RUNNING 0 #define TASK_I ...

  10. linux内核--进程与线程

    http://blog.csdn.net/yusiguyuan/article/details/12154823 在<linux内核设计与实现>中第三章讲解了进程管理,在关于进程和线程的概 ...

随机推荐

  1. 亲历H5移动端游戏微信支付接入及那些坑(二)——获取Openid和授权

    第一篇中将一些坑说明,那么这篇开始正式进入接入步骤.具体的参数说明,我不会列出,毕竟微信官方文档都有,我想大家都看的懂,而且这接口也有可能微信会变动,所以不列出来,也是不想引起大家的误解,接入步骤只起 ...

  2. V-rep学习笔记:main script and child scripts

    The main and child scripts The main script and the child scripts, which are simulation scripts, play ...

  3. urllib2特点--urllib2.build_opener对象接口

    # -*- coding: cp936 -*- #python 27 #xiaodeng #urllib2特点--urllib2.build_opener对象接口 import urllib2 imp ...

  4. Linux人工清理内存cache

     内存缓存的出现是解决,设备之间的读写速度的差异! 00.linux缓存解释 /proc/sys/vm/drop_caches (since Linux 2.6.16)Writing to this ...

  5. mysql workbench图形化mysql管理工具

    MYSQL官网也推出了针对Linux的图形化的连接工具-MySQL Workbench.MySQL Workbench不仅仅是一个简单的MySQL客户端.简而言之,Workbench是一个跨平台的 ( ...

  6. quartz持久化部署实现

    http://blog.csdn.net/wxniitxueyuan/article/details/50477712

  7. windows用户态程序的Dump

    熟悉Linux的开发人员都知道,在Linux下开发程序,如果程序崩溃了,可以通过配置Core Dump,来让程序崩溃的瞬间产生一个Dump文件,然后通过dump文件来调试程序为什么崩溃.但是windo ...

  8. ReactiveCocoa 中 RACSignal 是怎样发送信号

    前言 ReactiveCocoa是一个(第一个?)将函数响应式编程范例带入Objective-C的开源库.ReactiveCocoa是由Josh Abernathy和Justin Spahr-Summ ...

  9. 工欲善其事,必先利其器 软件工具开发关键词 protractor自动化测试工具 RegexBuddy正则 CodeSmith,LightSwitch:代码生成 CheatEngine:玩游戏修改内存值必备神器 ApkIDE:Android反编译工具 Reflector:反编译dll动态链接库

    工欲善其事,必先利其器 本文版权归翟士丹(Stan Zhai)和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利. 原文地址:http ...

  10. Python学习笔记(四)——编码和字符串

    一.编码 1.编码类别: (1)ASCII码:127个字母被编码到计算机里,也就是大小写英文字母.数字和一些符号 (2)GB2312码:中国制定的用于加入中文汉字的编码 (3)Unicode:防止由于 ...