1.Binder機(jī)制的作用是什么圆丹?
Binder機(jī)制的作用如電話之于人類的作用--通信备韧。在android中Binder機(jī)制用于進(jìn)程間通信莉给。
2.Binder機(jī)制產(chǎn)生背景
先了解兩個知識點:
1. 虛擬內(nèi)存映射:Linux進(jìn)程中只能使用虛擬內(nèi)存地址也糊,由操作系統(tǒng)對虛擬內(nèi)存地址進(jìn)行轉(zhuǎn)換后操作物理內(nèi)存,這也是Linux實現(xiàn)進(jìn)程隔離掀虎、內(nèi)存共享凌盯、權(quán)限驗證的基礎(chǔ)付枫。關(guān)于虛擬內(nèi)存可參考這邊文章2. 用戶空間和內(nèi)核空間:操作系統(tǒng)的內(nèi)核擁有對底層設(shè)備的所有訪問權(quán)限,與普通的應(yīng)用程序有所不同十气,故虛擬內(nèi)存劃分為兩塊励背,內(nèi)核空間供系統(tǒng)內(nèi)核使用春霍,用戶空間供用戶進(jìn)程使用砸西。
android系統(tǒng)是基于Linux系統(tǒng)的,出于安全的考慮址儒,Linux的進(jìn)程需要相互隔離芹枷,但又有相互交流的需要,Binder機(jī)制就能滿足進(jìn)程間交流的需要莲趣。其實Linux系統(tǒng)中能實現(xiàn)進(jìn)程間通信的已有好幾種鸳慈,如管道,socket喧伞,共享內(nèi)存等走芋,重新實現(xiàn)一套Binder機(jī)制的意義何在呢?就好像電話發(fā)明之前潘鲫,已有通信的方式翁逞,如飛鴿傳書,狼煙等溉仑。
主要從兩方面綜合考慮:
1. 性能方面:管道挖函,socket間通信需要數(shù)據(jù)拷貝2次;共享內(nèi)存0次浊竟,但實現(xiàn)復(fù)雜怨喘;Binder機(jī)制1次。不需要像飛鴿那樣慢慢飛振定,狼煙一個個點必怜。
2. 安全方面:相比于傳統(tǒng)的Linux的IPC機(jī)制,Binder機(jī)制能可靠地利用進(jìn)程的uid進(jìn)行身份校驗(具體參考Binder通信模型)
3.Binder機(jī)制通信模型
具體可參考這篇文章后频,圖片來自這篇文章梳庆,侵刪
系統(tǒng)調(diào)用是用戶空間和內(nèi)核空間交互的手段
Binder機(jī)制的通信模型可類比網(wǎng)絡(luò)通信:發(fā)起請求通信的用戶進(jìn)程類比于client;接收請求用戶進(jìn)程類比于Server徘郭;找到對應(yīng)接收請求的用戶進(jìn)程的Service Manager類比于DNS服務(wù)器解析域名靠益;傳輸數(shù)據(jù)的Binder驅(qū)動類比路由器。
我理解的Binder通信過程如下:
android系統(tǒng)啟動時自動創(chuàng)建一個叫Service Manager的進(jìn)程残揉,該進(jìn)程中有一個Binder本地對象(這個進(jìn)程維護(hù)一個映射表:進(jìn)程的名字-->對應(yīng)的Binder驅(qū)動創(chuàng)建的Binder代理對象的引用)胧后,Binder驅(qū)動也自定為它創(chuàng)建一個Binder代理對象(代理Binder本地對象),并且其他的進(jìn)程都擁有一個Binder代理對象的引用抱环,通過這個引用跟Service Manager通信壳快。
之后的每啟動一個進(jìn)程都需要在Service Manager中注冊纸巷。
- 首先該進(jìn)程通過系統(tǒng)調(diào)用把Binder本地對象的引用和進(jìn)程名字發(fā)送給Binder驅(qū)動。
- 然后Binder驅(qū)動把1中傳過來的Binder本地對象包裝成一個Binder代理對象
- 最后Binder驅(qū)動通過系統(tǒng)調(diào)用把Binder代理對象的引用和進(jìn)程名字發(fā)送給Service Manager中注冊
每個進(jìn)程都有Service Manager進(jìn)程Binder代理對象的引用眶痰,當(dāng)Client進(jìn)程向Server進(jìn)程發(fā)送請求時瘤旨,通過Service Manager進(jìn)程Binder代理對象的引用查詢映射表,拿到Server進(jìn)程的名字對應(yīng)的Binder代理對象竖伯,然后Client進(jìn)程通過Server進(jìn)程的Binder代理對象(包裝了Server進(jìn)程Binder本地對象)調(diào)用方法存哲,并返回結(jié)果。
4. android系統(tǒng)架構(gòu)中跟Binder驅(qū)動處于同一層次的還有哪些七婴?
顯示驅(qū)動祟偷,WiFi驅(qū)動,音頻驅(qū)動打厘,相機(jī)驅(qū)動修肠,電量管理等
5. 其他
android中Binder驅(qū)動主要用于用戶應(yīng)用程序跟各個系統(tǒng)服務(wù)之間的通信。
Binder中文翻譯是黏合劑户盯,它連通了隔離的進(jìn)程嵌施。