Android Binder 机制学习总结(一)

本文介绍了Android Binder机制的引入原因,包括性能提升和安全性增强。详细阐述了Binder机制涉及的四个角色:Binder driver、Service Manager、Service和Client。Binder通过减少数据复制次数提升性能,提供UID和PID以增强安全性。此外,解释了Service Manager如何管理和分发服务,以及Binder对象在不同场景中的表现形式。
摘要由CSDN通过智能技术生成

        已经不止一次想要花些时间把Android的Binder机制搞搞明白,最近的工作总算比较清闲,所以花了差不多3周时间,看了一些资料,读了不少代码。现在把这些资料整理下,方便自己以后忘了回来看看。

Binder机制的引入原因

        Binder机制是为C/S架构设计的IPC机制,基于性能和安全性的考虑,Android系统在传统IPC机制之外,又引入了Binder机制。

  • 性能    传统的Socket/管道/消息队列等IPC机制有一个共同点,数据传输过程中,先从发送方的缓冲区copy到内核缓冲区,再从内核缓冲区copy到接收方缓冲区,数据至少经过两次copy。Binder机制的优化设计,使其仅需要从发送方缓冲区拷贝数据到内核缓冲区,接收方即可直接读取内核缓冲区中的数据,数据仅需一次copy,提升了数据传输性能。
  • 安全性     Binder机制提供通信方的UID和PID,有助于判断非法访问。并且,Binder机制支持匿名Binder,可以用于规避通过猜测(i.e. 通过猜测端口地址进行Socket通信)进行通信的风险。

Binder机制的角色

        Binder机制包括四个角色:Binder driver、Service Manager、Service、Client.

Binder driver

        Binder driver工作于内核态(kernel space), 作为linux内核的一部分,跟随linux系统启动。它向linux内核注册了MISC设备,就是我们看到的dev/binder设备文件,当Service/Client调用open/ioctl等系统调用操作dev/binder文件时,就会进入到内核态,执行Binder driver提供的实现(binder_open/binder_ioctl),然后,根据调用者请求的操作(数据写入/发送、数据读取/接收),binder 驱动执行不同的工作。Binder driver没有自己的进程,它总是工作在Client、Service、ServiceManager的进程中。

        基于其将一块物理内存同时映射到Binder driver所在的内核空间和接收进程的用户空间地址的设计,当数据从数据发送方的发送缓存中copy到内核缓冲区时,相当于同时也copy到了接收进程的接收缓冲区内,所以,整个数据传输过程中,数据仅需要经过1次copy,提升了数据传输性能。

        此外,Binder driver还提供了调用者的UID&PID,这些数据有助于数据接收者判断数据的有效性,回避非法访问,提高系统安全性。

        其他方面来说,Binder driver还负责Binder机制使用者(client、service、service manager)的缓存管

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值