Android系统-进程-Binder1-概述

目录

引言:

一次拷贝

Binder一次通信过程

应用启动中的binder交互

C/S模式:

Binder COMMAND

BWR数据结构:


引言:

Android的binder是从openbinder发展过来的。包括了binder驱动,Native层,Java层。用经典问题作为对binder的理解之旅的起点。

为什么选择binder?

binder性能好,便捷,安全。

性能好,就是别人多次拷贝,binder只需要一次拷贝。

一次拷贝

一次拷贝怎么做到的?为什么少了一次拷贝呢?

别人:copy_from_user + copy_to_user

binder:copy_from_user + mmap映射,这里的关键就在于映射了,就是拷贝到了映射区就相当于拷贝到了对端了。

进程和内核虚拟地址映射到同一物理内存的操作是发生在数据接收端

拷贝一次是发生在数据发送端

虚拟进程地址空间vm_area_struct和虚拟内核地址空间vm_struct都映射到同一块物理内存空间

对于一次拷贝的概念有个比较直观的理解了。

Binder一次通信过程

怎么通信的呢?

binder的传输协议:
首先Client向Binder驱动写了BC_TRANSACTION
Binder驱动回复Client一个BR_TRANSACTION_COMPLETE表示已收到Client请求
Binder驱动发送BR_TRANSACTION指令给server进行处理,处理完成后就会返回BC_REPLY通知驱动,binder驱动收到Server端的BC_REPLY回复后,也会回复
BR_TRANSACTION_COMPLETE给到server同时回复BR_REPLY给Client,完成一次完整的通信流程。

有了通信过程的理解,再结合一个具体情境理解一下

应用启动中的binder交互

先准备几个概念:

C/S模式:

Client:BpBinder.transact()发送事务请求

Server:BBinder.ontransact()接收相应事务

Binder COMMAND

BINDER_WRITE_READ:binder读写交互场景,IPC.talkWithDriver

BINDER_SET_CONTEXT_MGR:servicemanager进程设置为context的管理者

BINDER_SET_MAX_THREADS::初始化ProcessState对象,open_Driver,主动调用ProcessState.setThreadPoolMaxThreadCount()

BINDER_VERSION:

BWR数据结构:

struct binder_write_read

write buff

read_buff

待续...

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/38975.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

光耦继电器:实现电气隔离的卓越选择

光耦继电器是一种常用的电子元件,用于实现电气隔离和信号传输。在工业控制、自动化系统和电力电子等领域,光耦继电器具有独特的特点和优势。本文将从可靠性、隔离性、响应速度和适应性等方面对光耦继电器的特点进行概述。 光耦继电器是一种典型的固态继电…

Mysql内储存JSON字符串,根据条件进行查询(包含多层级复杂JSON查询)

1.模糊查询json类型字段 存储的数据格式(字段名 people_json): {“name”: “zhangsan”, “age”: “13”, “gender”: “男”} 代码如下(示例): select * from table_name where people_json->$.n…

部署工业物联网可以选择哪些通信方案?

部署工业物联网有诸多意义,诸如提升生产效率,降低管理成本,保障生产品质稳定,应对长期从业劳动力变化趋势等。针对不同行业、场景,工业物联网需要选择不同的通信方案,以达到成本和效益的最佳平衡。本篇就简…

安全头响应头(三)​X-Content-Type-Options

一 X-Content-Type-Options响应头 说明:先写个框架,后续补充 思考:请求类型是 "style" 和 "script" 是什么意思? script标签 style StyleSheet JavaScript MIME type 文件扩展和Content-Type的映射关系 场景: 一个…

Mybatis 源码 ∞ :杂七杂八

文章目录 一、前言二、TypeHandler三、KeyGenerator四、Plugin1 Interceptor2 org.apache.ibatis.plugin.Plugin3. 调用场景 五、Mybatis 嵌套映射 BUG1. 示例2. 原因3. 解决方案 六、discriminator 标签七、其他1. RowBounds2. ResultHandler3. MapKey 一、前言 Mybatis 官网…

mysql主从复制搭建(一主一从)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言MySQL复制过程分为三部: 一、准备工作二、配置>主库Master三、配置>从库SlaveSlave_IO_Running: YesSlave_SQL_Running: Yes 四、测试至此&am…

8 | 美国航班数据分析

"在现代快节奏的生活中,航空旅行已经成为人们出行的重要方式之一。然而,航班的准时性一直以来都是旅客和航空公司关注的焦点。无论是商务出差还是休闲度假,乘客们都希望能够在既定的时间内安全、准时地到达目的地。而对于航空公司而言,准点运营不仅关乎乘客体验,还涉…

TCP的相关性质

文章目录 流量控制拥塞控制拥塞窗口 延迟应答捎带应答面向字节流粘包问题TCP的异常 流量控制 由于接收端处理数据的速度是有限的,如果发送端发的太快,那么接收端的缓冲区就可能会满。此时如果发送端还发数据,就会出现丢包现象,并…

轻量级自动化测试框架WebZ

一、什么是WebZ WebZ是我用Python写的“关键字驱动”的自动化测试框架,基于WebDriver。 设计该框架的初衷是:用自动化测试让测试人员从一些简单却重复的测试中解放出来。之所以用“关键字驱动”模式是因为我觉得这样能让测试人员(测试执行人员…

【Sklearn】基于线性判别法的数据分类预测(Excel可直接替换数据)

【Sklearn】基于线性判别法的数据分类预测(Excel可直接替换数据) 1.模型原理2.模型参数3.文件结构4.Excel数据5.下载地址6.完整代码7.运行结果1.模型原理 线性判别分析(Linear Discriminant Analysis,简称LDA)是一种经典的模式识别和分类方法,它的目标是找到一个投影,将…

Linux系列讲解 —— FTP协议的应用

简单介绍一下FTP文件传输协议在linux系统中的应用。 目录 0. 基本概念1. FTP Server1.1 安装FTP Server1.2 FTP Server开启和关闭1.3 查看FTP Server是否开启1.4 FTP服务器配置 2. FTP Client2.1 lftp2.2 ftp2.3 sftp2.4 文件资源管理器集成的ftp和sftp 3. ftp常用命令 0. 基本…

IDE的下载和使用

IDE 文章目录 IDEJETBRAIN JETBRAIN 官网下载对应的ide 激活方式 dxm的电脑已经把这个脚本下载下来了,脚本是macjihuo 以后就不用买了

Neo4j之SET基础

在 Neo4j 中,SET 语句用于更新节点或关系的属性。它允许你修改节点或关系的属性值,可以单独使用,也可以与其他查询语句(如 MATCH、CREATE、MERGE 等)一起使用。以下是一些使用 SET 语句的常见例子,以及它们…

深入源码分析kubernetes informer机制(四)DeltaFIFO

[阅读指南] 这是该系列第四篇 基于kubernetes 1.27 stage版本 为了方便阅读,后续所有代码均省略了错误处理及与关注逻辑无关的部分。 文章目录 client-go中的存储结构DeltaFIFOdelta索引 keyqueue push操作delta push 去重 queue pop操作 总结 client-go中的存储结构…

设计模式

本文主要介绍设计模式的主要设计原则和常用设计模式。 一、UML画图 1.类图 2.时序图 二、设计模式原则 1.单一职责原则 就是一个方法、一个类只做一件事; 2.开闭原则 就是软件的设计应该对拓展开放,对修改关闭,这在java中体现最明显的就…

什么是A股交易接口_(股票交易c接口)开发原理

A股交易接口是指用于与国内的证券交易所(上海证券交易所和深圳证券交易所)进行股票买卖交易的电子接口或软件系统。A股交易接口是金融机构、券商以及个人投资者的必备掌握操作技能之一,它提供了实时的股票行情、交易下单、撤单、查询账户信息…

基于Hadoop的表级监管

现状 大数据平台中,采用hadoop的方式存储数据,hdfs本质上是文件系统,而文件系统对数据的监管能力有限,但是数据安全领域问题日渐凸显,现目前,大数据平台一般以分层结构进行授权,但是对于一线开发人员而言,是能够接触到整个大数据平台中的所有表的,那么如何实现这样一…

yum install/update排除特定/某些包方式

1 什么是 yum? yum 代表 “Yellowdog Updater, Modified”。Yum 是用于 rpm 系统的自动更新程序和包安装/卸载器。 它在安装包时自动解决依赖关系。 2 什么是 rpm? rpm 代表 “Red Hat Package Manager”,它是一款用于 Red Hat 系统的功能…

PB:库管理函数

库管理函数 1、LibraryCreate() 功 能:创建一个空的PowerBuilder应用库,并可根据需要在创建应用库的同时添加库注解。 语 法:LibraryCreate ( libraryname{, comments } ) 参 数:libraryname:string类型,指定要创建应用库的名称,可以带上路径,不带路径时在当前目…

Docker本地镜像发布到阿里云

1. 本地镜像发布到阿里云 2. 镜像的生成方法 OPTIONS说明: -a :提交的镜像作者; -m :提交时的说明文字; 本次案例centosubuntu两个,当堂讲解一个,家庭作业一个,请大家务必动手,亲自实操。 docke…