您当前的位置: 首页 > 
  • 3浏览

    0关注

    417博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

05.Binder系统:第6课第8节_Binder系统_驱动情景分析_transaction_stack机制_双向服务

江南才尽,年少无知! 发布时间:2019-04-03 14:37:17 ,浏览量:3

现在开始讲解在双向传输,使用transaction_stack机制的作用。 假设有三个进程p1,p2,p3分别提供S1,S2,S3服务,他们分别有自己的线程t,如下图: 在这里插入图片描述 假设t1线程需要使用p2服务,他会向t2线程发送数据,在t2线程发送数据发送数据的时候,又要使用到p3服务,会向t3线程发送数据,在t3线程处理的过程中,他又要回过头使用p1服务。

那么问题就来了,此时的t3线程应该发送数据给谁?或者说着t3把数据放到p1的binder_proc.todo链表,让p1使用新的线程t1’进行处理,还是把数据放到t1的binder_thread.todo,让t1线程处理。

大家想想那种更加节约资源?反正t1线程也处于休眠状态,我们可以让他做些事情。如果开一个新的t1‘进行处理,后面遇到类似的情况都会开一个新的线程,如果这种情况的次数发生多了,就会产生很多的线程,特别的浪费资源。

所以双向传输过程如下: p1的t1发出服务请求,处理的过程中,需要用到s1服务,他会发送数据给p1。反正p1发送数据之后,处于等待状态,所以使用t1来处理S1服务。这

在情景分析之前,我们回顾一下之前的知识,如下:

1.A向B发送数据BC_TRANSACTION
	TR通过from_parent入栈
2.B接收到BR_TRANSACTION
	TR通过to_parent入栈(与上面的使用同一个栈)
3.B进程处理完数据之后,会回复一个BC_REPLY
	 TR通过from_parent出栈,
	 TR通过to_parent出栈
4.A进程收到BR_REPLY(其不涉及到栈的操作)

下面我们进行情景分析 t1通过TR1发送给t2,t2通过TR2发送给t3,t3会通过TR3发送给谁呢? 在这里插入图片描述

1.首先由t1发送一个BC_TRANSACTION,t1的栈sp指向TR1.fromparent=NULL 2.t2收到一个BR_TRANSACTION,t2的栈sp指向TR2.to_parent=NULL。 3.t2紧接着发送一个BC_TRANSACTION,t2的栈sp指向TR2.fromparent就指向TR1.fromparent=NULL 4.t3收到一个BR_TRANSACTION,t3的栈sp指向TR2.to_parent=NULL,其要用到S1服务,会构造一个BC_TRANSACTION,发送给t1。

关注
打赏
1592542134
查看更多评论
立即登录/注册

微信扫码登录

0.0372s