Binder驅動理解
- 2020 年 4 月 4 日
- 筆記
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進程間通信的數據流程圖: