zoukankan      html  css  js  c++  java
  • 深入理解LInux内核-进程通信

    进程间通信的基本机制:
    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、所有进程都可以,不必有相同都祖先进程








  • 相关阅读:
    视频列表页面滑动时停止视频播放
    小程序跳转到另外一个小程序的设置
    小程序悬浮框
    wx.previewimage预览返回会触发onshow的处理方法
    uni-app小程序滑动事件
    小程序转uni-app用到的一些方法
    第四阶段:DRF day82 DRF--DRF中三大认证中的jwt和频率模块解析
    第四阶段:DRF day81 DRF--DRF中三大认证中认证模块和权限模块详解
    第四阶段:DRF day80 DRF--DRF中的视图家族及工具视图类
    第四阶段:DRF day79 DRF--DRF中通过ModelSerializer实现单查单增群查群改等操作
  • 原文地址:https://www.cnblogs.com/lipeil/p/4750811.html
Copyright © 2011-2022 走看看