白话Android进程交互之--Binder原理

来源:互联网 发布:数据分析表怎么做 编辑:程序博客网 时间:2024/06/05 08:11

房子是由一块块砖建起来的;而操作系统也一样,是由一个个简单的模块组成。因此对待操作系统的底层原理,我们应该分解开,先看单独的功能,然后在综合起来看之间是如何配合的。很幸运的是,系统底层在设计上有很多复用的地方。因此当我们研究完一部分功能以后,再看另一部分,总会有似曾相识的感觉。
在操作系统的实现中,有关进程的问题还真不少。这是因为操作系统是以进程为单位分配资源,又牵扯到进程内的资源保护问题;因此进程之间无法直接联系。
这个模型让我想起了特务机构,特务之间是不认识的。只有一定的级别才可以;因此特务之间的连线都是通过中间人这个角色来实现的。
哈哈,你有没有发现软件的设计思想无非是照搬社会上人类已有的东西而已,压根没有什么创新。
现在回归正题,我们讨论Binder的原理。
首先,我介绍下,Linux要实现进程之间的交互大概有哪些方法。
第一种:映射一块公有的内存,以这块公有的内存为依托来实现信息交互
第二种:Socket,采用Socket实现
第三种:管道
第四种:RPc机制
以上四种是最常用的操作系统中用于进程间通信的原理,其实在系统编程中就是四种不同的API而已。
而其中可能要属内存映射速度最快了。
Binder原理就是采用内存映射的方式来进行跨进程通信的。
举个例子:进程A,进程B
进程A通过Binder映射一块内存地址a,那么A和Binder各自拥有一个指针,指向这块内存地址a;现在A和Binder都可以访问到a;
进程B通过Binder映射一块内存地址b,进程B和Binder各自拥有一个指向b的指针。现在B和Binder都可以访问到b。
那么A和B如何交互,那么很简单,通过Binder这个中间人,比如A想给B发送数据data,那么只需要采取如下操作:

准备好数据data–>将data写入内存a–>告诉Binder要将data发送给B–>Binder将data从a复制到b–>B读取b获取data.数据

就这么几步,完成了进程间的通信。
其实就是通过中间人来进行信息的传递。

1 0