android binder(1)基本原理

一、IPC

?進程間通信(IPC,Inter-Process Communication)機制,用于解決不同進程間的數據交互問題。

不同進程之間用戶地址空間的變量和函數是不能相互訪問的,但是不同進程的內核地址空間是相同和共享的,我們可以借助內核地址空間作為中轉站來實現進程間數據的傳輸。

具體的我們在 B 進程使用 copy_from_user 將用戶態數據 int a 拷貝到內核態,這樣就可以在 A 進程的內核態中訪問到 int a

更進一步,可以在 A 進程中調用 copytouser 可以將 int a 從內核地址空間拷貝到用戶地址空間。至此,我們的進程 A 用戶態程序就可以訪問到進程 B 中的用戶地址空間數據 int a

二、binder是什么??

Binder 是 Android 系統中特有的?進程間通信(IPC,Inter-Process Communication)機制。

  • 技術前身:Android 系統使用的 Binder 機制起源于 BeOS 操作系統的功能。BeOS 中的 OpenBinder 最初由 Be Inc. 開發,當時 Be 公司的工程師喬治?霍夫曼(George Hoffman)啟動了 OpenBinder 項目,后由 Dainne Hackborn 繼續開發。在 BeOS 被 Palm 收購后,OpenBinder 成為管理 PalmOS 6、Cobalt OS 進程的基礎。
  • 應用到 Android:Dainne Hackborn 加入谷歌后,基于 OpenBinder 開發出了 Android Binder,用于實現 Android 的進程通信。它定義并實現了類似 Windows 系統的 COM 框架和 Unix 系統的 CORBA 框架的分布式組件框架,借鑒了 CORBA 中可像在本地執行一樣調用其他設備程序的先進理念(發展至今類似成熟的 RPC 理念) 。

為了訪問 int a ,需要拷貝兩次數據。能不能優化一下?我們可以通過 mmap 將進程 A 的用戶地址空間與內核地址空間進行映射,讓他們指向相同的物理地址空間:

完成映射后,B 進程只需調用一次 copyfromuser,A 進程的用戶空間中就可以訪問到 int a了。這里就優化到了一次拷貝。

以上就是 binder 最基本的原理了。它相比傳統 Linux IPC(如管道、Socket、共享內存等)更高效、更適合移動設備的資源限制,其有以下幾個特點:

  1. 高性能:減少內存拷貝次數(僅需一次拷貝),優于傳統 IPC 的兩次拷貝(用戶空間 ? 內核空間 ? 用戶空間)。

    Binder拷貝方式: 數據發送端(虛擬內存) ?copy_from_user --> 內核虛擬內存 ?<--mmap--> 數據接收端(虛擬內存) ?

    內核虛擬內存和數據接收端虛擬內存采用mmap映射到同一塊物理內存,不存在拷貝動作,數據發送端(Client)要把IPC數據 拷貝到內核虛擬內存空間,存在一次拷貝,所以Binder只存在一次內存拷貝

  2. 面向對象:以 “接口” 為核心,支持面向對象的編程方式,方便開發者理解和使用。
  3. 安全性:可直接獲取進程 PID/UID,便于系統進行權限校驗(如訪問系統服務需聲明權限)。
  4. 跨進程通信的抽象化:將復雜的底層通信細節封裝為簡單的接口,降低開發者使用門檻。

二、Binder 機制的核心組件

Binder 機制由?用戶空間組件?和?內核空間組件?共同構成:

1. 用戶空間組件
  • Client(客戶端):發起通信請求的進程(如應用程序)。
  • Server(服務端):提供服務的進程(如系統服務?SystemServer)。
  • ServiceManager:全局的服務管理進程,負責注冊、查詢服務,相當于 “服務目錄”。
2. 內核空間組件
  • Binder 驅動(drivers/staging/android/binder.c
    • 負責創建 Binder 設備文件(/dev/binder),供用戶空間進程訪問。
    • 管理 Binder 節點(對應服務端對象)和引用(對應客戶端代理對象)。
    • 實現進程間通信的核心邏輯,如數據傳輸、線程管理等。

三、Binder 幾個關鍵概念

四、Binder 機制的核心原理

Binder 通信基于?C/S 架構:

其典型流程如下:?

服務注冊

服務獲取

通信過程


?

ref:

十分鐘搞懂Android Binder機制_嗶哩嗶哩_bilibili

https://juejin.cn/post/7210175991837392933

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/83538.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/83538.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/83538.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

高密爆炸警鐘長鳴:AI為化工安全戴上“智能護盾”

一、高密爆炸&#xff1a;一聲巨響&#xff0c;撕開化工安全“傷疤” 2025年5月27日&#xff0c;山東高密友道化學有限公司的車間爆炸聲&#xff0c;像一把利刃劃破了化工行業的平靜。劇烈的沖擊波將車間夷為平地&#xff0c;黑色蘑菇云騰空而起&#xff0c;刺鼻的化學氣味彌漫…

雙擎驅動:華為云數字人與DeepSeek大模型的智能交互升級方案

一、技術融合概述 華為云數字人 華為云數字人&#xff0c;全稱&#xff1a;數字內容生產線 MetaStudio。數字內容生產線&#xff0c;提供數字人視頻制作、視頻直播、智能交互、企業代言等多種服務能力&#xff0c;使能千行百業降本增效。另外&#xff0c;數字內容生產線&#…

Linux運維筆記:1010實驗室電腦資源規范使用指南

文章目錄 一. 檢查資源使用情況&#xff0c;避免沖突1. 檢查在線用戶2. 檢查 CPU 使用情況3. 檢查 GPU 使用情況4. 協作建議 二. 備份重要文件和數據三. 定期清理硬盤空間四. 退出 ThinLinc 時注銷&#xff0c;釋放內存五. 校外使用時配置 VPN注意事項 總結 實驗室的電腦配備了…

手機郵箱APP操作

收發電子郵件方式 郵箱可以在網絡段登錄&#xff0c;也可以在手機端登錄。 大學網絡服務 收發電子郵件有三種方式&#xff1a; 1、Web方式&#xff1a; 1&#xff09;登錄“網絡服務”&#xff08;https://its.pku.edu.cn&#xff09;&#xff0c;點頁面頂端“郵箱”。 2&…

Dockerfile 使用多階段構建(build 階段 → release 階段)后端配置

錯誤Dockerfile配置示例&#xff1a; FROM python:3.11 as buildENV http_proxyhttp://172.17.0.1:7890 ENV https_proxyhttp://172.17.0.1:7890WORKDIR /appENV PYTHONPATH/app# Install Poetry # RUN curl -sSL https://install.python-poetry.org | POETRY_HOME/opt/poetry…

webstrom中git插件勾選提交部分文件時卻出現提交全部問題怎么解決

原因是我有個.husky的文件制定了執行提交的時候就是提交所有的文件 修改.husky/pre-commit文件就可以啦 #!/usr/bin/env sh . "$(dirname -- "$0")/_/husky.sh"# 獲取通過 WebStorm 提交的暫存文件&#xff08;僅勾選的部分&#xff09; STAGED_FILES$(gi…

OSG編譯wasm嘗試

最近遇到一個情況&#xff0c;需要嘗試一下OSG到webassembly 發現官網有教程 于是順著看了看&#xff0c;默認教程是xubuntu的一個系統跑的&#xff0c;但是我本著試一試的想法&#xff0c;拉下來直接在windows上跑&#xff0c;奇奇怪怪的報錯簡直頭皮發麻 然后怎么辦呢&#x…

QT中子線程觸發主線程彈窗并阻塞等待用戶響應-傳統信號槽實現

目錄 QT中子線程觸發主線程彈窗并阻塞等待用戶響應傳統信號槽實現實現思路具體步驟1. 定義信號與槽2. 異步任務中觸發彈窗3. 主線程處理彈窗4. 連接信號與槽關鍵點總結 更簡單實現 QT中子線程觸發主線程彈窗并阻塞等待用戶響應 傳統信號槽實現 場景需求&#xff1a;在子線程執…

STM32學習之WWDG(原理+實操)

&#x1f4e2;&#xff1a;如果你也對機器人、人工智能感興趣&#xff0c;看來我們志同道合? &#x1f4e2;&#xff1a;不妨瀏覽一下我的博客主頁【https://blog.csdn.net/weixin_51244852】 &#x1f4e2;&#xff1a;文章若有幸對你有幫助&#xff0c;可點贊 &#x1f44d;…

【端午安康】龍舟爭渡Plug-In

文章目錄 正文附錄A&#xff1a;關于Python的錄屏方法總結&#xff08;來自DeepSeek的回答&#xff09;1. 使用 pyautogui 和 OpenCV 錄制屏幕2. 使用 mss 庫&#xff08;高效屏幕捕獲&#xff09;3. 使用 PIL.ImageGrab 錄制屏幕4. 使用 Windows 原生快捷鍵錄制&#xff08;非…

Apache SeaTunnel部署技術詳解:模式選擇、技巧與最佳實踐

Apache SeaTunnel(原Waterdrop)作為高性能、分布式數據集成平臺,支持海量數據的離線與實時同步。其靈活多樣的部署模式可適配不同規模的生產環境需求。本文將系統解析SeaTunnel的部署架構、技術要點及最佳實踐,幫助用戶高效構建穩定可靠的數據管道。 一、部署模式全景概覽 …

【機械視覺】Halcon—【六、交集并集差集和仿射變換】

【機械視覺】Halcon—【六、交集并集差集和仿射變換】 目錄 【機械視覺】Halcon—【六、交集并集差集和仿射變換】 介紹 交集并集差集介紹: 1. 交集&#xff08;Intersection&#xff09; 2. 并集&#xff08;Union&#xff09; 3. 差集&#xff08;Difference&#xff…

實驗設計與分析(第6版,Montgomery)第5章析因設計引導5.7節思考題5.6 R語言解題

本文是實驗設計與分析&#xff08;第6版&#xff0c;Montgomery著&#xff0c;傅玨生譯) 第5章析因設計引導5.7節思考題5.6 R語言解題。主要涉及方差分析&#xff0c;正態假設檢驗&#xff0c;殘差分析&#xff0c;交互作用圖&#xff0c;等值線圖。 dataframe <-data.frame…

劍指offer15_數值的整數次方

數值的整數次方 實現函數 double Power(double base, int exponent) 題目要求 計算 base exponent \text{base}^{\text{exponent}} baseexponent&#xff1a; 不得使用庫函數不需要考慮大數問題&#xff0c;絕對誤差不超過 10 ? 2 10^{-2} 10?2不會出現底數和指數同為 0…

【Typst】1.Typst概述

概述 Typst是一種用于排版文檔的標記語言&#xff0c;可以用于排版各種精美的論文、文章、書籍、報告和作業等。它是LaTex的精神續作&#xff0c;但是運行環境和編譯速度都要更簡單、更快捷。 它設計了一種腳本結合簡單的標記語法實現復雜的排版效果。并且支持模板創建、文件…

[Java惡補day14] 56. 合并區間

以數組 intervals 表示若干個區間的集合&#xff0c;其中單個區間為 intervals[i] [starti, endi] 。請你合并所有重疊的區間&#xff0c;并返回 一個不重疊的區間數組&#xff0c;該數組需恰好覆蓋輸入中的所有區間 。 示例 1&#xff1a; 輸入&#xff1a;intervals [[1,3…

DiskGenius專業版v6.0.1.1645:分區管理、數據恢復、備份還原,一應俱全!

各位小伙伴&#xff0c;大家好&#xff01;今天阿燦給大家帶來一款超好用的分區工具&#xff0c;DiskGenius專業版。這款工具堪稱電腦管理界的“瑞士軍刀”&#xff0c;功能強大&#xff0c;現在出了新版本v6.0.1.1645&#xff0c;簡繁中文單文件便攜版&#xff0c;使用超方便。…

azure web app創建分步指南系列之二

為注冊表授權托管標識 你創建的托管標識尚未獲得從容器注冊表中提取數據的授權。在此步驟中,你將啟用授權。 返回容器注冊表的管理頁面: 在左側導航菜單中,選擇“訪問控制 (IAM)”。選擇“添加角色分配”。此屏幕截圖顯示了如何為容器注冊表啟用添加角色分配。在角色列表中…

STM32 AD單通道與多通道實戰指南

文章目錄 AD單通道&#xff08;實驗&#xff09;有關配置的庫函數AD單通道部分主要代碼 AD多通道實現多通道采集實現思路探討單次轉換非掃描模式實現AD多通道AD多通道部分代碼 學習建議&#xff1a;推薦搭配 江協科技 AD單通道 AD多通道一起食用&#xff01;&#xff01;&#…

溝通頻率不合適,如何找到平衡點

在團隊協作中&#xff0c;溝通頻率過高、信息干擾、節奏錯位常常導致效率下降與成員倦怠。PMI研究指出&#xff0c;溝通不當是75%項目延誤的根源&#xff0c;其中溝通頻率失衡是關鍵變量之一。要解決這一問題&#xff0c;關鍵在于設定節奏、分層溝通、制定協議。其中&#xff0…