Binder原理

178 阅读1分钟

1、架构图

传统的进程间通讯(管道...)

 1)client用户空间拷贝数据到内核空间
 2)内核空间的数据再拷贝到server的用户空间
 这里面用了两次内存拷贝

Binder机制

 1)如图是三个进程,Client & ServiceManager & Server
 2)进程中有用户空间&内核空间,内核空间只能通过系统调用去交互。
 3)ServiceManager 在系统启动的时候会mmap binder驱动,就是做一个64k的虚拟内存映射,这个映射也是android binder交互的基础。
 交互流程:
 1、client端通过binder机制,用系统调用写data到内核空间的虚拟内存中。
 2、Server端通过binder机制,用系统调用从虚拟内存中读出data。
 
 整个的交互过程只有一次数据拷贝,就是client 写数据到内核空间的过。,所有的server端都必须是Service,因为需要在ServiceManager里面注册,才能利用ServiceManager的mmap。

2、bindService流程

 1)上图是一个从client端bind远端service的代码流程
 2)图中涉及到三个进程之间的交互,Client process & System process & Server process
 3)图中总共有五次的binder通讯,都是在跨进程通讯的时候。