談談Android的IPC(進程間通信)機制


答:http://blog.csdn.net/luoshengyang/article/details/6618363

Android系統中,每一個應用程序都是由一些Activity和Service組成的,這些Activity和Service有可能運行在同一個進程中,也有可能運行在不同的進程中,android的IPC機制也就是Binder機制,Android系統是基於Linux內核的,而Linux內核繼承和兼容了豐富的Unix系統進程間通信(IPC)機制, 但是,Android系統沒有采用上述提到的各種進程間通信機制,而是採用Binder機制,Binder是一種進程間通信機制,它是一種類似於COM和CORBA分佈式組件架構,通俗一點,其實是提供遠程過程調用(RPC)功能。從英文字面上意思看,Binder具有粘結劑的意思,那麼它把什麼東西粘結在一起呢?在Android系統的Binder機制中,由一系統組件組成,分別是Client、Server、Service Manager和Binder驅動程序,其中Client、Server和Service Manager運行在用戶空間,Binder驅動程序運行內核空間。Binder就是一種把這四個組件粘合在一起的粘結劑了,其中,核心組件便是Binder驅動程序了,Service Manager提供了輔助管理的功能,Client和Server正是在Binder驅動和ServiceManager提供的基礎設施上,進行Client-Server之間的通信;

 

   1. Client、Server和Service Manager實現在用戶空間中,Binder驅動程序實現在內核空間中

  2. Binder驅動程序和Service Manager在Android平臺中已經實現,開發者只需要在用戶空間實現自己的Client和Server

   3.Binder驅動程序提供設備文件/dev/binder與用戶空間交互,Client、Server和Service Manager通過open和ioctl文件操作函數與Binder驅動程序進行通信

  4. Client和Server之間的進程間通信通過Binder驅動程序間接實現

   5. Service Manager是一個守護進程,用來管理Server,並向Client提供查詢Server接口的能力






android binder機制主要在client server servicemanager 驅動binder 之間的交互


1.client server servicemanager實現在用戶空間 驅動binder實現在內核空間中
2.其中servicemanager和驅動binder在android 平臺中已經實現 而我們只需要實現client 和 server即可
3.Binder驅動程序通過提供dev/binder和用戶空間交互,而client server servicemanager通過打開open ioctl文件操作函數和binder驅動程序通信。
4.client 和 server之間的通信通過binder驅動程序之間進行實現。
5.servicemanager是一個守護程序,通過管理server 提供給client的server的能力。


其中servermanager.c 文件中main函數主要實現了三個功能
1.打開dev/binder驅動程序文件
2.告訴binder是上下文聯繫管理中
3.進入一個無窮循環,充當server角色,等待clent請求。
4.建立128k內存映射


對server來說通過servicemanager遠程接口(Iservicemanager.h中gDefaultServiceManager)拿到Bpservicemanager,然後通過Bpservicemanager:addserivce 與binder程序之間進行交互。
Client也是通過IServiceManager.getService接口來獲得Service接口。

發佈了27 篇原創文章 · 獲贊 2 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章