理解Android系统Binder机制

2019-12-10 18:02:32于海丽

  ④使用binder_thread_read()函数来读取结果;

  ⑤在函数binder_parse()中实现数据解析工作。  

五、Binder驱动程序中的数据结构

1.binder_work。binder_work表示在binder驱动中进程要处理的工作项。

2.binder_node。binder_node用于定义Binder实体对象。Android系统中每一个Srevice组件在Binder驱动程序中都对应一个Binder实体对象。驱动中的Binder实体也叫做“节点”,你属于提供实体的进程;

3.binder_ref。binder_ref用于描述一个Binder引用对象。Android系统中每一个Client组件在Binder驱动程序中都对应一个Binder引用对象;

4.binder_ref_death。binder_ref_death是一个通知结构体。只要某进程订阅了某binder引用对应实体的死亡通知,那么binder驱动就会为该binder引用建立一个binder_ref_death通知结构体,将其保存在当前进程的对应binder引用结构体的death域中,即Binder引用对象将死亡通知注册到Binder驱动程序中。这里涉及到Binder的死亡通知机制,Binder的死亡通知机制具体指:如果Binder实体对象意外死亡,那么将会导致改Binder实体对象的引用变得无效,因而就需要在Binder实体对象死亡的时候通知到所有引用它的代理对象,从而在一定程度上预防和解决Binder饮用对象无效的问题;

5.binder_buffer。Binder_Buffer用于描述一个内核缓冲区,能够在进程之间传输数据;

6.binder_proc。binder_proc表示正在使用Binder进程通信机制的进程,能够保存调用Binder的各个进程或线程的信息,如线程ID、进程ID、Binder状态信息等;

7.binder_thread。binder_thread用于存储每一个单独的线程的信息,表示Binder线程池中的一个线程;

8.binder_transaction。binder_transaction用于中转请求和返回结果,并保存接收和要发送的进程信息;

9.binder_write_read。binder_write_read表示在进程之间的通信过程中传输的数据,数据包中有一个cmd域用于区分不同的请求;

10.BinderDriverCommandProtocol。结构体binder_write_read包含的命令在BinderDriverCommandProtocol中定义;

11.BinderDriverReturnProtocol。BinderDriverReturnProtocol中定义了读操作命令协议;

12.binder_ptr_cookie。binder_ptr_cookie表示一个Binder实体对象或Service组件的死亡接收通知;