9.11 Binder系统_分层】的更多相关文章

1.Binder系统过程分析,情景分析 server提供服务 (1)addService(服务名称,xxx)执行后会导致binder驱动在server的内核空间为服务创建一个binder_node结构体,并且会在service_manager内核空间创建一个binder_ref,其node参数指向server内核空间的binder_node,desc参数等于1,根据addService的次数递增,并且在service_manager的用户空间中的svclist链表上新建一个svcinfo结构体,…
1. 几个重要结构体的引入给test_server添加一个goodbye服务, 由此引入以下概念: 进程间通信其实质也是需要三要素:源.目的.数据,源是自己,目的用handle表示:通讯的过程是源向实现进程的“服务”发数据,handle是对“服务”的引用,在不同的进程里面handle不一样,即使多个进程对同一个进程的“服务”发数据,这些多个进程里面的handle可以也不一样 总结:handle是进程A对进程B提供的服务S的引用,进程A调用binder_call把handle传递给驱动,驱动根据h…
5. 服务使用过程 test_client进程: 用户态: (1)已结获得了“hello”服务,handle=1; (2)构造数据:code(那个函数)和函数参数 (3)发送ioctl后进入内核态,先写后读 (15)取出返回值 内核态: (4)binder_ioctl被调用,根据handle在binder_proc中根据refs_by_desc找到binder_ref,在根据node找到服务的binder_node结构体,在根据proc找到目的进程test_server (5)把数据放入test…
4. 服务获取过程 test_client客户端: (1)在用户态先构造name=“hello”的数据(服务的名字是hello),调用ioctl发送数据给service_manager(handle=0) (2)进入内核态后根据handle=0找到service_manger,把数据放入它的todo链表,唤醒service_manager进程,自己休眠 (5)在内核态被唤醒后返回handle=1给用户态,在用户态中得到handle=1,然后就可以根据handle来给服务发送数据了(传数据给服务的…
当多个client对server发出请求的时候,如果server忙不过来的时候会创建多线程来处理请求 那么忙不过来由谁来判断? server进程有个binder_proc结构体,其里面有todo链表(放有client发过来的数据),并且会唤醒等待在binder_proc.wait上的线程,如果有线程在wait上等待,表面server进程忙的过来:如果wait上空了,就表面server太忙了,驱动会向应用程序反馈 (1)驱动判断是否忙不过来 (2)驱动向APP发请求:创建新线程 (3)APP创建新…
参考文章:http://www.cnblogs.com/samchen2009/p/3316001.html test_server服务进程可能有多个线程,而在发送数据的时候handle只表示了那个进程 (1)发给谁?handle只表示了那个进程,数据是发给进程还是某个线程 一般数据放在binder_proc的todo链表,其会唤醒等待与binder_proc.wait上的空闲线程: 对于双向传输,则放在binder_thread.todo链表上,然后唤醒该线程(用transaction_sta…
android里:1个application, 有1个或多个activity(比如支付宝有:首页.财富.口碑.朋友.我的,这些就是activity)1个activity, 有1个window(每个activity都有一个显示界面window)1个window, 有1个decor(装饰/样式:全屏.有无标题等)1个decor, 有多个viewgroup/layout(指定layout区域放各种view)viewgroup/layout中, 有多个view 从上图可知Decor是view树状结构的根…
BZOJ_1916_[Usaco2010 Open]冲浪_分层图+拓扑排序+DP Description 受到秘鲁的马丘比丘的新式水上乐园的启发,Farmer John决定也为奶牛们建 一个水上乐园.当然,它最大的亮点就是新奇巨大的水上冲浪.超级轨道包含 E (1 <= E <=150,000)条小轨道连接着V (V <= 50,000)个水池,编号为1..V.每个小轨道必须按照特定的方向运行,不能够反向运行.奶牛们从1号水池出发,经过若干条小轨道,最终到达V号水池.每个水池(除了V号和…
eclipse调试Android自动化脚本的时候一直无法找到adb,遇到这么坑的问题,折腾死了,记录一下. mac os x10.11.2系统GUI程序(eclipse)无法读取~/.bash_profile下配置的环境变量. 需要用终端open /User/sun/tools/eclipse/eclipse启动,才会加载环境变量,手动启动则不加载.…
Android系统--Binder系统具体框架分析(二)Binder驱动情景分析 1. Binder驱动情景分析 1.1 进程间通信三要素 源 目的:handle表示"服务",即向实现该"服务"的进程发送数据:handle是"服务"的引用 int binder_call(struct binder_state *bs, struct binder_io *msg, struct binder_io *reply, uint32_t target,…