学习笔记之IPC跨进程通信binder原理

前言:

我们在多篇文章 AIDL进程间通信 Service主动修改Activity视图之回调传递 三(附github源码)最简单的Activity、Service进程间 AIDL通信指南二(附github源码)都讲到了binder,服务器端实现binder,客户端连接接收到binderProxy,那么binder底层的原理到底是什么?它是怎么实现跨进程通信的?

预备知识

1.binder_init()

初始化binder驱动

2.binder_open()

打开binder驱动

3.ioctl()

ioctl()函数详解
与binder驱动读写数据的系统调用

4.mmap

void* mmap ( void * addr , size_t len , int prot , int flags , int fd , off_t offset ) 

定义:映射文件描述符fd指定文件的 [off,off + len]区域至调用进程的[addr, addr + len]的内存区域
使用:首先在内核虚拟地址空间,申请一块与用户虚拟内存相同大小的内存;然后再申请1个page大小的物理内存,再将同一块物理内存分别映射到内核虚拟地址空间和用户虚拟内存空间,从而实现了用户空间的Buffer和内核空间的Buffer同步操作的功能。

binder交互过程

binder交互过程

  1. 首先,把用户空间数据ubuf拷贝到内核空间bwr;
    当bwr写缓存有数据,则执行binder_thread_write;当写失败则将bwr数据写回用户空间并退出;
  2. 当bwr读缓存有数据,则执行binder_thread_read;当读失败则再将bwr数据写回用户空间并退出;
  3. 最后,把内核数据bwr拷贝到用户空间ubuf。

在这里插入图片描述

参考:

Binder通信原理简介图
Android Bander设计与实现 - 设计篇

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值