binder ---Service Manager 简要图程

1、打开binder设备,驱动创建了一个binder_proc作为binder的上下文管理者。结构中threads树用来保存binder_proc进程 内用于处理用户请求的线程,它的最大数量由max_threads 来决定;node树成用来保存binder_proc进程内的Binder实体;r efs_by_desc树和refs_by_node树用来保存binder_proc进程内的Binder引用,即引用的其它进程的Binder实体, 它分 别用 两种方式来组织红黑树,一种是以句柄作来key值来组织,一种是以引用的实体节点的地址值作来key值来组织,它们都是 表示同一样东西。该结构并放在file的 private_data结 构中
2、映射128k的内存,驱动把进程的虚拟地址空间和内核虚拟地址空间映射到同一个物理页面
3、通知binder驱动它是守护进程,
a、创建了一个binder_thread结构表示当前运行的线程,其结构中的transaction_stack表示线程正在处理的事务,todo表示发往该线程的数据列表,return_error和 return_error2表示操作结果返回码,wait用来阻塞线程等待某个事件的发生,stats用来保存一些统计信息;并插入到proc->threads所表示的红黑树中去
b、创建一个struct binder_node,它表示一个binder实体,ptr和cookie成员变量分别表示这个Binder实体在用户空间的地址以及附加数据,并插入到proc->nodes红黑树中去
4、通知binder驱动它进入循环

5、进入循环,等待client请求.如果是阻塞方式,则一直会阻塞在其内核todo队列上有事务到来,非阻塞方式则跑出,然后重新进入,一直循环






流程图:

http://download.csdn.net/detail/new_abc/4754718


你可能感兴趣的:(binder ---Service Manager 简要图程)