Binder机制

Binder

在理解Binder机制之前,需要知道Binder是做什么的,在进程之间通信称作IPC,那么Binder是进程通信的一种解决方案,因此是具有跨进程通信能力。

进程间通信

  • 管道
  • 信号量
  • Sokets
  • 共享内存
  • Binder

Binder与传统的IPC对比:

Binder 共享内存 Socket
性能 拷贝一次 无需拷贝 拷贝俩次
特点 基于C/S架构,易用性高 控制复杂 基于C/S架构,效率低,开销大
安全性 为每个App分配UID,支持实名和匿名 依赖上层协议,访问接入点是开放不安全 依赖上层协议,接入点是开放不安全

引入内存划分的概念,分为俩种:

  1. 用户空间:程序代码运行的地方
  2. 内核空间:内存代码运行的地方

为了保证安全它们之间是隔离的,即使用户的程序崩溃,内核也不受影响

传统IPC传输数据通信

  1. 发送数据
  2. 通过系统调用 copy_from_user 将数据从用户空间 copy 到内核缓存区【1次copy】
  3. 通过系统调用 copy_to_user 将数据从内核空间 copy 到用户空间【2次 copy】
  4. 接收数据
image-20210207144719173.png

Binder传输数据

Client / Service 架构中

  • Clent

  • FrameWork:ServiceManagerProxy 持有了 BinderProxy

  • Native:BpServiceManager 中的 BpBinder

  • 驱动Dve

  • Service

  • BnServiceManager:BBinder

  • ServiceMagerNative:Binder

通信步骤:

  1. Binder驱动在内核空间创建一个数据接收缓存区
  2. 建立内核缓存区和数据接收缓存区之间的映射MMAP
  3. 发送进程通过copy_from_user函数把数据拷贝到内核缓存区中。
  4. 相当与拷贝到内核缓存边映射到接收进程的用户空间Dev
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容