Android binder

Linux 進程通訊方法:socket     信號量    管道     共享內存    消息隊列。設計模式

可是Android 選擇了 binder 機制。安全

可能緣由:Socket 開銷大 且效率不高;管道和隊列copy次數太多。傳統的IPC通訊機制安全性較低,沒法獲得發送進程方可信的PID/UID ,難以甄別身份。socket

Binder 保證了安全性和效率。函數

 

binder 機制 四大模塊:設計

Client     Server     ServerManager      BinderDriver  server

client & server 爲用戶實現部分。隊列

BinderDriver 運行於內核空間,以字符設備中的misc類型註冊。能夠從/dev/binder/設備文件節點上,經過open和ioctl文件操做函數與binderDriver 通訊。進程

其主要負責通訊的創建,以及其在進程間的傳遞和binder 引用計數管理、數據包的傳輸等。內存

client 與server 之間的跨進程通訊則統一經過binder driver 處理轉發。源碼

 

運行機制:

ServerManager 至關於DNS; 是一個引用號爲0 的binder server。

clinet 先經過引用號0 ,向server Manager 去查詢須要的binder的引用號。

binder server 會封裝好數據後,向binder driver 查詢,並返回數據,最終再返回給client;

 

參考:

 

Android 源碼設計模式 P340

相關文章
相關標籤/搜索