Binder驅動理解


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進程間通信的數據流程圖:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM