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

相关推荐
消失的旧时光-19438 天前
Binder 是如何贯穿 ART / Native / Kernel 的?
binder
灵感菇_8 天前
全面解析Android Binder机制
android·binder
刘信的csdn1 个月前
RK3568 Android11 使用AIDL添加Hal层binder通讯
binder·hal·aidl
tmacfrank1 个月前
Binder 预备知识
linux·运维·binder
李坤林1 个月前
Android Binder 详解(6) Binder 客户端的创建
android·binder
李坤林1 个月前
Android Binder详解【5】 ServiceManager
android·binder
李坤林1 个月前
Android Binder 详解(4) Binder 线程池
android·java·binder
菩萨摩诃萨1 个月前
面试中如何谈Binder?
binder
仪***沿2 个月前
探索三相光储充变流器的奇妙世界
binder
.豆鲨包2 个月前
【Android】Binder机制浅析
android·binder