Android系統的虛擬地址內存分爲用戶空間和內核空間,用戶空間是非共享的,只讓應用自己訪問,內核空間是共享的,Binder通過共享內核空間實現進程間通信。
Binder把進程A生成的IPC數據(在用戶空間生成),傳遞給BinderDriver,Binder Driver在內核空間運行,之後Binder Driver再把IPC數據傳遞給進程B。IPC數據由4部分組成,Handle、RPC數據、RPC代碼、Binder協議,Handle是服務號,用來區分不同的服務,RPC代碼和RPC數據分別是B應用待調用的函數和函數的參數,Binder協議表示IPC數據的處理方法,包括兩種,從IPC層傳遞到Binder Driver和從Binder Driver傳遞到IPC層。
IPC數據從A應用傳遞到BinderDriver,Open()函數會調用Binder Driver的文件描述符,然後通過mmap()系統調用,在內核中開闢一塊區域,存放接收的IPC數據,最後調用ioctl()函數,將IPC數據作爲參數傳遞給Binder Driver。之後Binder Driver再把數據傳遞到B應用,所以binder是靠共享內存實現的進程間通信。
參考鏈接:
http://m.blog.csdn.net/article/details?id=50803196