简介
通过思维导图和相关分解,简单的介绍对Android系统的认知,方便搭建一套比较整体的Android基础框架。
本章主要介绍Android的Binder机制处理跨进程问题,其本质还是对共享内存的处理。
描述
- Binder
- 实现本质
- 内存共享
- 模型
- server
- transact
- replay
- 同步返回,挂起进程
- client
- transact
- replay
- 同步返回,挂起进程
- binder驱动
- Binder的核心
- 无硬件的驱动
- 实现
- open
- mmap
- 为用户虚拟空间开辟一个真正的物理内存空间
- 该物理内存映射到binder驱动的虚拟内存空间
- ioctl
- 操作的关键方法
- 读写
- 执行命令
- 操作的关键方法
- 物理内存
- 用户虚拟内存
- binder驱动的虚拟内存
- service manager
- 大管家
- 负责定位
- 职责类似DNS
- 根据名字获取IP
- 也是Binder server
- handle 0
- ServiceManagerProxy
- handle
- binder server的句柄地址
- 通过handle可以寻找到对应的server地址并映射为IBinder对象
- 并非相同进程时返回
- binder 对象
- 相同进程直接返回IBinder对象
- server
- AIDL
- 方便用户实现binder机制的文件
- 自动Binder相关的代码
- 包括 server、client的代理接口类等
- 重点概念
- ServiceManagerProxy
- 用于代理C/C++层ServerManager
- 方便java用户调用
- IBinder
- BpBinder的接口类
- 调用其transact等接口方法,执行操作
- BpBinder
- native层
- binder的调用者,在java层会转为IBinder使用
- ProcessState
- 进程唯一
- 封装了与Binder驱动操作的方法
- 提供IPC服务
- IPCThreadState
- 执行者
- transact,与binder driver进行交互
- 线程唯一
- waitForReponse
- talkWithDriver
- mIn
- mOut
- binder_ioctl
- 挂起调用者线程
- 等待回执
- 数据copy发生在此
- talkWithDriver
- BC_TRANSACTION的处理(ServiceManager.getService()流程)
- 寻找target_proc的node(target_node)
- 获取target_proc和target_thread
- todo 和 wait列表
- target_list = &target_thread ->todo
- target_wait = &target_thread->wait
- 生成一个binder_transaction
- 放入target todo列表
- 生成一个binder_work(tComplete)
- 用于说明现在有transaction还未完成
- 放到本线程的todo列表中
- 编写biander_transaction内容
- 获取t->buffer
- 就是为完成transaction而开辟的内存
- mmap
- 获取t->buffer
- 复制内容
- copy_from_user
- ServiceManagerProxy
- service manager getService
- 获取IBinder
- getService
- 实现本质
思维导图