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_server的todo链表

(6)唤醒test_server进程,然后在binder_thread_read中休眠

(17)被唤醒后把数据返回给用户空间

test_server进程:

用户态:

(8)取出数据,根据code调用哪个函数,并把参数给函数

(9)把返回值构造为数据

(10)调用ioctl来发送返回数据

内核态:

(7):被唤醒后把数据返回用户空间

(11)找到要回复的进程test_client

(12)把数据放入test_client的todo链表

(13)唤醒test_client进程

使用服务

构造数据(参数),格式:四字节全零+四字节字符串长度+字符串("weidongshan")

txn.code 表示的是哪个函数,就是个整数,为双方约定其代表某个函数

接着调用ioctl先写后读,把数据放入test_server的todo结构体,接着唤醒test_server,然后自身休眠
[ 1580.379989] test_client (1381, 1381), binder_thread_write : BC_TRANSACTION
[ 1580.386741] binder: 1381:1381 BC_TRANSACTION 9 -> 1373 - node 3, data beb20a5c-beb20a4c size 32-0
[ 1580.395634] test_client (1381, 1381), binder_transaction , print data :
[ 1580.402184] 0000: 00 . 00 . 00 . 00 . 0b . 00 . 00 . 00 . 77 w 00 . 65 e 00 . 69 i 00 . 64 d 00 .
[ 1580.411029] 0016: 6f o 00 . 6e n 00 . 67 g 00 . 73 s 00 . 68 h 00 . 61 a 00 . 6e n 00 . 00 . 00 .

[ 1580.419888] test_client (1381, 1381), binder_thread_read : BR_NOOP

test_server被唤醒后返回用户控件,取出code和参数后调用函数执行,得到返回值后构造BC_REPLY类型数据调用ioctl回复给test_client,
[ 1580.426103] test_server (1373, 1373), binder_thread_read : BR_TRANSACTION
[ 1580.432828] test_server (1373, 1373), binder_thread_read , print data :
[ 1580.439419] 0000: 00 . 00 . 00 . 00 . 0b . 00 . 00 . 00 . 77 w 00 . 65 e 00 . 69 i 00 . 64 d 00 .
[ 1580.448263] 0016: 6f o 00 . 6e n 00 . 67 g 00 . 73 s 00 . 68 h 00 . 61 a 00 . 6e n 00 . 00 . 00 .
[ 1580.457129] test_client (1381, 1381), binder_thread_read : BR_TRANSACTION_COMPLETE

//用户空间处理完数据后,把内核态保存数据的buffer释放掉
[ 1580.464710] test_server (1373, 1373), binder_thread_write : BC_FREE_BUFFER
[ 1580.471541] test_server (1373, 1373), binder_thread_write : BC_REPLY
[ 1580.477877] binder: 1373:1373 BC_REPLY 10 -> 1381:1381, data be857a5c-be857a4c size 4-0
[ 1580.485859] test_server (1373, 1373), binder_transaction , print data :
[ 1580.492455] 0000: 01 . 00 . 00 . 00 .
[ 1580.496109] test_client (1381, 1381), binder_thread_read : BR_NOOP
[ 1580.502282] test_server (1373, 1373), binder_thread_read : BR_NOOP

test_client收到BR_REPLY类型数据,返回数据1
[ 1580.508436] test_client (1381, 1381), binder_thread_read : BR_REPLY
[ 1580.514684] test_client (1381, 1381), binder_thread_read , print data :
[ 1580.521301] 0000: 01 . 00 . 00 . 00 .
[ 1580.524929] test_server (1373, 1373), binder_thread_read : BR_TRANSACTION_COMPLETE
[ 1580.532489] test_client (1381, 1381), binder_thread_write : BC_FREE_BUFFER
[ 1580.539345] test_server (1373, 1373), binder_thread_read : BR_NOOP
[ 1580.545510] test_client (1381, 1381), binder_thread_write : BC_RELEASE

9.4 Binder系统_驱动情景分析_服务使用过程的更多相关文章

  1. 9.2 Binder系统_驱动情景分析_服务注册过程

    1. 几个重要结构体的引入给test_server添加一个goodbye服务, 由此引入以下概念: 进程间通信其实质也是需要三要素:源.目的.数据,源是自己,目的用handle表示:通讯的过程是源向实 ...

  2. 9.3 Binder系统_驱动情景分析_服务获取过程

    4. 服务获取过程 test_client客户端: (1)在用户态先构造name=“hello”的数据(服务的名字是hello),调用ioctl发送数据给service_manager(handle= ...

  3. 9.5 Binder系统_驱动情景分析_transaction_stack机制

    参考文章:http://www.cnblogs.com/samchen2009/p/3316001.html test_server服务进程可能有多个线程,而在发送数据的时候handle只表示了那个进 ...

  4. 9.6 Binder系统_驱动情景分析_server的多线程实现

    当多个client对server发出请求的时候,如果server忙不过来的时候会创建多线程来处理请求 那么忙不过来由谁来判断? server进程有个binder_proc结构体,其里面有todo链表( ...

  5. Android系统--Binder系统具体框架分析(二)Binder驱动情景分析

    Android系统--Binder系统具体框架分析(二)Binder驱动情景分析 1. Binder驱动情景分析 1.1 进程间通信三要素 源 目的:handle表示"服务",即向 ...

  6. Android : 跟我学Binder --- (4) 驱动情景分析

    目录: Android : 跟我学Binder --- (1) 什么是Binder IPC?为何要使用Binder机制? Android : 跟我学Binder --- (2) AIDL分析及手动实现 ...

  7. 10.7 android输入系统_Dispatcher线程情景分析_Reader线程传递事件和dispatch前处理

    android输入系统C++最上层文件是com_android_serve_input_InputManagerService.cpp global key:按下按键,启动某个APP可以自己指定,修改 ...

  8. [RK3288][Android6.0] 系统按键驱动流程分析【转】

    本文转载自:http://blog.csdn.net/kris_fei/article/details/77894406 Rockchip的按键驱动位于 kernel/drivers/input/ke ...

  9. 一个简单web系统的接口性能分析及调优过程

    在测试一个简单系统接口性能压力时,压到一定数量,程序总是崩溃,查看相关机器相关数据时,CPU.内存.IO占用均不高,问题自然出现在其它地方先介绍下系统部件架构 Resin版本为:[root@local ...

随机推荐

  1. js---15深拷贝浅拷贝 原型链

    //&&得到的结果不是布尔类型,如果前面都是 true就执行最后一个,并返回最后一个表达式的值,前面有一个为false,后面不执行,返回前面表达式的值 var a = 3; var b ...

  2. Istio Service Mash管理微服务

    Istio Service Mash管理微服务 今天的文章通过Istio开源项目展示如何为Kubernetes管理的微服务提供可见性,弹性,安全性和控制. 服务是现代软件体系结构的核心.比起复杂庞大的 ...

  3. centos 6.7下安装rabbitmq 3.6.6过程

    准备,请确保有root权限或者sudo权限,不然不用继续看下去了. 1.erland的安装 首先测试一下是否已经安装了erlang,命令 rpm -qa | grep erlang 若没有安装,则 y ...

  4. 【习题 8-15 UVA - 1617】Laptop

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 贪心. 把所有的区间按照右端点为第一关键字,左端点为第二关键字升序排. 然后令now = a[i].second. (now即当前的 ...

  5. 洛谷——P2984 [USACO10FEB]给巧克力Chocolate Giving

    https://www.luogu.org/problem/show?pid=2984 题目描述 Farmer John is distributing chocolates at the barn ...

  6. ubuntu-虚拟机分辨率设定

    前两天下载的虚拟机,一直调节不好分辨率,就是说,全屏的时候,虚拟机要么是不能充满屏幕,要么就是在屏幕充满的时候,会出现显示不全,需要滚动条,给人的体验非常的不好.自己调节了好长时间都没有刚好合适的尺寸 ...

  7. Python-根据成绩分析是否继续深造

    案例:该数据集的是一个关于每个学生成绩的数据集,接下来我们对该数据集进行分析,判断学生是否适合继续深造 数据集特征展示 GRE 成绩 (290 to 340) TOEFL 成绩(92 to 120) ...

  8. 14.NPM 常用命令

    转自:http://www.runoob.com/nodejs/nodejs-npm.html PM提供了很多命令,例如install和publish,使用npm help可查看所有命令. NPM提供 ...

  9. beego的orm ,用的数据库sqlite3

    测试 beego的orm ,用的数据库sqlite3 1 package main import ( "fmt" "github.com/astaxie/beego/or ...

  10. JXNU 新生选拔赛

    1001 最小的数 Problem Description 定义一种正整数集合K,集合中有N个数,集合中元素Ki(1<=i<=N)是包含i个不同质因子的最小的数.因为Ki可能会很大,所以将 ...