Binder 2018 程序啪啪啪
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
- By init.rc
- 具体使用
- Demo
- https://github.com/qianjigui/android_system_service_example
- Server
- Start ServiceManager
- Start server for attaching service
- Client
- Client getService from ServiceManager
- Demo
文章目录 |
创建@
2012-12-13
最后修改@
2014-03-18