Android為什么選用Binder作為通信方式

為什么選用Binder,在討論這個(gè)問題之前趣惠,我們知道Android也是基于Linux內(nèi)核狸棍,Linux現(xiàn)有的進(jìn)程通信手段有以下幾種:

  • 管道:在創(chuàng)建時(shí)分配一個(gè)page大小的內(nèi)存身害,緩存區(qū)大小比較有限;
  • 消息隊(duì)列:信息復(fù)制兩次草戈,額外的CPU消耗;不合適頻繁或信息量大的通信唐片;
  • 共享內(nèi)存:無須復(fù)制丙猬,共享緩沖區(qū)直接附加到進(jìn)程虛擬地址空間,速度快牵触;但進(jìn)程間的同步問題操作系統(tǒng)無法實(shí)現(xiàn),必須各進(jìn)程利用同步工具解決咐低;
  • 套接字:作為更通用的接口揽思,傳輸效率低,主要用于不同機(jī)器或跨網(wǎng)絡(luò)的通信见擦;
  • 信號(hào)量:常作為一種鎖機(jī)制钉汗,防止某進(jìn)程正在訪問共享資源時(shí),其他進(jìn)程也訪問該資源鲤屡。因此损痰,主要作為進(jìn)程間以及同一進(jìn)程內(nèi)不同線程之間的同步手段。 不適用于信息交換酒来,更適用于進(jìn)程中斷控制卢未,比如非法內(nèi)存訪問,殺死某個(gè)進(jìn)程等堰汉;

既然有現(xiàn)有的IPC方式辽社,為什么重新設(shè)計(jì)一套Binder機(jī)制呢。主要是出于以上三個(gè)方面的考量:

  1. 效率:傳輸效率主要影響因素是內(nèi)存拷貝的次數(shù)翘鸭,拷貝次數(shù)越少滴铅,傳輸速率越高。從Android進(jìn)程架構(gòu)角度分析:對(duì)于消息隊(duì)列就乓、Socket和管道來說汉匙,數(shù)據(jù)先從發(fā)送方的緩存區(qū)拷貝到內(nèi)核開辟的緩存區(qū)中,再從內(nèi)核緩存區(qū)拷貝到接收方的緩存區(qū)生蚁,一共兩次拷貝噩翠,如圖:


    1695c427354bbec4.jpg

    而對(duì)于Binder來說,數(shù)據(jù)從發(fā)送方的緩存區(qū)拷貝到內(nèi)核的緩存區(qū)邦投,而接收方的緩存區(qū)與內(nèi)核的緩存區(qū)是映射到同一塊物理地址的绎秒,節(jié)省了一次數(shù)據(jù)拷貝的過程,如圖:


    1695c428e3c4a95a.jpg

    共享內(nèi)存不需要拷貝尼摹,Binder的性能僅次于共享內(nèi)存见芹。
  2. 穩(wěn)定性:上面說到共享內(nèi)存的性能優(yōu)于Binder剂娄,那為什么不采用共享內(nèi)存呢,因?yàn)楣蚕韮?nèi)存需要處理并發(fā)同步問題玄呛,容易出現(xiàn)死鎖和資源競爭阅懦,穩(wěn)定性較差。Socket雖然是基于C/S架構(gòu)的徘铝,但是它主要是用于網(wǎng)絡(luò)間的通信且傳輸效率較低耳胎。Binder基于C/S架構(gòu) ,Server端與Client端相對(duì)獨(dú)立惕它,穩(wěn)定性較好怕午。
  3. 安全性:傳統(tǒng)Linux IPC的接收方無法獲得對(duì)方進(jìn)程可靠的UID/PID,從而無法鑒別對(duì)方身份淹魄;而Binder機(jī)制為每個(gè)進(jìn)程分配了UID/PID郁惜,且在Binder通信時(shí)會(huì)根據(jù)UID/PID進(jìn)行有效性檢測。

Binder機(jī)制的作用和原理

Linux系統(tǒng)將一個(gè)進(jìn)程分為用戶空間和內(nèi)核空間甲锡。對(duì)于進(jìn)程之間來說兆蕉,用戶空間的數(shù)據(jù)不可共享,內(nèi)核空間的數(shù)據(jù)可共享缤沦,為了保證安全性和獨(dú)立性虎韵,一個(gè)進(jìn)程不能直接操作或者訪問另一個(gè)進(jìn)程,即Android的進(jìn)程是相互獨(dú)立缸废、隔離的包蓝,這就需要跨進(jìn)程之間的數(shù)據(jù)通信方式。普通的跨進(jìn)程通信方式一般需要2次內(nèi)存拷貝企量,如下圖所示:


1695c1ab41198d5c.jpg

一次完整的 Binder IPC 通信過程通常是這樣:

  • 首先 Binder 驅(qū)動(dòng)在內(nèi)核空間創(chuàng)建一個(gè)數(shù)據(jù)接收緩存區(qū)养晋。
  • 接著在內(nèi)核空間開辟一塊內(nèi)核緩存區(qū),建立內(nèi)核緩存區(qū)和內(nèi)核中數(shù)據(jù)接收緩存區(qū)之間的映射關(guān)系梁钾,以及內(nèi)核中數(shù)據(jù)接收緩存區(qū)和接收進(jìn)程用戶空間地址的映射關(guān)系绳泉。
  • 發(fā)送方進(jìn)程通過系統(tǒng)調(diào)用 copyfromuser() 將數(shù)據(jù) copy 到內(nèi)核中的內(nèi)核緩存區(qū),由于內(nèi)核緩存區(qū)和接收進(jìn)程的用戶空間存在內(nèi)存映射姆泻,因此也就相當(dāng)于把數(shù)據(jù)發(fā)送到了接收進(jìn)程的用戶空間零酪,這樣便完成了一次進(jìn)程間的通信。
    1695c1ab2efe8dc52.jpg

    節(jié)選自:跨進(jìn)程通信
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末拇勃,一起剝皮案震驚了整個(gè)濱河市四苇,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌方咆,老刑警劉巖月腋,帶你破解...
    沈念sama閱讀 218,755評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡榆骚,警方通過查閱死者的電腦和手機(jī)片拍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來妓肢,“玉大人捌省,你說我怎么就攤上這事〉锬疲” “怎么了纲缓?”我有些...
    開封第一講書人閱讀 165,138評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長喊废。 經(jīng)常有香客問我祝高,道長,這世上最難降的妖魔是什么污筷? 我笑而不...
    開封第一講書人閱讀 58,791評(píng)論 1 295
  • 正文 為了忘掉前任工闺,我火速辦了婚禮,結(jié)果婚禮上颓屑,老公的妹妹穿的比我還像新娘斤寂。我一直安慰自己耿焊,他們只是感情好揪惦,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著罗侯,像睡著了一般器腋。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上钩杰,一...
    開封第一講書人閱讀 51,631評(píng)論 1 305
  • 那天纫塌,我揣著相機(jī)與錄音,去河邊找鬼讲弄。 笑死措左,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的避除。 我是一名探鬼主播怎披,決...
    沈念sama閱讀 40,362評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼瓶摆!你這毒婦竟也來了凉逛?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,264評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤群井,失蹤者是張志新(化名)和其女友劉穎状飞,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,724評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡诬辈,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年酵使,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片自晰。...
    茶點(diǎn)故事閱讀 40,040評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡凝化,死狀恐怖杨帽,靈堂內(nèi)的尸體忽然破棺而出线脚,到底是詐尸還是另有隱情,我是刑警寧澤同仆,帶...
    沈念sama閱讀 35,742評(píng)論 5 346
  • 正文 年R本政府宣布混巧,位于F島的核電站枪向,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏咧党。R本人自食惡果不足惜秘蛔,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望傍衡。 院中可真熱鬧深员,春花似錦、人聲如沸蛙埂。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽绣的。三九已至叠赐,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間屡江,已是汗流浹背芭概。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評(píng)論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留惩嘉,地道東北人罢洲。 一個(gè)月前我還...
    沈念sama閱讀 48,247評(píng)論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像文黎,于是被迫代替她去往敵國和親惹苗。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評(píng)論 2 355