android binder

Inter-process communication ,也就是进程中相互通信,简称IPC

Binder是Android提供的一套进程间相互通信框架。用来多进程间发送消息,同步和共享内存。BInder是由四个模块组成,Binder Driver 、Binder Client、Binder Server、 Server Manager。 Binder Client相当于客户端,Binder Server相当于服务器, ServerManager相当于DNS服务器,Binder Driver 相当于一个路由器。 Binder Driver位于内核空间,主要负责Binder通信的建立,以及其在进程见得传递和Binder引用计数管理/数据包的传输等。Binder Server与 Binder Client之间的跨进程通信则通过Binder Driver转发。对于 Binder Client只需要知道自己要使用Binder的名字以及该binder实体在 Server Manager中的0号引用即可。ServerManager就是一个标准的BinderServer,并且在Android中约定其在Binder通信过程中唯一标识符永远是0。

一次完整的 Binder IPC 通信过程通常是这样:

首先 Binder 驱动在内核空间创建一个数据接收缓存区;
接着在内核空间开辟一块内核缓存区,建立内核缓存区和内核中数据接收缓存区之间的映射关系,以及内核中数据接收缓存区和接收进程用户空间地址的映射关系;
发送方进程通过系统调用 copyfromuser() 将数据 copy 到内核中的内核缓存区,由于内核缓存区和接收进程的用户空间存在内存映射,因此也就相当于把数据发送到了接收进程的用户空间,这样便完成了一次进程间的通信。来自文章说明图解Android中的Binder机制_有图有真相-CSDN博客_android binder
如下图:

通过阅读源码知道,activity一次copy的数据量大小最大是1M-8K

通过binder只需要完成一次复制,就可以让其他进程读取到数据。

在读懂binder通信的时候,必须要读懂cpu与内存的关系。内核地址空间也是虚拟地址,MMU是内存管理单元,cpu与内存之间不是直接读取的,而是通过MMU页表映射管理。MMU负责处理虚拟地址与物理地址的转换或内存映射,虚拟地址和物理地址他们之间存在内存映射关系的,所以cpu通过虚拟地址映射读取到内存数据并处理数据,处理完成数据后,也是通过虚拟地址映射把数据重新加载到内存中,不活沃代码存储在硬盘中,只把活沃代码加载到内存物理地址的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值