Binder進(jìn)程通信的基本原理

Binder進(jìn)程通信的基本原理

基礎(chǔ)
  • Binder是基于linux驅(qū)動(dòng)設(shè)備的寸五,所以我們可以把Binder驅(qū)動(dòng)當(dāng)做文件設(shè)備打開(kāi)
  • mmap 系統(tǒng)調(diào)用用于把一個(gè)設(shè)備或者文件的內(nèi)存映射到自己應(yīng)用程序的內(nèi)存空間中
  • A進(jìn)程對(duì)Binder執(zhí)行mmap調(diào)用鲸拥,然后A內(nèi)存空間中就有Binder的地址妥粟,即A中可以修改Binder中內(nèi)存的值渣锦,當(dāng)然Binder中的修改也會(huì)影響到A,于是當(dāng)Binder去拷貝另一個(gè)應(yīng)用程序B的一部分內(nèi)存到自己的內(nèi)存空間時(shí)(Bidner的內(nèi)存空間)沐扳,A就可以直接訪(fǎng)問(wèn)到拷貝過(guò)來(lái)的B的內(nèi)存空間了症脂,間而實(shí)現(xiàn)了AB的內(nèi)存通信

ProcessState

ProcessState是進(jìn)程單例的,會(huì)去打開(kāi)/dev/binder驅(qū)動(dòng)媚狰,并且mmap到當(dāng)前進(jìn)程的內(nèi)存空間
一個(gè)進(jìn)程開(kāi)始的時(shí)候就會(huì)初始化一個(gè)ProcessState岛杀,然后就會(huì)去開(kāi)始binder線(xiàn)程池循環(huán)等待指令到來(lái)

IPCThreadState

IPCThreadState是線(xiàn)程單例,會(huì)去和binder驅(qū)動(dòng)直接交互

BpBinder

Binder的代理對(duì)象崭孤,其中主要就是持有mHandle(編號(hào)),在和Binder驅(qū)動(dòng)交互的時(shí)候使用mHandle來(lái)尋找Binder服務(wù)类嗤,對(duì)應(yīng)native層的Binder

Binder驅(qū)動(dòng)

  • binder_proc
    在Binder驅(qū)動(dòng)中,有一個(gè)binder_proc的鏈頭的通過(guò)binder_proc隊(duì)列持有了所有的binder,相當(dāng)于每一次的binder_open的時(shí)候就會(huì)創(chuàng)建一個(gè)binder_proc表示當(dāng)前的binder進(jìn)程辨宠,并且把它添加到Binder驅(qū)動(dòng)紅黑樹(shù)上遗锣。
    相當(dāng)于每一次我們的進(jìn)程打開(kāi)的binder驅(qū)動(dòng)就會(huì)獲得驅(qū)動(dòng)上面的所有binder服務(wù)所組成的鏈表,而我們發(fā)起IPC的時(shí)候嗤形,就會(huì)根據(jù)binder服務(wù)的編號(hào)進(jìn)行尋找,然后就會(huì)去發(fā)起數(shù)據(jù)傳遞(就是修改binder驅(qū)動(dòng)內(nèi)存中的值)然后循環(huán)等待反饋精偿。對(duì)應(yīng)的binder服務(wù)端則會(huì)在服務(wù)注冊(cè)的時(shí)候就一直循環(huán)等待客戶(hù)端的連接。

  • binder_ioctl
    binder_ioctl()函數(shù)負(fù)責(zé)在兩個(gè)進(jìn)程間收發(fā)IPC數(shù)據(jù)和IPC reply數(shù)據(jù)赋兵。

  • binder thread pool
    Binder線(xiàn)程池在進(jìn)程frok出來(lái)就會(huì)運(yùn)行起來(lái)笔咽,即等待客戶(hù)端的連接,但這個(gè)時(shí)候可能binder service并沒(méi)有注冊(cè)霹期。
    binder驅(qū)動(dòng)找到對(duì)應(yīng)的service需要的進(jìn)程叶组,service名字方法標(biāo)記经伙。

思想

在一塊大家都可以訪(fǎng)問(wèn)的內(nèi)存中進(jìn)行數(shù)據(jù)和指令的交換扶叉,而不同進(jìn)程中主要靠thread的循環(huán)等待指令(事件驅(qū)動(dòng)),但是這樣交互很繁雜帕膜,所以又抽離出了一個(gè)manager(ServiceManager)

每一個(gè)進(jìn)程開(kāi)始的時(shí)候都會(huì)進(jìn)行ProcessState的初始化枣氧,會(huì)去打開(kāi)驅(qū)動(dòng),并提供接口去獲取mHandle=0Binder,同時(shí)也會(huì)讓自己的Binder線(xiàn)程池循環(huán)起來(lái)垮刹。

binder的調(diào)動(dòng)的是阻塞的达吞,阻塞的原理還是循環(huán)。所以客戶(hù)端的binderIPC請(qǐng)求最好放到子線(xiàn)程去執(zhí)行荒典。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末酪劫,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子寺董,更是在濱河造成了極大的恐慌覆糟,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,482評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件遮咖,死亡現(xiàn)場(chǎng)離奇詭異滩字,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)御吞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)麦箍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人陶珠,你說(shuō)我怎么就攤上這事挟裂。” “怎么了揍诽?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,762評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵诀蓉,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我寝姿,道長(zhǎng)交排,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,273評(píng)論 1 279
  • 正文 為了忘掉前任饵筑,我火速辦了婚禮埃篓,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘根资。我一直安慰自己架专,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,289評(píng)論 5 373
  • 文/花漫 我一把揭開(kāi)白布玄帕。 她就那樣靜靜地躺著部脚,像睡著了一般。 火紅的嫁衣襯著肌膚如雪裤纹。 梳的紋絲不亂的頭發(fā)上委刘,一...
    開(kāi)封第一講書(shū)人閱讀 49,046評(píng)論 1 285
  • 那天丧没,我揣著相機(jī)與錄音,去河邊找鬼锡移。 笑死呕童,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的淆珊。 我是一名探鬼主播夺饲,決...
    沈念sama閱讀 38,351評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼施符!你這毒婦竟也來(lái)了往声?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 36,988評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤戳吝,失蹤者是張志新(化名)和其女友劉穎浩销,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體听哭,經(jīng)...
    沈念sama閱讀 43,476評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡撼嗓,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,948評(píng)論 2 324
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了欢唾。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片且警。...
    茶點(diǎn)故事閱讀 38,064評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖礁遣,靈堂內(nèi)的尸體忽然破棺而出斑芜,到底是詐尸還是另有隱情,我是刑警寧澤祟霍,帶...
    沈念sama閱讀 33,712評(píng)論 4 323
  • 正文 年R本政府宣布杏头,位于F島的核電站,受9級(jí)特大地震影響沸呐,放射性物質(zhì)發(fā)生泄漏醇王。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,261評(píng)論 3 307
  • 文/蒙蒙 一崭添、第九天 我趴在偏房一處隱蔽的房頂上張望寓娩。 院中可真熱鬧,春花似錦呼渣、人聲如沸棘伴。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,264評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)焊夸。三九已至,卻和暖如春蓝角,著一層夾襖步出監(jiān)牢的瞬間阱穗,已是汗流浹背饭冬。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,486評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留揪阶,地道東北人伍伤。 一個(gè)月前我還...
    沈念sama閱讀 45,511評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像遣钳,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子麦乞,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,802評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容