一.关于概念
1.Binder是一种进程间通信机制,机制就是一种方法论、概念层面的说辞;同是进程间通信机制的,还有管道、消息队列、共享内存、信号量、Socket;
2.从概念到理论实体,Binder机制会落地到如下四个实体:Client、Server、Binder驱动、Service Manager;Client和Server通信通道的建立靠的是Binder驱动在背后的努力;一个系统里必然会存在多个服务,众多Service 必然需要有个Manager来统一管理;
3.四个实体所处的空间和权利不同:Client、Server和Service Manager处在Linux世界里的用户空间里,他们是不同的进程;而Binder驱动则是位于内核空间的神秘力量;在Linux世界里,用户空间的进程之间是隔离的,而位于内核空间的Binder驱动则是有着上帝之手,可以任意触及用户空间里任何进程的内存;Service Manager是用户空间里资格最老的一个Server进程,它的工号(handler)是0;
4.Binder机制的独特和精髓在于:
4.1.对于Client,Binder机制是面向对象编程的,Client想访问某个Service时,只需记住这个Service的名字就可以通过Service Manager的get方法联系到这个Service;然后就可以直接调用到这个Service开放的所有方法;
4.2Binder机制只需一次数据复制就可完成Client与Server的通信,它是怎么做到的?ioctl和mmap是其中的关键人物;Client和Binder驱动之间使用了一次数据复制的指标;到了Binder驱动和Server之间,就只能省省了。省的办法就是通过mmap,将Binder驱动使用的物理内存地址虚拟给Server;这样Binder驱动和Server接下来就是在同一块存储空间上进行读写;另外,依靠精准的状态判断和指针控制,读写Buffer一体了。
5.Binder的本地对象和远程代理
Binder的本地对象指的就是Server的真身;Server的真身只存在于Server所在的进程里;其他Client接触到的Server对象都是替身,即代理;BnXXXService是一个Binder Native类,是Server的真身;BpXXXService是一个Binder Proxy类,是Server的替身;Client得到的实际上是BpXXXService;
6.Binder驱动管理通信之路的要点有哪些?除了一系列的数据结构外,红黑树是相当耀眼的一个名词。