android binder(1)基本原理

article/2025/7/14 4:54:33

一、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.hkcw.cn/article/veJHBPZPto.shtml

相关文章

2025年ESWA SCI1区TOP,改进成吉思汗鲨鱼算法MGKSO+肝癌疾病预测,深度解析+性能实测

1.摘要 本文针对肝癌&#xff08;HCC&#xff09;早期诊断难题&#xff0c;提出了一种基于改进成吉思汗鲨鱼优化算法&#xff08;MGKSO&#xff09;的计算机辅助诊断系统。由于HCC在早期症状不明显且涉及高维复杂数据&#xff0c;传统机器学习方法易受噪声和冗余特征干扰。为提…

性能测试实例(http和ldap协议压测)

一、某授权服务器生成授权码效率验证&#xff08;http协议&#xff09; 测试背景 在存量数据23万条的情况下&#xff0c;生成一条授权数据&#xff0c;需要10秒左右&#xff0c;用户反应数据生成效率太差&#xff0c;需要优化。初步判断是由于在授权数据生成时&#xff0c;有查…

解锁设计师创意魔法:Onlook赋能你的Web创作

在数字时代的今天&#xff0c;设计和开发的界限正在逐步模糊。无论是经验丰富的程序员&#xff0c;还是初出茅庐的设计师&#xff0c;能在统一的环境中高效实现创意是任何设计工具的理想。而Onlook&#xff0c;不仅是一个开源的视觉编码编辑器&#xff0c;更是一座连接设计与开…

智慧零工平台前端开发实战:从uni-app到跨平台应用

智慧零工平台前端开发实战:从uni-app到跨平台应用 本文将详细介绍我如何使用uni-app框架开发一个支持微信小程序和H5的零工平台前端应用,包含技术选型、架构设计、核心功能实现及部署经验。 前言 在当今移动互联网时代,跨平台开发已成为提高开发效率的重要手段。本次我选择…

用go从零构建写一个RPC(4)--gonet网络框架重构+聚集发包

在追求高性能的分布式系统中&#xff0c;RPC 框架的底层网络能力和数据传输效率起着决定性作用。经过几轮迭代优化&#xff0c;我完成了第四版本的 RPC 框架。相比以往版本&#xff0c;这一版本的最大亮点在于 重写了底层网络框架 和 实现了发送端的数据聚集机制&#xff0c;这…

云服务器突发宕机或无响应怎么办

当云服务器突发宕机或无响应时&#xff0c;需快速定位问题并恢复服务。以下是分步骤的解决方案&#xff1a; 1. 初步确认问题 检查网络连接 本地网络是否正常&#xff1f;尝试 ping 其他网站 排除本地问题。 使用 ping <服务器IP> 或 traceroute <IP> 测试网络连通…

掌握HttpClient技术:从基础到实战(Apache)

目录 前言 一、Apache HttpClient简介 二、HttpClient基础使用 1. 添加依赖 2. 创建HttpClient实例 3. 发送GET请求 4. 发送POST请求 三、HttpClient高级配置与实战案例 1. 连接池优化 2. 超时与重试配置 3. 文件上传&#xff08;Multipart&#xff09; 总结 前言 …

EXCEL--累加,获取大于某个值的第一个数

一、函数 LET(data,A1:A5,cumSum,SCAN(0,data,LAMBDA(a,b,ab)),idx,MATCH(TRUE,cumSum>C1,0),INDEX(data,idx)) 二、函数拆解 1、LET函数&#xff1a;LET(name1, value1, [name2, value2, ...], calculation) name1, name2...&#xff1a;自定义的变量名&#xff08;需以字…

D. Gellyfish and Camellia Japonica【Codeforces Round 1028 (Div. 2)】

D. Gellyfish and Camellia Japonica 思路 贪心构造&#xff08;其实是思维题&#xff09; 先找必要性&#xff0c;再验证充分性&#xff1a; 倒着求出每个位置的下界作为这个位置的值&#xff0c;再正着验证构造出的这个数列是否合法。 代码非常短&#xff0c;这个题如果当时…

GODOT引擎学习日志

最近在学习使用GODOT引擎&#xff0c;发现这个东西很好很强大。此为背景。 刚开始学习&#xff0c;在使用camera3D的时候&#xff0c;发现使用鼠标滚轮进行视角缩放的时候&#xff0c;网上有些内容不全&#xff0c;于是找了一下。其实很简单&#xff1a; Camera3D有个属性是siz…

普通二叉树 —— 最近公共祖先问题解析(Leetcode 236)

&#x1f3e0;个人主页&#xff1a;尘觉主页 文章目录 普通二叉树 —— 最近公共祖先问题解析&#xff08;Leetcode 236&#xff09;&#x1f9e0; 问题理解普通二叉树与 BST 的区别&#xff1a; &#x1f4a1; 解题思路关键思想&#xff1a;&#x1f4cc; 举个例子&#xff1a…

Dify 部署问题处理

Dify介绍 Dify 是一款开源的大语言模型(LLM) 应用开发平台。它融合了后端即服务&#xff08;Backend as Service&#xff09;和 LLMOps 的理念&#xff0c;使开发者可以快速搭建生产级的生成式 AI 应用。即使你是非技术人员&#xff0c;也能参与到 AI 应用的定义和数据运营过程…

《操作系统真相还原》——中断

可以毫不夸张的说&#xff0c;操作系统离不开中断 此时我们将中断处理程序放在了汇编文件中了&#xff0c;很显然我们不能很方便的编写中断处理程序&#xff0c;不如在汇编程序里调用c函数。 在这个感觉过可以在c语言中直接内联汇编完成这些。 定时器 将时钟中断的频率提高后…

腾讯位置商业授权沿途搜索服务开发指南

概述 通过本服务检索某段道路附近的POI信息&#xff0c;可配合路线规划&#xff0c;为用户提供沿途服务区、加油站等搜索功能。 注&#xff1a; 1、本服务属于高级付费服务&#xff0c;如需试用请提交商务合作开通服务试用。 2、本接口有大小限制&#xff0c;接口长度不能超…

内容中台的实施基石是什么?

标准化流程体系构建 在企业内容中台建设中&#xff0c;标准化流程体系是确保内容生产、管理和分发效率的核心框架。通过定义元数据规范、内容分类规则及跨部门协作机制&#xff0c;能够实现从内容创建到归档的全链路标准化运作。例如&#xff0c;Baklib作为支持团队协作与权限…

信息安全管理与评估2024山东卷WAF答案

需要其他赛题解析的可联系博主

[免费]微信小程序网上花店系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的微信小程序网上花店系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】&#xff0c;分享下哈。 项目视频演示 【免费】微信小程序网上花店系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…

定制开发开源AI智能名片驱动下的海报工厂S2B2C商城小程序运营策略——基于社群口碑传播与子市场细分的实证研究

摘要 本文聚焦“定制开发开源AI智能名片S2B2C商城小程序”技术与海报工厂业务的融合实践&#xff0c;探讨其如何通过风格化海报矩阵的精细化开发、AI技术驱动的用户体验升级&#xff0c;以及S2B2C模式下的社群裂变机制&#xff0c;实现“工具功能-社交传播-商业变现”的生态…

制作个人Github学术主页

1.fork一个模板 从模板网站Jekyll Themes fork一个模板&#xff0c;并在repository name里填入yourname.github.io 2.生成自己的site 按顺序点击以下按钮&#xff0c;修改Branch为master /root 然后点击save &#xff0c;等待一会后刷新&#xff0c;便会生成一个新的site。 3.…

无法访问公网或 DNS 解析失败怎么办?

当云服务器无法访问公网或DNS 解析失败时&#xff0c;可能会导致无法 ping 外网、不能下载软件或无法访问网站。下面是详细的排查和解决方法&#xff1a; 莱卡云 &#x1f9ed; 一、问题现象说明 问题表现无法访问公网ping 8.8.8.8 不通DNS 解析失败ping www.baidu.com 报错“…