【Binder 機制】進程通信-正常情況 | 進程通信- mmap 內存映射 | Binder 機制重要組件
文章目錄
一、進程通信-正常情況 ( 兩次拷貝 )
二、進程通信- mmap 內存映射 ( 一次拷貝 )
三、Binder 機制重要組件 ( Client 客戶端 、Server 服務端、Service Manager、Binder 驅動 )
一、進程通信-正常情況 ( 兩次拷貝 )
Binder 通信機制 依賴于 共享的 內核空間 ;
正常情況下 , 進行進程間的通信 , 需要進行如下操作 : 進行 2 2 2 次數據拷貝 , 用戶空間 -> 內核空間 -> 用戶空間 ;
進程 B 發送消息給進程 A , 先將數據 從
進程 A
的
用戶空間 緩沖區
寫到
內核空間 緩沖區
中 , 然后將數據從
內核空間 緩沖區
寫到
進程 A
的
用戶空間 緩沖區
中 ;
二、進程通信- mmap 內存映射 ( 一次拷貝 )
Binder 可以只進行
一次拷貝
, 就可以完成跨進程通信 , 該依次拷貝是基于
內存映射
完成的 ;
內存映射 就是 基于 Memory Map 函數 mmap 進行的 ;
參考零拷貝原理 【Netty】mmap 和 sendFile 零拷貝原理 博客 ;
在 進程A 內存中 , 沒有在自己的 用戶空間 內存中申請 通信的數據緩沖區 , 而是在 內核空間 中申請了一塊 進程 A 的緩沖區 ,
三、Binder 機制重要組件 ( Client 客戶端 、Server 服務端、Service Manager、Binder 驅動 )
Binder 機制是 C/S 架構的 , Client / Server , 客戶端就是進程 , 服務器就是系統的服務 ;
Service Manager 運行在 用戶空間 , 負責管理 Server 服務器的 注冊服務 功能 ;
Service 服務 需要 先注冊 , 客戶端 才能獲取該 Service 服務 ;
客戶端 , 服務端 , Service Manger , 都可以通過 ioctl 調用 Binder 驅動 ;
下圖是 Binder 機制中的 4 4 4 個重要組成部分 , Client 客戶端 , Server 服務端 , Service Manager , Binder 驅動 ;
進程 A 與 進程 B 之間通信 , 先通過 ServiceManager 獲取 Binder 驅動的代理 , 然后使用對應的服務 ;
AIDL ( Android Interface Definition Language ) 安卓接口定義語言 , 定義一些接口 , 讓兩個進程之間可以進行相互通信 ;
任務調度
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。