系统情景源代码笔记_binder机制
来源:互联网 发布:asm算法源码 编辑:程序博客网 时间:2024/06/05 09:31
Binder采用C/S通信方式.
做为程序员 我们需要知道如何编写合适的Binder接口,即如何使用binder.
第一部分 原理:
图解:
->的意思是: open mmap ioctl.
ioctl: 设备驱动程序中对设备的I/O通道进行管理的函数。
所谓对I/O通道进行管理,就是对设备的一些特性进行控制,例如串口的传输波特率、马达的转速等等。
client进程 (发送数据) -> binder驱动程序(创建一个引用对象) -> 查询server manager(本身也是组件)中的server组件的binder本地对象 -> 建立通信
各个binder对象解释:
1.binder代理对象(BPbinder) 在用户空间创建,运行在client进程中.
2.binder本地对象(Bbinder) 在用户空间中创建,运行在server进程中.
3.binder引用对象(binder_ref)由驱动程序创建,并被用户空间中的binder代理对象所引用.
4.binder实例(binder_node) 由驱动程序创建,并被驱动程序中的引用对象所引用(可以由多个引用对象指向同一实例)
同一个server进程可以提供多个组件(server组件)来为 client进程提供服务.
同时,一个client进程可以向多个server进程请求服务.(需要多个Bpbinder代理)
每一个进程都维护了一个Binder线程池,所以 server进程可以并发地提供服务,client进程可以并发地发送请求.
每一个server组件在binder驱动程序中都对应一个binder实例(binder_node)。这个实例存在Binder驱动程序中.(进程中以引用的形式存在?).
是的 server进程中也有一个binder本地实例,该实例最终处理client进程发过来的数据
server组件中保存了binder的引用(binder_node的引用).通过该引用可以找到binder驱动程序中的binder实例,这个实例又能去访问一个server组件.
每一个client组件在binder驱动程序中都对应一个binder引用对象! 描述client在内核中的状态.
每一个binder实例都维护了一个HASH表,谁引用我 我就保存谁的引用对象.binder驱动程序通过句柄值(desc)找到对应的binder引用对象.
当server组件死亡时,binder驱动程序 通过server死亡组件的binder引用找到binder驱动程序中对应的binder实例,
通过该实例的refs找到所有引用该实例的client进程,最后binder驱动将binder_ref_death结构体发到client的队列中去等待client处理.
- 系统情景源代码笔记_binder机制
- Android系统源代码情景分析笔记00
- Binder进程间通信机制概述(Android系统源代码情景分析学习笔记)
- Android系统源代码情景分析
- Android系统源代码情景分析
- Binder系统中的数据结构(Android系统源代码情景分析学习笔记)
- Android系统源代码情景分析:基础知识
- Android系统源代码情景分析:基础知识
- Android系统源代码情景分析之基础知识
- Android系统源代码情景分析:基础知识
- Android系统源代码情景分析:基础知识
- Android系统源代码情景分析:基础知识
- Android系统源代码情景分析:基础知识
- Android系统源代码情景分析:基础知识
- Android系统源代码情景分析:基础知识 .
- Android系统源代码情景分析:基础知识 .
- Android系统源代码情景分析:基础知识
- Android系统源代码情景分析:基础知识
- js继承例子
- iOS开发核心语言 Objective C —— 语言简介及特性
- Java内存结构模型
- git的repository如果太大的话怎么clone
- C++(3)标准库类型
- 系统情景源代码笔记_binder机制
- hdoj-1134-Game of Connections【卡特兰数】
- Android Service完全解析,关于服务你所需知道的一切(上)
- bzoj 2821
- 字符串对象总结
- Oracle中当前用户使用另一用户数据库表的方法
- eclipse报错lib32stdc++6
- LaTex: ! LaTeX Error: Unknown graphics extension: .eps 出错处理
- 多属性运动(json)