Android 選擇 Binder

先簡單概括性地說說Linux現(xiàn)有的所有進程間IPC方式:

  1. 管道:在創(chuàng)建時分配一個page大小的內(nèi)存搂捧,緩存區(qū)大小比較有限贸营;
  2. 消息隊列:信息復(fù)制兩次骆捧,額外的CPU消耗岖常;不合適頻繁或信息量大的通信侍筛;
  3. 共享內(nèi)存:無須復(fù)制萤皂,共享緩沖區(qū)直接付附加到進程虛擬地址空間,速度快匣椰;但進程間的同步問題操作系統(tǒng)無法實現(xiàn)裆熙,必須各進程利用同步工具解決;
  4. 套接字:作為更通用的接口窝爪,傳輸效率低弛车,主要用于不通機器或跨網(wǎng)絡(luò)的通信;

Android的內(nèi)核也是基于Linux內(nèi)核蒲每,為何不直接采用Linux現(xiàn)有的進程IPC方案呢

****從5個角度來展開對Binder的分析:****

(1)從性能的角度
數(shù)據(jù)拷貝次數(shù):Binder數(shù)據(jù)拷貝只需要一次纷跛,而管道、消息隊列邀杏、Socket都需要2次贫奠,但共享內(nèi)存方式一次內(nèi)存拷貝都不需要唬血;從性能角度看,Binder性能僅次于共享內(nèi)存唤崭。

(2)從穩(wěn)定性的角度
Binder是基于C/S架構(gòu)的拷恨,簡單解釋下C/S架構(gòu),是指客戶端(Client)和服務(wù)端(Server)組成的架構(gòu)谢肾,Client端有什么需求腕侄,直接發(fā)送給Server端去完成,架構(gòu)清晰明朗芦疏,Server端與Client端相對獨立冕杠,穩(wěn)定性較好;而共享內(nèi)存實現(xiàn)方式復(fù)雜酸茴,沒有客戶與服務(wù)端之別分预, 需要充分考慮到訪問臨界資源的并發(fā)同步問題,否則可能會出現(xiàn)死鎖等問題薪捍;從這穩(wěn)定性角度看笼痹,Binder架構(gòu)優(yōu)越于共享內(nèi)存。僅僅從以上兩點酪穿,各有優(yōu)劣凳干,還不足以支撐google去采用binder的IPC機制,那么更重要的原因是:

(3)從安全的角度
傳統(tǒng)Linux IPC的接收方無法獲得對方進程可靠的UID/PID被济,從而無法鑒別對方身份纺座;而Android作為一個開放的開源體系,擁有非常多的開發(fā)平臺溉潭,App來源甚廣,因此手機的安全顯得額外重要少欺;對于普通用戶喳瓣,絕不希望從App商店下載偷窺隱射數(shù)據(jù)、后臺造成手機耗電等等問題赞别,傳統(tǒng)Linux IPC無任何保護措施畏陕,完全由上層協(xié)議來確保。Android為每個安裝好的應(yīng)用程序分配了自己的UID仿滔,故進程的UID是鑒別進程身份的重要標(biāo)志惠毁,前面提到C/S架構(gòu),Android系統(tǒng)中對外只暴露Client端崎页,Client端將任務(wù)發(fā)送給Server端鞠绰,Server端會根據(jù)權(quán)限控制策略,判斷UID/PID是否滿足訪問權(quán)限飒焦,目前權(quán)限控制很多時候是通過彈出權(quán)限詢問對話框蜈膨,讓用戶選擇是否運行屿笼。Android 6.0,也稱為Android M翁巍,在6.0之前的系統(tǒng)是在App第一次安裝時驴一,會將整個App所涉及的所有權(quán)限一次詢問,只要留意看會發(fā)現(xiàn)很多App根本用不上通信錄和短信灶壶,但在這一次性權(quán)限權(quán)限時會包含進去肝断,讓用戶拒絕不得,因為拒絕后App無法正常使用驰凛,而一旦授權(quán)后胸懈,應(yīng)用便可以胡作非為。針對這個問題洒嗤,google在Android M做了調(diào)整箫荡,不再是安裝時一并詢問所有權(quán)限,而是在App運行過程中渔隶,需要哪個權(quán)限再彈框詢問用戶是否給相應(yīng)的權(quán)限羔挡,對權(quán)限做了更細地控制,讓用戶有了更多的可控性间唉,但同時也帶來了另一個用戶詬病的地方绞灼,那也就是權(quán)限詢問的彈框的次數(shù)大幅度增多。對于Android M平臺上呈野,有些App開發(fā)者可能會寫出讓手機異常頻繁彈框的App低矮,企圖直到用戶授權(quán)為止,這對用戶來說是不能忍的被冒,用戶最后吐槽的可不光是App军掂,還有Android系統(tǒng)以及手機廠商,有些用戶可能就跳果粉了昨悼,這還需要廣大Android開發(fā)者以及手機廠商共同努力蝗锥,共同打造安全與體驗俱佳的Android手機。Android中權(quán)限控制策略有SELinux等多方面手段率触,下面列舉從Binder的一個角度的權(quán)限控制:Android源碼的Binder權(quán)限是如何控制终议? -Gityuan的回答

傳統(tǒng)IPC只能由用戶在數(shù)據(jù)包里填入UID/PID;另外葱蝗,可靠的身份標(biāo)記只有由IPC機制本身在內(nèi)核中添加穴张。其次傳統(tǒng)IPC訪問接入點是開放的,無法建立私有通道两曼。從安全角度皂甘,Binder的安全性更高。說到這悼凑,可能有人要反駁叮贩,Android就算用了Binder架構(gòu)击狮,而現(xiàn)如今Android手機的各種流氓軟件,不就是干著這種偷窺隱射益老,后臺偷偷跑流量的事嗎彪蓬?沒錯,確實存在捺萌,但這不能說Binder的安全性不好档冬,因為Android系統(tǒng)仍然是掌握主控權(quán),可以控制這類App的流氓行為桃纯,只是對于該采用何種策略來控制酷誓,在這方面android的確存在很多有待進步的空間,這也是google以及各大手機廠商一直努力改善的地方之一态坦。在Android 6.0盐数,google對于app的權(quán)限問題作為較多的努力,大大收緊的應(yīng)用權(quán)限伞梯;另外玫氢,在Google舉辦的Android Bootcamp 2016大會中,google也表示在Android 7.0 (也叫Android N)的權(quán)限隱私方面會進一步加強加固谜诫,比如SELinux漾峡,Memory safe language(還在research中)等等,在今年的5月18日至5月20日喻旷,google將推出Android N生逸。話題扯遠了,繼續(xù)說Binder且预。

(4)從語言層面的角度
大家多知道Linux是基于C語言(面向過程的語言)槽袄,而Android是基于Java語言(面向?qū)ο蟮恼Z句),而對于Binder恰恰也符合面向?qū)ο蟮乃枷敕嫘常瑢⑦M程間通信轉(zhuǎn)化為通過對某個Binder對象的引用調(diào)用該對象的方法掰伸,而其獨特之處在于Binder對象是一個可以跨進程引用的對象,它的實體位于一個進程中怀估,而它的引用卻遍布于系統(tǒng)的各個進程之中『辖粒可以從一個進程傳給其它進程多搀,讓大家都能訪問同一Server,就像將一個對象或引用賦值給另一個引用一樣灾部。Binder模糊了進程邊界康铭,淡化了進程間通信過程,整個系統(tǒng)仿佛運行于同一個面向?qū)ο蟮某绦蛑卸乃琛恼Z言層面从藤,Binder更適合基于面向?qū)ο笳Z言的Android系統(tǒng)催跪,對于Linux系統(tǒng)可能會有點“水土不服”。另外夷野,Binder是為Android這類系統(tǒng)而生懊蒸,而并非Linux社區(qū)沒有想到Binder IPC機制的存在,對于Linux社區(qū)的廣大開發(fā)人員悯搔,我還是表示深深佩服骑丸,讓世界有了如此精湛而美妙的開源系統(tǒng)。也并非Linux現(xiàn)有的IPC機制不夠好妒貌,相反地通危,經(jīng)過這么多優(yōu)秀工程師的不斷打磨,依然非常優(yōu)秀灌曙,每種Linux的IPC機制都有存在的價值菊碟,同時在Android系統(tǒng)中也依然采用了大量Linux現(xiàn)有的IPC機制,根據(jù)每類IPC的原理特性在刺,因時制宜逆害,不同場景特性往往會采用其下最適宜的。比如在Android OS中的Zygote進程的IPC采用的是Socket(套接字)機制增炭,Android中的Kill Process采用的signal(信號)機制等等忍燥。而Binder更多則用在system_server進程與上層App層的IPC交互

(5) 從公司戰(zhàn)略的角度
總所周知隙姿,Linux內(nèi)核是開源的系統(tǒng)梅垄,所開放源代碼許可協(xié)議GPL保護,該協(xié)議具有“病毒式感染”的能力输玷,怎么理解這句話呢队丝?受GPL保護的Linux Kernel是運行在內(nèi)核空間,對于上層的任何類庫欲鹏、服務(wù)机久、應(yīng)用等運行在用戶空間,一旦進行SysCall(系統(tǒng)調(diào)用)赔嚎,調(diào)用到底層Kernel膘盖,那么也必須遵循GPL協(xié)議。而Android 之父 Andy Rubin對于GPL顯然是不能接受的尤误,為此侠畔,Google巧妙地將GPL協(xié)議控制在內(nèi)核空間,將用戶空間的協(xié)議采用Apache-2.0協(xié)議(允許基于Android的開發(fā)商不向社區(qū)反饋源碼)损晤,同時在GPL協(xié)議與Apache-2.0之間的Lib庫中采用BSD證授權(quán)方法软棺,有效隔斷了GPL的傳染性,仍有較大爭議尤勋,但至少目前緩解Android喘落,讓GPL止步于內(nèi)核空間茵宪,這是Google在GPL Linux下 開源與商業(yè)化共存的一個成功典范。

有了這些鋪墊瘦棋,我們再說說Binder的今世前緣

Binder是基于開源的 OpenBinder實現(xiàn)的稀火,OpenBinder是一個開源的系統(tǒng)IPC機制,最初是由 Be Inc.** 開發(fā),接著由Palm, Inc.公司負責(zé)開發(fā)兽狭,現(xiàn)在OpenBinder的作者在Google工作憾股,既然作者在Google公司,在用戶空間采用Binder 作為核心的IPC機制箕慧,再用Apache-2.0協(xié)議保護服球,自然而然是沒什么問題,減少法律風(fēng)險颠焦,以及對開發(fā)成本也大有裨益的斩熊,那么從公司戰(zhàn)略角度,Binder也是不錯的選擇伐庭。另外粉渠,再說一點關(guān)于OpenBinder,在2015年OpenBinder以及合入到Linux Kernel主線 3.19版本圾另,這也算是Google對Linux的一點回饋吧霸株。綜合上述5點,可知Binder是Android系統(tǒng)上層進程間通信的不二選擇集乔。

https://www.zhihu.com/question/39440766/answer/89210950

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末去件,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子扰路,更是在濱河造成了極大的恐慌尤溜,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,946評論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件汗唱,死亡現(xiàn)場離奇詭異宫莱,居然都是意外死亡,警方通過查閱死者的電腦和手機哩罪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,336評論 3 399
  • 文/潘曉璐 我一進店門授霸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人际插,你說我怎么就攤上這事碘耳。” “怎么了腹鹉?”我有些...
    開封第一講書人閱讀 169,716評論 0 364
  • 文/不壞的土叔 我叫張陵,是天一觀的道長敷硅。 經(jīng)常有香客問我功咒,道長愉阎,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,222評論 1 300
  • 正文 為了忘掉前任力奋,我火速辦了婚禮榜旦,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘景殷。我一直安慰自己溅呢,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 69,223評論 6 398
  • 文/花漫 我一把揭開白布猿挚。 她就那樣靜靜地躺著咐旧,像睡著了一般。 火紅的嫁衣襯著肌膚如雪绩蜻。 梳的紋絲不亂的頭發(fā)上铣墨,一...
    開封第一講書人閱讀 52,807評論 1 314
  • 那天,我揣著相機與錄音办绝,去河邊找鬼伊约。 笑死,一個胖子當(dāng)著我的面吹牛孕蝉,可吹牛的內(nèi)容都是我干的屡律。 我是一名探鬼主播,決...
    沈念sama閱讀 41,235評論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼降淮,長吁一口氣:“原來是場噩夢啊……” “哼超埋!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起骤肛,我...
    開封第一講書人閱讀 40,189評論 0 277
  • 序言:老撾萬榮一對情侶失蹤纳本,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后腋颠,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體繁成,經(jīng)...
    沈念sama閱讀 46,712評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,775評論 3 343
  • 正文 我和宋清朗相戀三年淑玫,在試婚紗的時候發(fā)現(xiàn)自己被綠了巾腕。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,926評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡絮蒿,死狀恐怖尊搬,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情土涝,我是刑警寧澤佛寿,帶...
    沈念sama閱讀 36,580評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響冀泻,放射性物質(zhì)發(fā)生泄漏常侣。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,259評論 3 336
  • 文/蒙蒙 一弹渔、第九天 我趴在偏房一處隱蔽的房頂上張望胳施。 院中可真熱鬧,春花似錦肢专、人聲如沸舞肆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,750評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽椿胯。三九已至,卻和暖如春欧募,著一層夾襖步出監(jiān)牢的瞬間压状,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,867評論 1 274
  • 我被黑心中介騙來泰國打工跟继, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留种冬,地道東北人。 一個月前我還...
    沈念sama閱讀 49,368評論 3 379
  • 正文 我出身青樓舔糖,卻偏偏與公主長得像娱两,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子金吗,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,930評論 2 361

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