官术网_书友最值得收藏!

7.1 Binder機制概述

Binder是Android系統提供的一種IPC(進程間通信)機制。由于Android是基于Linux內核的,所以除了Binder以外,還存在其他的IPC機制,例如管道和socket等。Binder相對于其他IPC機制來說更加靈活和方便,其驅動代碼保存在文件“kernel/drivers/staing/android/binder.c”中,另外該目錄下還有一個binder.h頭文件。Binder是一個虛擬設備,所以它的代碼相比而言還算簡單,讀者只要有基本的Linux驅動開發方面的知識就能讀懂。在“/proc/binder”目錄下的內容,可以用來查看Binder設備的運行狀況。

可以將Android系統看作是一個基于Binder通信的C/S架構,Binder就像網絡一樣把系統的各個部分連接在了一起。在基于Binder通信的C/S架構體系中,除了C/S架構所包括的Client端和Server端外,Android還有一個全局的Service Manager端,它的作用是管理系統中的各種服務(Service)。

在Android系統的Binder機制中,由Client、Server、Service Manager、Binder Driver 4個組件組成,具體關系如圖7-1所示。

圖7-1 Binder機制中的組件關系圖

在Android系統中,Client、Server和ServiceManager三者之間的交互關系如下所示。

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

Server進程要先注冊一些Service到Service Manager中,所以Server是Service Manager的客戶端,而Service Manager就是服務端了。Service Manager是一個守護進程,能夠管理Server并向Client提供查詢Server接口。

如果某個Client進程要使用某個Service,必須先到Service Manager中獲取該Service的相關信息,所以Client是Service Manager的客戶端。另外,Client根據得到的Service信息與Service所在的Server進程建立通信的通路,然后就可以直接與Service交互了,所以Client也是Server的客戶端。

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

在Android平臺中已經實現了Binder驅動程序和Service Manager,開發者只需要在用戶空間實現自己的Client和Server即可。三者的交互都是基于Binder通信的,所以通過任意兩者之間的關系,都可以獲取Binder的奧秘。

主站蜘蛛池模板: 油尖旺区| 林周县| 砚山县| 紫云| 宣恩县| 苗栗县| 霸州市| 颍上县| 德保县| 富宁县| 隆子县| 疏附县| 凤翔县| 搜索| 北辰区| 平塘县| 自贡市| 衡东县| 义乌市| 镇远县| 广东省| 营口市| 耿马| 大同县| 清远市| 通道| 诸城市| 东乡| 芦溪县| 淳化县| 中西区| 淮安市| 天峨县| 瓮安县| 中卫市| 松原市| 辽宁省| 德安县| 习水县| 陇西县| 荃湾区|