最近准备系统学习下Binder机制 ,在学习之前去了解了下为什么Google会使用Binder,在网上看到很多的说明,我觉得最主要还是因为有现成的为什么不用。
- 不得不说下BeOS,因为binder就是来源于这个项目中的一个IPC组件架构
- 后面BeOS被Palm收购了,Dianne Hackbod基于BeOS的进程通信架构自己重新实现了下,取名叫Binder并应用到PalmOS,最后也是被开源了叫Openbinder
- 在Andy创建Android之后邀请Dianne成为安卓系统总架构师。
- 最后了解到framework层大部分也是Dianne实现的,并且PalmOS UI就是java实现的,主要是Dianne是个美女,还是个底层工程师,大佬一人搞一机。
- Andy为Android取名画LOGO,Dianne为系统构架点精
现在想想Android各种情况也已了然,都是不断积累和创新的过程。
吹水就到这个里了,我们继续分析下binder的好处,虽然有这些因素影响,但最终也要它足够优秀吧
来看看OpenBinder是怎么描述自己的:
OpenBinder is a system-level component architecture, designed to provide a richer high-level abstraction on top of traditional modern operating system services. The current implementation runs on Linux, but the code has run on a diverse variety of platforms, including BeOS, Windows, and PalmOS Cobalt.
再来看看它的优点:
- 性能;Binder传输只需要一次copy,并且开销低、速度快、耗电少
- 安全性;Binder机制对于通信双方的身份是内核进行校检支持的
- 易用性;Binder使用面向对象的方式设计,并且是C/S架构
- 使用简单;使于快速集成于开发系统架构组件
最后来看看它的实现:
Binder可以说它是一个分布式的RPC框架,Android就是用到本地进程通信IPC的能力。
Linux 上要实现一种IPC机制必然是要借助内核的,但是Linux的进程在用户空间是天然隔离的,只有内核空间是共享的,所以又要我们了解下mmap机制。
结局Binder是啥:
Binder 是基于OpenBinder框架用于本地IPC的进程通信框架。它使用了Linux 的mmap机制把进程的用户空间的内存映射到一个叫做 /dev/binder 内核空间的驱动设备上,这样通过用户与内核空间之间的一次copy达到数据跨进程传递的壮举。
非常感谢您花费时间阅读这份稿件,感觉有用可以分享给更多的学习者,转载请标记出处。
作者: [Alin]
时间: 2021 年 02月 25日
email:380475066@qq.com