进程间通信的基本机制:
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. (原)python中不同文件之间使用所谓的全局变量

    转载请注明出处: http://www.cnblogs.com/darkknightzh/p/8108640.html 参考网址: https://www.cnblogs.com/20150705-y ...

  2. 回到顶部bug

    参考自一博客(https://www.cnblogs.com/abao0/p/6642288.html)内有慕课网教程(后发现有bug, 弃置不用了) 以下有问题, 当滚动条处于顶部时, 刷新页面, ...

  3. Android开发环境——调试器 DDMS相关内容汇总

       Android开发环境将分为SDK相关内容.Eclipse ADT相关内容.模拟器AVD相关内容.调试器DDMS相关内容.日志LogCat相关内容.连接驱动ADB相关内容.内存泄露检测工具MAT ...

  4. NSNotificationCenter实现原理

    # 前言 Cocoa中使用NSNotification.NSNotificationCenter和KVO来实现观察者模式,实现对象间一对多的依赖关系. 本篇文章主要来讨论NSNotification和 ...

  5. 关于Apache (httpd)服务器防DDOS模块mod_evasive的使用说明

    关于Apache (httpd)服务器防DDOS模块mod_evasive的使用说明 1. mod_evasive 介绍: mod_evasive 是Apache(httpd)服务器的防DDOS的一个 ...

  6. MySQL 分区表原理及数据备份转移实战

    MySQL 分区表原理及数据备份转移实战 1.分区表含义 分区表定义指根据可以设置为任意大小的规则,跨文件系统分配单个表的多个部分.实际上,表的不同部分在不同的位置被存储为单独的表.用户所选择的.实现 ...

  7. 树莓派进阶之路 (008) - 树莓派安装ftp服务器(转)

    vsftpd是开源的轻量级的常用ftp服务器.   1,安装vsftpd服务器 (约400KB) sudo apt-get install vsftpd     2,启动ftp服务 sudo serv ...

  8. php sockent通信

    1.php服务端:server.php <?php //确保在连接客户端时不会超时 set_time_limit(0); $ip = '127.0.0.1'; $port = 1935; /* ...

  9. iOS 图标

    iOS icon是一件很头疼的事情 大致多少张呢,忘记了,下面开发者中心给的一个文档,自己捋捋有多少张 180934.jpg 幸亏不是自己画的,不然要骂姥姥,但是多数的UI是妹子啊,让人家做人家会说: ...

  10. 【Linux】双向重导向命令tee

    想个简单的东西,我们知道 > 会将数据流整个传送给文件或装置,因此我们除非去读取该文件或装置, 否则就无法继续利用这个数据流.万一我想要将这个数据流的处理过程中将某段信息存下来,应该怎么做? 利 ...