Binder

Introduction

  • 一种进程间通信机制IPC
  • 一种类似于COM和CORBA分布式组件架构
  • 提供远程过程调用(RPC)功能
  • 核心组件便是Binder驱动程序了,Service Manager提供了辅助管理的功能,Client和Server正是在Binder驱动和Service Manager提供的基础设施上,进行Client-Server之间的通信

Resources

Feature

  • 可靠性
    • 资源稀缺的环境下
  • 传输性能
    • 共享内存 0次数据copy
    • Binder 1次数据copy
    • Socket/管道/消息队列 2次数据copy
  • 安全性
    • 为发送发添加UID/PID身份,既支持实名Binder也支持匿名Binder

面向对象的 Binder IPC

  • RPC进程间方法调用

通信模型

  • 角色
    • Server,Client,ServiceManager(以后简称SMgr)以及驱动
  • Binder 驱动
    • 实现方式和设备驱动程序是一样的:它工作于内核态,提供open(),mmap(),poll(),ioctl()等标准文件操作,以字符驱动设备中的misc设备注册在设备目录 /dev下,用户通过/dev/binder访问该它。
    • Care
      • 通信建立
      • 进程间binder传递
      • Binder引用计数管理
      • 数据包在进程之间的传递和交互
  • ServiceManager 与实名Binder
    • Register Service
    • Broadcast
  • Client 获得实名Binder的引用
    • Get service by name
  • 匿名 Binder
    • Not register
    • 私密通道

Binder 协议

  • 基本格式是(命令+数据),使用ioctl(fd, cmd, arg)函数实现交互

Binder 的表述

  • Client
  • Server
  • ServiceManager
  • Driver
  • File
  • Data Transfer

Binder 内存映射和接收缓存区管理

  • mmap
    • Sender
    • Receiver
  • Memory Pool
    • 最佳匹配算法

Binder 接收线程管理

  • Create many threads at first
  • Block for getting

数据包接收队列与(线程)等待队列管理

tags: IPC

整体实现结构

  • 在init.rc中以servicemanager启动
    • 整个Android System_Server的binder支持来源于此
    • 可以只启动servicemanager进行binder操作测试
  • Startup
    • By init.rc
      • servicemanager
      • dm_agent_binder
      • nvram_backup_binder
      • nvram_agent_binder
    • by kthreadd
      • binder_watchdog
      • binder
  • 具体使用
    • Demo
      • https://github.com/qianjigui/android_system_service_example
    • Server
      • Start ServiceManager
      • Start server for attaching service
    • Client
      • Client getService from ServiceManager