国产三级在线看完整版-内射白嫩大屁股在线播放91-欧美精品国产精品综合-国产精品视频网站一区-一二三四在线观看视频韩国-国产不卡国产不卡国产精品不卡-日本岛国一区二区三区四区-成年人免费在线看片网站-熟女少妇一区二区三区四区

儀器網(wǎng)(yiqi.com)歡迎您!

| 注冊2 登錄
網(wǎng)站首頁-資訊-話題-產(chǎn)品-評測-品牌庫-供應(yīng)商-展會-招標(biāo)-采購-知識-技術(shù)-社區(qū)-資料-方案-產(chǎn)品庫-視頻

問答社區(qū)

為什么Android要采用Binder作為IPC機(jī)制

Linhui19850806 2016-03-09 08:07:40 375  瀏覽
  •  

參與評論

全部評論(1條)

  • 靳薪善 2016-03-10 00:00:00
    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機(jī)制,那么更重要的原因是: (3)從安全的角度 傳統(tǒng)Linux IPC的接收方無法獲得對方進(jìn)程可靠的UID/PID,從而無法鑒別對方身份;而Android作為一個開放的開源體系,擁有非常多的開發(fā)平臺,App來源甚廣,因此手機(jī)的安全顯得額外重要;對于普通用戶,絕不希望從App商店下載偷窺隱射數(shù)據(jù)、后臺造成手機(jī)耗電等等問題,傳統(tǒng)Linux IPC無任何保護(hù)措施,完全由上層協(xié)議來確保。 Android為每個安裝好的應(yīng)用程序分配了自己的UID,故進(jìn)程的UID是鑒別進(jìn)程身份的重要標(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)是在Appdiyi次安裝時,會將整個App所涉及的所有權(quán)限一次詢問,只要留意看會發(fā)現(xiàn)很多App根本用不上通信錄和短信,但在這一次性權(quán)限權(quán)限時會包含進(jìn)去,讓用戶拒絕不得,因為拒絕后App無法正常使用,而一旦授權(quán)后,應(yīng)用便可以胡作非為。 針對這個問題,google在Android M做了調(diào)整,不再是安裝時一并詢問所有權(quán)限,而是在App運行過程中,需要哪個權(quán)限再彈框詢問用戶是否給相應(yīng)的權(quán)限,對權(quán)限做了更細(xì)地控制,讓用戶有了更多的可控性,但同時也帶來了另一個用戶詬病的地方,那也就是權(quán)限詢問的彈框的次數(shù)大幅度增多。對于Android M平臺上,有些App開發(fā)者可能會寫出讓手機(jī)異常頻繁彈框的App,企圖直到用戶授權(quán)為止,這對用戶來說是不能忍的,用戶Z后吐槽的可不光是App,還有Android系統(tǒng)以及手機(jī)廠商,有些用戶可能就跳果粉了,這還需要廣大Android開發(fā)者以及手機(jī)廠商共同努力,共同打造安全與體驗俱佳的Android手機(jī)。 Android中權(quán)限控制策略有SELinux等多方面手段,下面列舉從Binder的一個角度的權(quán)限控制: Android源碼的Binder權(quán)限是如何控制? -Gityuan的回答 傳統(tǒng)IPC只能由用戶在數(shù)據(jù)包里填入UID/PID;另外,可靠的身份標(biāo)記只有由IPC機(jī)制本身在內(nèi)核中添加。其次傳統(tǒng)IPC訪問接入點是開放的,無法建立私有通道。從安全角度,Binder的安全性更高。 說到這,可能有人要反駁,Android就算用了Binder架構(gòu),而現(xiàn)如今Android手機(jī)的各種流氓軟件,不就是干著這種偷窺隱射,后臺偷偷跑流量的事嗎?沒錯,確實存在,但這不能說Binder的安全性不好,因為Android系統(tǒng)仍然是掌握主控權(quán),可以控制這類App的流氓行為,只是對于該采用何種策略來控制,在這方面android的確存在很多有待進(jìn)步的空間,這也是google以及各大手機(jī)廠商一直努力改善的地方之一。在Android 6.0,google對于app的權(quán)限問題作為較多的努力,大大收緊的應(yīng)用權(quán)限;另外,在Google舉辦的Android Bootcamp 2016大會中,google也表示在Android 7.0 (也叫Android N)的權(quán)限隱私方面會進(jìn)一步加強(qiáng)加固,比如SELinux,Memory safe language(還在research中)等等,在今年的5月18日至5月20日,google將推出Android N。 (4)從語言層面的角度 大家多知道Linux是基于C語言(面向過程的語言),而Android是基于Java語言(面向?qū)ο蟮恼Z句),而對于Binder恰恰也符合面向?qū)ο蟮乃枷耄瑢⑦M(jìn)程間通信轉(zhuǎn)化為通過對某個Binder對象的引用調(diào)用該對象的方法,而其獨特之處在于Binder對象是一個可以跨進(jìn)程引用的對象,它的實體位于一個進(jìn)程中,而它的引用卻遍布于系統(tǒng)的各個進(jìn)程之中??梢詮囊粋€進(jìn)程傳給其它進(jìn)程,讓大家都能訪問同一Server,就像將一個對象或引用賦值給另一個引用一樣。Binder模糊了進(jìn)程邊界,淡化了進(jìn)程間通信過程,整個系統(tǒng)仿佛運行于同一個面向?qū)ο蟮某绦蛑小恼Z言層面,Binder更適合基于面向?qū)ο笳Z言的Android系統(tǒng),對于Linux系統(tǒng)可能會有點“水土不服”。 另外,Binder是為Android這類系統(tǒng)而生,而并非Linux社區(qū)沒有想到Binder IPC機(jī)制的存在,對于Linux社區(qū)的廣大開發(fā)人員,我還是表示深深佩服,讓世界有了如此精湛而美妙的開源系統(tǒng)。也并非Linux現(xiàn)有的IPC機(jī)制不夠好,相反地,經(jīng)過這么多工程師的不斷打磨,依然非常,每種Linux的IPC機(jī)制都有存在的價值,同時在Android系統(tǒng)中也依然采用了大量Linux現(xiàn)有的IPC機(jī)制,根據(jù)每類IPC的原理特性,因時制宜,不同場景特性往往會采用其下Z適宜的。比如在Android OS中的Zygote進(jìn)程的IPC采用的是Socket(套接字)機(jī)制,Android中的Kill Process采用的signal(信號)機(jī)制等等。而Binder更多則用在system_server進(jìn)程與上層App層的IPC交互。 (5) 從公司戰(zhàn)略的角度 總所周知,Linux內(nèi)核是開源的系統(tǒng),所開放源代碼許可協(xié)議GPL保護(hù),該協(xié)議具有“病毒式感染”的能力,怎么理解這句話呢?受GPL保護(hù)的Linux Kernel是運行在內(nèi)核空間,對于上層的任何類庫、服務(wù)、應(yīng)用等運行在用戶空間,一旦進(jìn)行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è)化共存的一個成功典范。

    贊(19)

    回復(fù)(0)

    評論

熱門問答

為什么 Android 要采用 Binder 作為 IPC 機(jī)制
 
2018-11-25 03:04:10 323 0
為什么Android要采用Binder作為IPC機(jī)制
 
2016-03-09 08:07:40 375 1
什么是ipc機(jī)制
 
2016-05-27 00:25:31 497 1
什么是ipc機(jī)制
 
2016-04-09 01:55:24 373 1
拉曼光譜 為什么采用四氯化碳作為試樣
 
2017-04-27 04:26:13 442 2
為什么要采用HRB500連接器?
 
2016-05-19 02:27:41 453 1
為什么采用過度金屬作為催化劑的活性組分
 
2013-12-10 17:25:33 497 1
為什么采用過度金屬作為催化劑的活性組分
 
2013-10-21 00:25:24 402 1
為什么霍爾傳感器要采用恒流源溫度補(bǔ)償
 
2011-12-15 06:25:13 483 1
機(jī)械,為什么要采用專用夾具
除了提高生產(chǎn)效率,專用夾具還有什么優(yōu)點?
2008-05-19 03:50:19 511 3
拉曼光譜儀為什么要使用激光作為激發(fā)光源
 
2014-12-20 22:42:23 390 1
拉曼光譜儀為什么要使用激光作為激發(fā)光源
 
2014-12-23 11:50:03 449 1
原子吸收分光光度計中為什么采用空心陰極燈作為光源
 
2016-05-02 02:21:01 1417 2
為什么在發(fā)電廠或變電所不能采用蓄電池作為直流電源,而采用硅整流?
 
2013-05-27 03:02:19 365 4
光電比色計中為什么要采用互補(bǔ)色原則
 
2017-05-04 05:46:16 757 2
為什么小信號要采用電橋法測量?
 
2013-05-22 23:19:04 362 1
為什么汽車電源系統(tǒng)要采用低壓直流
 
2012-07-20 08:52:07 821 4
接地電阻測量議為什么要采用交流電源?
接地電阻測量議為什么要采用交流電源?
2017-03-13 12:34:35 956 1
振動篩為什么要采用非金屬材質(zhì)篩網(wǎng)
 
2018-11-25 21:21:31 421 0
為什么血細(xì)胞分析標(biāo)本要采用靜脈血
 
2018-11-25 19:03:38 395 0

4月突出貢獻(xiàn)榜

推薦主頁

最新話題