Binder進(jìn)程間通信

1 為什么需要跨進(jìn)程通信

首先同一個(gè)程序中之所以兩個(gè)函數(shù)之間能夠直接調(diào)用喉前,其根本原因是它們處于相同的內(nèi)存空間中,虛擬地址的映射規(guī)則完全一致轻专。反之不同進(jìn)程之間它們沒辦法通過內(nèi)存地址來直接訪問到對(duì)方內(nèi)部的函數(shù)或者變量忆矛。

Paste_Image.png

2 為什么采用Binder

常用的IPC機(jī)制有管道、Socket请垛、共享內(nèi)存等催训,那么Android中為什么要建立一套新的IPC機(jī)制?

1 開銷問題

socket作為一款通用接口宗收,其傳輸效率低漫拭,開銷大,主要用在跨網(wǎng)絡(luò)的進(jìn)程間通信和本機(jī)上進(jìn)程間的低速通信混稽。消息隊(duì)列和管道采用存儲(chǔ)-轉(zhuǎn)發(fā)方式采驻,即數(shù)據(jù)先從發(fā)送方緩存區(qū)拷貝到內(nèi)核開辟的緩存區(qū)中,然后再從內(nèi)核緩存區(qū)拷貝到接收方緩存區(qū)匈勋,至少有兩次拷貝過程礼旅。共享內(nèi)存雖然無需拷貝,但控制復(fù)雜颓影,難以使用。

2 安全問題

傳統(tǒng)IPC沒有任何安全措施懒鉴,完全依賴上層協(xié)議來確保诡挂。首先傳統(tǒng)IPC的接收方無法獲得對(duì)方進(jìn)程可靠的UID和PID(用戶ID進(jìn)程ID),從而無法鑒別對(duì)方身份临谱。Android為每個(gè)安裝好的應(yīng)用程序分配了自己的UID璃俗,故進(jìn)程的UID是鑒別進(jìn)程身份的重要標(biāo)志。使用傳統(tǒng)IPC只能由用戶在數(shù)據(jù)包里填入U(xiǎn)ID和PID悉默,但這樣不可靠城豁,容易被惡意程序利用〕危可靠的身份標(biāo)記只有由IPC機(jī)制本身在內(nèi)核中添加唱星。其次傳統(tǒng)IPC訪問接入點(diǎn)是開放的雳旅,無法建立私有通道。比如命名管道的名稱间聊,systemV的鍵值攒盈,socket的ip地址或文件名都是開放的,只要知道這些接入點(diǎn)的程序都可以和對(duì)端建立連接哎榴,不管怎樣都無法阻止惡意程序通過猜測(cè)接收方地址獲得連接型豁。

基于以上原因,Android需要建立一套新的IPC機(jī)制來滿足系統(tǒng)對(duì)通信方式尚蝌,傳輸性能和安全性的要求迎变,這就是Binder。Binder基于Client-Server通信模式飘言,傳輸過程只需一次拷貝衣形,為發(fā)送發(fā)添加UID/PID身份,既支持實(shí)名Binder也支持匿名Binder热凹,安全性高泵喘。

3 Binder跨進(jìn)程通信原理

Paste_Image.png

mmap()的返回值是內(nèi)存映射在用戶空間的地址,不過這段空間是由驅(qū)動(dòng)管理般妙,用戶不必也不能直接訪問(映射類型為PROT_READ纪铺,只讀映射)。進(jìn)程A通過copy_from_user()將數(shù)據(jù)拷貝到binder_proc->buffer所指向的內(nèi)存空間中碟渺,而因?yàn)閎inder_proc->buffer在物理內(nèi)存中的位置和進(jìn)程B是共享的鲜锚,因此進(jìn)程B可以直接訪問到這段數(shù)據(jù),從而實(shí)現(xiàn)了進(jìn)程間的數(shù)據(jù)共享苫拍。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末芜繁,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子绒极,更是在濱河造成了極大的恐慌骏令,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,252評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件垄提,死亡現(xiàn)場(chǎng)離奇詭異榔袋,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)铡俐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門凰兑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人审丘,你說我怎么就攤上這事吏够。” “怎么了?”我有些...
    開封第一講書人閱讀 168,814評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵锅知,是天一觀的道長播急。 經(jīng)常有香客問我,道長喉镰,這世上最難降的妖魔是什么旅择? 我笑而不...
    開封第一講書人閱讀 59,869評(píng)論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮侣姆,結(jié)果婚禮上生真,老公的妹妹穿的比我還像新娘。我一直安慰自己捺宗,他們只是感情好柱蟀,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,888評(píng)論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著蚜厉,像睡著了一般长已。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上昼牛,一...
    開封第一講書人閱讀 52,475評(píng)論 1 312
  • 那天术瓮,我揣著相機(jī)與錄音,去河邊找鬼贰健。 笑死胞四,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的伶椿。 我是一名探鬼主播辜伟,決...
    沈念sama閱讀 41,010評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼脊另!你這毒婦竟也來了导狡?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,924評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤偎痛,失蹤者是張志新(化名)和其女友劉穎旱捧,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體踩麦,經(jīng)...
    沈念sama閱讀 46,469評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡枚赡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,552評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了靖榕。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片标锄。...
    茶點(diǎn)故事閱讀 40,680評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡顽铸,死狀恐怖茁计,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤星压,帶...
    沈念sama閱讀 36,362評(píng)論 5 351
  • 正文 年R本政府宣布践剂,位于F島的核電站,受9級(jí)特大地震影響娜膘,放射性物質(zhì)發(fā)生泄漏逊脯。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,037評(píng)論 3 335
  • 文/蒙蒙 一竣贪、第九天 我趴在偏房一處隱蔽的房頂上張望军洼。 院中可真熱鬧,春花似錦演怎、人聲如沸匕争。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽甘桑。三九已至,卻和暖如春歹叮,著一層夾襖步出監(jiān)牢的瞬間跑杭,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評(píng)論 1 274
  • 我被黑心中介騙來泰國打工咆耿, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留德谅,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,099評(píng)論 3 378
  • 正文 我出身青樓票灰,卻偏偏與公主長得像女阀,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子屑迂,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,691評(píng)論 2 361

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