本站支持尊重有效期内的版权/著作权,所有的资源均来自于互联网网友分享或网盘资源,一旦发现资源涉及侵权,将立即删除。希望所有用户一同监督并反馈问题,如有侵权请联系站长或发送邮件到ebook666@outlook.com,本站将立马改正
成员变量proc指向一个Binder实体对象的宿主进程。在Binder驱动程序中,这些宿主进程通过一个binder_proc结构体来描述。宿主进程使用一个红黑树来维护它内部所有的Binder实体对象,而每一个Binder实体对象的成员变量rb_node就正好是这个红黑树中的一个节点。如果一个Binder实体对象的宿主进程已经死亡了,那么这个Binder实体对象就会通过它的成员变量dead_node保存在一个全局的hash列表中。
由于一个Binder实体对象可能会同时被多个Client组件引用,因此,Binder驱动程序就使用结构体binder_ref来描述这些引用关系,并且将引用了同一个Binder实体对象的所有引用都保存在一个hash列表中。这个hash列表通过Binder实体对象的成员变量refs来描述,而Binder驱动程序通过这个成员变量就可以知道有哪些Client组件引用了同一个Binder实体对象。
成员变量internal_strong_refs和local_Strong_refs均是用来描述一个Binder实体对象的强引用计数,而成员变量local_weak_refs用来描述一个Binder实体对象的弱引用计数。当一个Binder实体对象请求一个Service组件来执行某一个操作时,会增加该Service组件的强引用计数或者弱引用计数,相应地,Binder实体对象会将其成员变量has_strong_ref和has_weak_ref的值设置为1。当一个Service组件完成一个Binder实体对象所请求的操作之后,Binder实体对象就会请求减少该Service组件的强用计数或者弱引用计数。Binder实体对象在请求一个Service组件增加或者减少强引用计数或者弱引用计数的过程中,会将其成员变量pending_strong_ref或者pending_weak_ref的值设置为1;而当该Service组件增加或者减少了强引用计数或者弱引用计数之后,Binder实体对象就会将这两个成员变量的值设置为0。
……