Binder詳解(進(jìn)程間通信)

一、Linux內(nèi)核基礎(chǔ)知識(shí)

1. 進(jìn)程隔離/虛擬地址空間

進(jìn)程隔離: 為了確保操作系統(tǒng)中某些 進(jìn)程互不干擾 避免進(jìn)程a去操作進(jìn)程b 去實(shí)現(xiàn)的 ,用到了虛擬地址空間
進(jìn)程a和進(jìn)程b的虛擬地址空間是不同的,防止數(shù)據(jù)會(huì)相互寫入
進(jìn)程間通訊 需要 某種通信機(jī)制才能完成 ,在android中是Binder通信機(jī)制

2. 系統(tǒng)調(diào)用

內(nèi)核會(huì)有保護(hù)機(jī)制 ,來(lái)告訴應(yīng)用程序,只能訪問某些許可資源 ,不許可資源不能被訪問 ,把內(nèi)核層和上層應(yīng)用層抽象 分離開(內(nèi)核層 和用戶空間 )

用戶通過系統(tǒng)調(diào)用 在用戶空間訪問內(nèi)核的某些程序

3. binder驅(qū)動(dòng)

android系統(tǒng)是運(yùn)行在 內(nèi)核空間的 ,負(fù)責(zé)各個(gè)用戶進(jìn)程,binder通信內(nèi)核來(lái)交互的模塊就是binder驅(qū)動(dòng)(相當(dāng)于硬件接口)

二、Binder通信機(jī)制介紹

1.為什么使用binder(android特有的 )

1)Android 使用的Linux內(nèi)核 擁有非常多的跨進(jìn)程通信機(jī)制

不使用 其他進(jìn)程通訊機(jī)制 比如說(shuō)管道 socket 主要是因?yàn)樾阅?/p>

2)性能

Android 設(shè)備上廣泛的使用跨進(jìn)程通信 對(duì)性能有嚴(yán)格要求, 相比傳統(tǒng)socket方式更加高效

3)安全性

比如說(shuō)socket 通信 的ip地址是客戶端手動(dòng)添加 可以進(jìn)行偽造
binder機(jī)制 從協(xié)議本身就支持通信雙方進(jìn)行身份校驗(yàn)

2.binder通信模型

1)通信錄:binder驅(qū)動(dòng)

我們把通信的雙方 :稱為服務(wù)端進(jìn)程 和 客戶端進(jìn)程

由于 進(jìn)程隔離的存在 服務(wù)端進(jìn)程 是無(wú)法訪問 客戶端進(jìn)程(不進(jìn)行進(jìn)程中通信的話)

2個(gè)進(jìn)程通訊必須借助 內(nèi)核幫助 binder驅(qū)動(dòng)(相當(dāng)于電話基站 )

2)serverManager 相當(dāng)于通信錄 需要申請(qǐng)注冊(cè)成為(內(nèi)核同意)

image.png

跨進(jìn)程通訊
客戶端不過是持有了服務(wù)端的一個(gè)代理,通過代理對(duì)象 協(xié)助驅(qū)動(dòng)去完成 跨進(jìn)程通訊

image.png

3.binder通信機(jī)制原理

image.png

三、AidI

IBinder 是一個(gè)接口 ,實(shí)現(xiàn)接口 就能將對(duì)象 跨進(jìn)程傳遞 ,驅(qū)動(dòng)底層支持,(驅(qū)動(dòng)會(huì)識(shí)別IBinder 類型數(shù)據(jù) )
同一個(gè)進(jìn)程 使用 iin對(duì)象 不是同一個(gè) 使用proxy代理對(duì)象


image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容