標籤:模型 訪問 man androi 資料 訊號 隔離 通訊錄 運行
Linux核心的基礎知識:
- 進程隔離/虛擬位址空間:在作業系統中為了保護某個進程互不干擾就設計了一個叫“進程隔離”的技術,防止進程A可以操作進程B的資料。而進程隔離技術用到了虛擬位址空間,進程A的虛擬位址空間跟進程B的虛擬位址空間其實是不同的,而如果進程與進程之間要進行通知則需要某種通訊機制才能完成,在android裡面就是binder通訊機制。
- 系統調用:因為系統對核心存在某種保護機制來告訴應用程式你只可能訪問某些許可的資源,不許可的資源是不能被訪問的,也就是把Linux的核心層與應用程式層抽象隔離,也就是核心層和使用者空間,使用者可以通用系統調用在使用者空間去訪問核心的某些程式。
- binder驅動:在android系統中它是運行在核心空間當中,它負責各各使用者進程通過binder通訊的核心進行互動的一個模組則為binder驅動。可以通過它來訪問硬體。
Binder通訊機制介紹:
- 為什麼要使用Binder?
a、Android使用的Linux核心擁有著非常多的跨進程通訊機制,如:管道、socket等,那為什麼Android還要特意搞個Binder通訊機制呢?主要是以下兩點的考慮:
b、效能:行動裝置中如果廣泛的使用跨進程通訊機制肯定會對通訊機制提出嚴格的要求,而Binder相比較傳統的進程通訊方式更加的高效。
c、安全:由於傳統進程通訊方式沒有對通訊的雙方和身方做出嚴格的驗證,只有上層協議才會去架構,如socket串連的IP地址可以人為的偽造。而Binder身份校正也是android許可權模式的基礎。
- binder通訊模式:
a、電話基站:binder驅動
b、通訊錄:serviceManager
這裡用一個比較形像的例子來說明上面的通訊錄和電話基站在binder通訊模型中的作用:A同學要給B同學打電話,首先A同學會去從通訊錄中找到B同學的電話號碼,而serviceManager驅動的角色就相當於這裡說到的通訊錄,存了通訊雙方的一些類似電話號碼可以去識別對方的東東,但是找到電話號碼要想打通對方,還需要電話基站的支援,電話基站是用來傳替雙方訊號的,所以binder驅動就相當於電話基站。下面用圖來說明:
AIDL:
Android基礎相關面試問題-binder面試問題詳解