1、Binder的三层架构
2、BC、BR的理解
通信模型
Binder协议包含在IPC数据中,分为两类:
BINDER_COMMAND_PROTOCOL
:binder请求码,以”BC_“开头,简称BC码,用于从IPC层传递到Binder Driver层;BINDER_RETURN_PROTOCOL
:binder响应码,以”BR_“开头,简称BR码,用于从Binder Driver层传递到IPC层;
通信过程
3、mmap原理(内存机制)
虚拟进程地址空间(vm_area_struct
)和虚拟内核地址空间(vm_struct
)都映射到同一块物理内存空间。当Client端与Server端发送数据时,Client(作为数据发送端)先从自己的进程空间把IPC通信数据copy_from_user
拷贝到内核空间,而Server端(作为数据接收端)与内核共享数据,不再需要拷贝数据,而是通过内存地址空间的偏移量,即可获悉内存地址,整个过程只发生一次内存拷贝。一般地做法,需要Client端进程空间拷贝到内核空间,再由内核空间拷贝到Server进程空间,会发生两次拷贝。
为什么不让发送端和接收端直接映射到同一个物理空间,这样连一次复制都不需要了?
答:多进程的同步问题复杂,Android选择这个选择是基于速度和安全性的考虑。
Binder进程间通信的数据流程图: