Android(IPC)進程間通訊1:詳解Binder由來艺谆?

Android開發(fā)的進程間通訊弊决,整個Android的應用都依賴于binder做底層通信機制。而Linux中提供的進程間通訊方式并沒有binder機制擅威,那么android中為什么要單獨創(chuàng)造這種通訊方式呢壕探?帶著這個問題,繼續(xù)往下讀郊丛。

Linux中進程相關概念


Linux將系統(tǒng)內存劃分成了 用戶空間內核空間 兩部分:

用戶空間 : 普通應用程序則運行在用戶空間上李请,它們不能使用某些特定的系統(tǒng)功能瞧筛,不能直接訪問硬件,不能直接訪問內核空間捻艳。
內核空間 : 系統(tǒng)的核心軟件會運行在較高的特權級別上驾窟,它們駐留在被保護的內存空間上,擁有訪問硬件設備的所有權限认轨。

用戶程序只能運行在用戶空間绅络,用戶空間訪問內核空間的唯一方式就是系統(tǒng)調用。

linux的用戶程序和進程

在linux中嘁字,所有的用戶程序執(zhí)行時狀態(tài)都是進程恩急。進程間存在父子關系來表示同一個用戶程序開啟的多個同步任務。

所有的進程構成一個以 init 為根的樹狀結構纪蜒,這是因為 Linux 內核 并不提供直接建立新進程的系統(tǒng)調用衷恭。剩下的所有進程都是 init 進程通過 fork 機制建立的。新的進程要通過老的進程復制自身得到纯续,這就是 fork随珠。fork 是一個系統(tǒng)調用。

每個進程都在內存中分配有屬于自己的一片空間 (內存空間猬错,包含棧窗看、堆、全局靜態(tài)區(qū)倦炒、文本常量區(qū)显沈、程序代碼區(qū))。進程之間相互隔離資源:

  • 進程隔離是為保護進程之間互不干擾的執(zhí)行逢唤。
  • 進程隔離技術使用了虛擬地址空間拉讯,即進程A的虛擬地址和進程B的虛擬地址不同,這樣就防止進程A將數(shù)據(jù)信息寫入進程B鳖藕。

因為進程隔離的原因魔慷,進程A和進程B之間不能直接進行通訊。

但是開發(fā)中吊奢,總難免要遇到進程通訊的地方(例如一個應用不通進程之間相互傳遞數(shù)據(jù)等場景)盖彭。

進程間通信方式(IPC)

雖然不同進程在用戶空間不能直接進行通訊,但它們卻是共享一份內核空間页滚。很顯然,當一個用戶進程想與另外一個用戶進程進行通信時铺呵,就可以通過內核空間來完成了裹驰。

Linux中常見的進程間通訊的幾種方式:

  • 1.管道(Pipe)及有名管道(named pipe):管道可用于具有親緣關系進程間的通信,有名管道克服了管道沒有名字的限制片挂,因此幻林,除具有管道所具有的功能外贞盯,它還允許無親緣關系進程間的通信;

  • 2.信號(Signal):信號是比較復雜的通信方式沪饺,用于通知接受進程有某種事件發(fā)生躏敢,除了用于進程間通信外,進程還可以發(fā)送信號給進程本身整葡;linux除了支持Unix早期信號語義函數(shù)sigal外件余,還支持語義符合Posix.1標準的信號函數(shù)sigaction(實際上,該函數(shù)是基于BSD的遭居,BSD為了實現(xiàn)可靠信號機制啼器,又能夠統(tǒng)一對外接口,用sigaction函數(shù)重新實現(xiàn)了signal函數(shù))俱萍;

  • 3.報文(Message)隊列(消息隊列):消息隊列是消息的鏈接表端壳,包括Posix消息隊列system V消息隊列。有足夠權限的進程可以向隊列中添加消息枪蘑,被賦予讀權限的進程則可以讀走隊列中的消息损谦。消息隊列克服了信號承載信息量少,管道只能承載無格式字節(jié)流以及緩沖區(qū)大小受限等缺點岳颇。

  • 4.共享內存:使得多個進程可以訪問同一塊內存空間照捡,是最快的可用IPC形式。是針對其他通信機制運行效率較低而設計的赦役。往往與其它通信機制麻敌,如信號量結合使用,來達到進程間的同步及互斥掂摔。

  • 5.信號量(semaphore):主要作為進程間以及同一進程不同線程之間的同步手段术羔。

  • 6.套接口(Socket):更為一般的進程間通信機制,可用于不同機器之間的進程間通信乙漓。起初是由Unix系統(tǒng)的BSD分支開發(fā)出來的级历,但現(xiàn)在一般可以移植到其它類Unix系統(tǒng)上:Linux和System V的變種都支持套接字。

上面的6種都是內核里的程序:

進程A發(fā)起請求給內核里的程序叭披,內核里的程序再將請求轉發(fā)給進程B寥殖,從而達到進程間通信。

Android中的Binder誕生

Android系統(tǒng)通過Linux的動態(tài)可加載內核模塊涩蜘,添加一個內核模塊運行在內核空間嚼贡,用戶進程之間的通過這個模塊作為橋梁,就可以完成通信同诫。就是我們后面要涉及到的:Binder驅動粤策。

google通過新增內核模塊完成了進程間通信協(xié)議的實現(xiàn),然后使用binder驅動來調用這個新增的內核模塊误窖,來為上層應用提供接口叮盘,最后在framework層封裝這個接口來提供 java API 調用接口秩贰。

Android系統(tǒng)為什么需要再實現(xiàn)一個進程間通信協(xié)議Binder呢?

  • 在移動設備上柔吼,Binder的傳輸效率和可操作性很好毒费。
  • Binder機制能夠很好地實現(xiàn)Client-Server架構。
  • Binder機制的安全性高愈魏。
    • 傳統(tǒng)方式對于通信雙方的身份并沒有做出嚴格的驗證觅玻,只有在上層協(xié)議上進行架設;
    • 比如Socket通信ip地址是客戶端手動填入的蝌戒,都可以進行偽造串塑;
    • 而Binder機制從協(xié)議本身就支持對通信雙方做身份校檢,因而大大提升了安全性北苟。

感謝您的閱讀桩匪,本系列會繼續(xù)創(chuàng)作關于android中進程通訊的具體用法。歡迎前來觀望友鼻。

推薦閱讀

image

Android開發(fā)藝術探索

image

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末傻昙,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子彩扔,更是在濱河造成了極大的恐慌妆档,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,386評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件虫碉,死亡現(xiàn)場離奇詭異贾惦,居然都是意外死亡,警方通過查閱死者的電腦和手機敦捧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評論 3 394
  • 文/潘曉璐 我一進店門须板,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人兢卵,你說我怎么就攤上這事习瑰。” “怎么了秽荤?”我有些...
    開封第一講書人閱讀 164,704評論 0 353
  • 文/不壞的土叔 我叫張陵甜奄,是天一觀的道長。 經(jīng)常有香客問我窃款,道長课兄,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,702評論 1 294
  • 正文 為了忘掉前任晨继,我火速辦了婚禮第喳,結果婚禮上,老公的妹妹穿的比我還像新娘踱稍。我一直安慰自己曲饱,他們只是感情好,可當我...
    茶點故事閱讀 67,716評論 6 392
  • 文/花漫 我一把揭開白布珠月。 她就那樣靜靜地躺著扩淀,像睡著了一般。 火紅的嫁衣襯著肌膚如雪啤挎。 梳的紋絲不亂的頭發(fā)上驻谆,一...
    開封第一講書人閱讀 51,573評論 1 305
  • 那天,我揣著相機與錄音庆聘,去河邊找鬼胜臊。 笑死,一個胖子當著我的面吹牛伙判,可吹牛的內容都是我干的象对。 我是一名探鬼主播,決...
    沈念sama閱讀 40,314評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼宴抚,長吁一口氣:“原來是場噩夢啊……” “哼勒魔!你這毒婦竟也來了?” 一聲冷哼從身側響起菇曲,我...
    開封第一講書人閱讀 39,230評論 0 276
  • 序言:老撾萬榮一對情侶失蹤冠绢,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后常潮,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體弟胀,經(jīng)...
    沈念sama閱讀 45,680評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,873評論 3 336
  • 正文 我和宋清朗相戀三年喊式,在試婚紗的時候發(fā)現(xiàn)自己被綠了孵户。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,991評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡垃帅,死狀恐怖延届,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情贸诚,我是刑警寧澤方庭,帶...
    沈念sama閱讀 35,706評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站酱固,受9級特大地震影響械念,放射性物質發(fā)生泄漏。R本人自食惡果不足惜运悲,卻給世界環(huán)境...
    茶點故事閱讀 41,329評論 3 330
  • 文/蒙蒙 一龄减、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧班眯,春花似錦希停、人聲如沸烁巫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽亚隙。三九已至,卻和暖如春违崇,著一層夾襖步出監(jiān)牢的瞬間阿弃,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評論 1 270
  • 我被黑心中介騙來泰國打工羞延, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留渣淳,地道東北人。 一個月前我還...
    沈念sama閱讀 48,158評論 3 370
  • 正文 我出身青樓伴箩,卻偏偏與公主長得像入愧,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子赛蔫,可洞房花燭夜當晚...
    茶點故事閱讀 44,941評論 2 355

推薦閱讀更多精彩內容