linux 进程间通信学习笔记

前言

阅读内容《深入理解Linux进程间通信》--Linux 阅码场

进程间通信的本质

因为进程间有隔离,每个进程都有自己独立的用户空间,互相看不到对方,它们之间要想交流信息是没有办法的,但是它们都和内核是连着的,通过一些特殊的系统调用和内核沟通从而达到和其它进程通信的目的

进程间通信的框架

两部分:1:内核的通信中枢,2:用户空间的通信接口

通信机制:

1 共享内存式

通信中枢建立通信信道后就不管了, 由进程间协调,保证数据读写一致性。

2 消息传递式

每次通信都需要通信中枢参与协助,不需要通信进程间同步,

又分:

无边界消息,发过来为字节流,靠进程自己设计如何区分消息的边界

有边界消息  :进程间通信的发送和接收都是以消息为基本单位的

3 进程间通信机制的接口设计

根据通信双方的关系,分:

对称型通信: 关系平等--- 共享内存,或消息传递

非对称型通信:比如客户服务关系,生产消费关系--一般用消息传递

3.1 通信信道建立

对称型:谁建立都可以。

非对称型:一般式服务端,消费端建立,由客户端,生产者加入

3.2 后来者如何加入通信信道

双方约定好信道名字,从而找到信道句柄,根据句柄加入信道

通过继承传递给对方

通过信道名字直接加入信道

进程间通信传递信道句柄

3.3 怎么用通信信道

消息传递式:使用接口

共享内存:直接访问

进程间通信机制简介

共享内存:就是通过修改页表,使得两个虚拟进程空间的一部分虚拟内存对应到相同的物理内存上

消息传递式无边界消息-字节流匿名管道只能父子进程或者亲属进程之间使用,因为要传递信道句柄fd
命名管道管道有了名称之后,其它进程就可以通过名称找到信道句柄从而加入信道了
数据流套接字
有边界消息SysV消息队列创建接口是msgget
POSIX 消息队列创建接口是mq_open,它的参数和open是类似的
报文套接字套接字是分为网络套接字和UNIX local套接字,。两者都分为流式套接字和数据报套接字,前者是无边界消息传递式进程间通信,后者是有边界消息传递式进程间通信。
信号机制内核用来处理程序运行时发生错误的一种方法,也是给进程发送一些简单特定的消息的方法
Android Binder谷歌为Android开发的RPC
伪终端伪终端
共享内存式共享内存SysV 共享内存古老,使用接口shmget,用一个整数当做通信信道名称不安全
POSIX 共享内存使用接口shm_open,一个路径名作为通信信道的名称
共享式内存映射匿名共享内存映射共享匿名映射,是通过fork之后在父子进程之间共享内存的
文件共享内存映射两个进程映射相同的文件就可以达到共享内存的目的,文件名就是通信信道的名称,由名称直接加入信道,没有信道句柄
Android IONbuffer sharing框架
dma-buf heapdma-buf heaps是ION的替代品,已经合入了标准内核
进程间同步信号量SysV 信号量
POSIX 信号量
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值