Android9.0 Binder系列篇——基础篇

Binder属于Android特有的IPC机制,仅支持Android内部进程间通讯,因其性能高,接口化特性被大量应用于Android中。下面是各IPC的性能对比:

IPC方式数据拷贝次数同步请求异步请求请求超时跨平台跨主机安全策略

Binder

1

支持支持不支持不支持不支持支持
Socket/管道/消息队列2支持支持支持支持支持不支持(依赖上层协议)
共享内存0不支持不支持不支持支持支持不支持
DBus4支持支持支持支持支持支持

 

Binder优势和实现原理

Binder的优势:

性能强、稳定性高、安全性高

优势描述
性能只需要一次拷贝,性能上仅次于共享内存
稳定性基于C/S架构,职责明确,架构清晰
安全性为每个APP分配UID,进程的UID是鉴别进程身份的重要标志

 

一次完整的Binder IPC通信过程:

(1)、 首先 Binder 驱动在内核空间创建一个数据接收缓存区
(2)、 接着在内核空间开辟一块内核缓存区,通过内存映射机制 ( mmap ) 建立 内核缓存区 内核中数据接收缓存区 之间的映射关系,以及 内核中数据接收缓存区 接收进程用户空间地址 的映射关系
(3)、 发送方进程通过系统调用 copy_from_user () 将数据拷贝到内核中的 内核缓存区 ,由于内核缓存区和接收进程的用户空间存在内存映射,因此也就相当于把数据发送到了接收进程的用户空间
 

Binder实现:

Binder架构也是采用分层架构设计, 每一层都有其不同的功能

Binder的实现框架见右图,大致的binder通讯过程:

(1)、 一个进程使用 BINDERSETCONTEXT_MGR 命令通过 Binder 驱动将自己注册成为 ServiceManager
(2)、 Server 通过驱动向 ServiceManager 中注册 Binder Server 中的 Binder 实体),表明可以对外提供服务。驱动为这个 Binder 创建位于内核中的实体节点以及 ServiceManager 对实体的引用,将名字以及新建的引用打包传给 ServiceManager ServiceManger 将其填入查找表
(3)、 Client 通过名字,在 Binder 驱动的帮助下从 ServiceManager 中获取到对 Binder 实体的 Proxy 引用对象,通过这个引用对象就能实现和 Server 进程的通信
 
匿名Binder

匿名binder就是没有向servicemanager提交注册的binder。匿名binder必须是建立在一个实名binder之上的,实名binder就是在service manager中注册过的。首先clientserver通过实名binder建立联系,然后把匿名binder通过这个实名通道“传递过去”,对方也可以正确获取service的代理对象Bpxxx

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值