Android系统-进程-Binder1-概述

news2024/11/24 1:15:43

目录

引言:

一次拷贝

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.coloradmin.cn/o/868654.html

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

相关文章

【Matlab智能算法】RBF神经网络-遗传算法(RBF-GA)函数极值寻优——非线性函数求极值

上一篇博客介绍了GRNN-GA:GRNN神经网络遗传算法(GRNN-GA)函数极值寻优——非线性函数求极值,神经网络用的是GRNN神经网络,RBF神经网络(径向基函数神经网络)和GRNN神经网络有相似之处。本篇博客将GRNN神经网络替换成RBF…

安装istio和部署实例以及仪表盘

安装Istio 接下来我们将介绍如何在 Kubernetes 集群中安装 Istio,这里我们使用的是最新的 1.10.3 版本。 下面的命令可以下载指定的 1.10.3 版本的 Istio: ➜ ~ curl -L https://istio.io/downloadIstio | ISTIO_VERSION1.10.3 sh -如果安装失败,可以…

SolidWorks不能使用选择如允许此选择将生成有冲突的前后关系

SolidWorks不能使用选择如允许此选择将生成有冲突的前后关系 1 SolidWorks不能使用选择如允许此选择将生成有冲突的前后关系 1 SolidWorks不能使用选择如允许此选择将生成有冲突的前后关系 https://www.swrjzxw.com/1556.html SolidWorks装配体时 显示 不能使用选择如允许此选…

Linux 使用gdb调试C程序

一、gdb的一些基础命令 l:显示代码 l n:跳转到当前代码页的第n行的代码 l filename.c :n:跳转到filename.c文件的第n行代码 b 行号:加断点 info break:查看断点信息 delete 断点编号:删除断点 …

力扣 518. 零钱兑换 II

题目来源:https://leetcode.cn/problems/coin-change-ii/description/ C题解(来源代码随想录): 这是一道典型的背包问题,一看到钱币数量不限,就知道这是一个完全背包。但本题和纯完全背包不一样&#xff0c…

天津大数据培训机构哪家好?大数据必备知识

随着我国互联网IT行业的发展,我们步入了大数据时代,现在市场上急需大量的大数据专业人才,发展空间大,从业范围广,学习大数据专业对未来还是很有帮助的。今天小编来带大家了解一下大数据的知识和学习方式,作…

Pygame 入门教程

1. Pygame简介 Pygame是一个基于Python的游戏开发库,它提供了一系列的工具和接口,使开发人员能够轻松地创建各种类型的游戏,包括2D游戏和简单的3D游戏。 在开始学习Pygame之前,您需要先安装Pygame库。您可以通过以下命令在命令行…

分布式定时任务系列5:XXL-job中blockingQueue的应用

传送门 分布式定时任务系列1:XXL-job安装 分布式定时任务系列2:XXL-job使用 分布式定时任务系列3:任务执行引擎设计 分布式定时任务系列4:任务执行引擎设计续 Java并发编程实战1:java中的阻塞队列 引子 这篇文章的…

linux下查看谁在用显卡

一般查看显卡的使用情况使用的命令为 nvidia-smi但是这个只能输出显卡的占用及进程,看不到谁在用 信息如下 但是可以借助上面的PID信息,查看对应的进程是谁调用的, 命令为: ps -f -p 4417其中4417就是上图中的其中一个PID 输出…

snapshotter not loaded: overlayfs: invalid argument

测试containerd是否能创建和启动成功 执行如下命令拉取镜像并创建容器: 拉取容器 ctr i pull docker.io/library/nginx:alpine 创建容器 ctr c create --net-host docker.io/library/nginx:alpine nginx ctr task start -d nginx查看Containerd服务启动信息&…

【Freertos基础教程】任务管理之基本使用

文章目录 前言一、freertos任务管理是什么?二、任务管理涉及到的一些概念1.任务状态2.优先级3.栈(Stack)4.事件驱动5.协助式调度(Co-operative Scheduling) 二、任务的基本操作1.创建任务什么是任务 2.创建任务3.任务的删除4.任务的调度3.简单示例 总结 前言 本fre…

2023.8.12号论文阅读

文章目录 TriFormer: A Multi-modal Transformer Framework For Mild Cognitive Impairment Conversion Prediction摘要本文方法实验结果 SwIPE: Efficient and Robust Medical Image Segmentation with Implicit Patch Embeddings摘要本文方法实验结果 TriFormer: A Multi-mod…

【杨氏矩阵——(详细解法)】

杨氏矩阵💕 题目🕵️ 思路展示🤯 假设在二维数组arr中查找某个数input: 查找思路🧐 利用杨氏矩阵(矩阵的每行从左到右是递增的,矩阵从上到下是递增的)的特性,我们可以&a…

CentOS7连接网络

1.下载centos7镜像文件 2.安装centos7 3.修改网卡,ens33. 注意: 这里使用的是dhcp,设置IPADDR192.168.31.64一方面是为了后面使用crt或者MobaXterm连接,另一方面它和windows电脑的网卡要一致.这样才可以连接到网络.win r,输入cmd,打开命令窗口输入ipconfig.可以看到IPv4: 102…

Pytorch深度学习-----完整神经网络模型训练套路

系列文章目录 PyTorch深度学习——Anaconda和PyTorch安装 Pytorch深度学习-----数据模块Dataset类 Pytorch深度学习------TensorBoard的使用 Pytorch深度学习------Torchvision中Transforms的使用(ToTensor,Normalize,Resize ,Co…

【mysql】—— 表的约束

目录 序言 (一)空属性 (二)默认值 (三)列描述 (四)zerofill (五)主键 (六)自增长 (七)唯一键 &#…

git命令使用

君子拙于不知己,而信于知己。——司马迁 清屏:clear 查看当前面板的路径:pwd 查看当前面板的文件:ls 创建文件夹:mkdir 文件夹名 创建文件:touch 文件名 删除文件夹:rm -rf 文件夹名 删除文件:r…

【双指针_盛最多水的容器_C++】

题目解析 盛最多水的容器 算法原理 向内枚举: weight一定会减小 height不是不变就是减小要求的是盛水最多的容器,那么这些枚举情况就不需要。 拿比较小的数去向内枚举,v一直在减小,所以说直接排除 编写代码 class Soluti…

【rust/egui】(一)从编译运行template开始

说在前面 rust新手,egui没啥找到啥教程,这里自己记录下学习过程环境:windows11 22H2rust版本:rustc 1.71.1egui版本:rust windows安装参考:这里本文默认读者已安装相关环境(git、vscode等) 关于egui egui …

[数据集][目标检测]钢材表面缺陷目标检测数据集VOC格式2279张10类别

数据集格式:Pascal VOC格式(不包含分割路径的txt文件和yolo格式的txt文件,仅仅包含jpg图片和对应的xml) 图片数量(jpg文件个数):2279 标注数量(xml文件个数):2279 标注类别数:10 标注类别名称:["yueyawan",&…