一、Linux內(nèi)核的基礎(chǔ)知識
1.進程隔離/虛擬地址空間
進程隔離 :在操作系統(tǒng)中,為了保證某些進程互不干擾,為了避免進程A可以操作進程B的數(shù)據(jù)的情況采用的方法。進程隔離使用了虛擬地址空間,進程A的虛擬地址空間和進程B的虛擬地址空間是不同的,可以防止進程A的數(shù)據(jù)寫入進程B中。進程間需要通信的話,需要進行跨進程通信,Android中使用的機制就是Binder。
2.系統(tǒng)調(diào)用
操作系統(tǒng)中需要分權(quán)限進行控制,用戶只能訪問某些許可的資源,不許可的資源是訪問不到的。用戶可以通過系統(tǒng)調(diào)用在用戶空間訪問內(nèi)核的某些程序。
3.Binder驅(qū)動
在Android系統(tǒng)中,Binder驅(qū)動是運行在內(nèi)核空間中的,負責各個用戶進程通過Binder通信的內(nèi)核來進行交互的一個模塊。
二、Binder通信機制介紹
1.為什么使用Binder
1)Android使用的Linux內(nèi)核擁有著非常多的跨進程通信機制。
2)性能:Binder相對于傳統(tǒng)的Socket有著更高效的性能。
3)安全:傳統(tǒng)的進程間通信機制對于通信雙方?jīng)]有作出嚴格的認證,而Binder支持通信雙方的校驗,有更好地安全性。
2.Binder通信模型
1)通信錄:ServiceManager。里面存有所需要的對象的連接方式。
2)電話基站:Binder驅(qū)動。連接服務(wù)端與客戶端。
3.Binder通信進制原理
Server服務(wù)端通過Binder驅(qū)動在ServiceManager中注冊所有的類和方法,在Client客戶端請求服務(wù)端的方法的時候,會通過Binder驅(qū)動到ServiceManager中查找已注冊的方法,ServiceManager找到該方法之后會返回該方法對應的代理對象的方法。當客戶端調(diào)用該方法的時候,代理對象會通過驅(qū)動調(diào)用服務(wù)端的方法,服務(wù)端的方法執(zhí)行完之后,會通過ServiceManager返回給客戶端。
