Binder|Binder 总结
什么是binder
binder是Android 中的一种进程间通信机制(IPC机制)
binder 为什么会出现
android 是一种基于linux 的系统,linux 系统已经提供了 诸如管道、消息队列、共享内存和socket 等IPC 方式。既然已经存在了如此之多的IPC 机制,为什么binder还会出现?主要是因为上述IPC机制无法对android 而言存在着诸多的不便,主要体现在性能,稳定性和安全性三个方面。
- 性能:
传统的linux IPC 机制 继承通信过程分为3个部分。首先消息发送发会在内核空间中申请一块空间,然后将数据复制到内核空间中。然后内核空间会通知接收方,接收方会在自己的进程中开辟一块内存空间用于接收数据(这里由于不知道具体数据的大小,开辟的内存空间会过大 或者先请求数据大小,再开辟空间)。传统的IPC 会经过2次数据的复制,性能方面较差。
binder是通过内存映射进行数据传输的,它只需要复制一次数据到内核空间中,所以效率相对于传统的IPC机制要更好一些。
2.稳定性:
binder 是 基于C/S 架构的,客户端不处理问题,问题都丢给服务端,其稳定性更好。
3.安全性:
linux 传统的IPC 机制 的安全性并没有什么保障,其安全性完全依赖于上层协议,会手动的传入UID/PID 很容易被恶意程序利用。而Binder并不是手动传入UID/PID,既支持实名binder又支持匿名binder,安全性能更高。
binder 的底层原理
binder 主要是通过内存映射来实现的,一次完整的ipc通讯的过程如下:
1.binder 驱动在内核中创建一块数据接收缓冲区
2.建立一块内核缓冲区
3.建立内核缓冲区和数据接收缓冲区的映射
4.建立内核数据缓冲区和接收进城用户空间的映射
5.发送方将数据发送到内核缓冲区
6.由于映射的存在,就相当于直接将数据发送到了 接收进城中
binder的实现
binder 主要有四部分组成
- binder 客户端(client)
- binder 服务端(service)
- servicemanager
- binder 驱动
binder 的工作流程其实可以类比为 上网的过程。客户端(binder client) 服务器(binder service) dns(servicemanager) 和 路由器(binder 驱动)
客户端输入网址请求服务器会在路由器的帮助下请求 dns 服务器获取服务器的ip地址,然后利用ip地址和服务器进行通讯。
binder基本的运行如下:
1.首先一个进城通过binder驱动将自己注册为servicemanager
2.service 通过binder 驱动将自己的binder 注册到servicemanager中,以对外使用。在这个过程中,binder驱动会生成该binder 的内核节点,以及该节点的引用,并将这些内容发送给servicemanager,servicemanager会把引用存入表中
3.client 通过binder名称,在binder驱动的帮助下在servicemanager中获取到service 中binder 的引用,从而跨进程通信
关键实现
1.通过上述的工作流程可知,servicemanager 其实是一个特殊的进程,service 和 client 和 servicemanager 之间的通讯其实也是进程间的通讯,而这里的进程间通信其实也是使用的binder通信。这里的设计十分巧妙,servicemanager 是service 端,其他所有进程都是它的client 端,servicemanager提供了一个非常特殊的binder,他不需要注册也没有名字,其他进程可以直接获取到该binder 和servicemanager 进行通讯。
2.binder中还使用了代理模式,client 端所获取的service 的binder引用并不是一个真的binder对象,而是一个service端binder 的代理,调用binder中方法的时候通过对service进行请求然后获取返回结果。
联想记忆
android binder通信机制其实可以看作是一次简单的上网过程
- client 对应客户端(浏览器)
- service 对应服务器
- binder驱动对应路由器
- servicemanager 对应dns 服务器
2.通过路由器查询dns 服务器 根据域名获取ip地址(通过binder驱动,获取servicemanager 中实名binder的引用)
3.根据返回的ip地址,通过路由器连接服务器(根据获取到service端的binder 代理 client端和service端进行通信 )
推荐阅读
- 为什么你的路演总会超时()
- 财商智慧课(六)
- 异地恋中,逐渐适应一个人到底意味着什么()
- 7.9号工作总结~司硕
- 做一件事情的基本原理是什么()
- 今天写一些什么
- 眉头开了
- 吃了早餐,反而容易饿(为什么?)
- 我们应该和什么样的人交朋友
- 做个俗物有什么不好