Binder机制总结笔记

news2024/9/24 4:26:17

Binder机制总结笔记

  1. 什么是Binder?
    Binder的Android特有的IPC通信机制。Android的四大组件Activity、Service、Broadcast、ContentProvider,不同的App等都运行在不同的进程内,他们之间的通信都需要依靠Binder完成。因此Binder在整个Android系统都有着一个举足轻重的地位。

  2. Binder的架构如下:
    Binder采用的是C/S的架构方式。组成部分主要是client、server、Binder驱动、servicemanager。
    framework层只是一层封装,为了上层方便调用native层的操作。主要的处理是有native层通过ioctl与内核进行通讯。
    在这里插入图片描述

  3. Binder机制
    Binder机制主要是通过servicemanager进程代理,管理和注册服务。首先,服务器向servicemanager注册服务,这些服务最终会保存在内核中的binderproc列表中,同时servicemanager的servInfo中也会缓存一份。客户端需要和服务端进行通信时,首先通过sm获取服务端的引用,这些引用存储在servInfo中,拿到引用之后就可以将参数通过BinderProxy传到sm,然后通过系统调用copy_from_user传到内核中,此时客户端进入等待,内核将服务放到binderproc的TODO队列中,执行完之后通过copy_to_user拷贝到用户空间,然后BinderProxy会传给客户端。
    在这里插入图片描述

  4. binder驱动
    Android是基于linux内核的。因此Android需要遵循linux内存访问的机制。用户空间和内核空间交互的唯一方式就是系统调用。Android使用一系列系统调用使得用户空间和内核空间进行交互。binder驱动提供了用户空间一个进程和另一个进程使用binder通信的基础,是负责binder通信内核的模块。
    在这里插入图片描述

  5. binder进程和线程
    binder驱动中管理着一个全局的binderprocs链表,这个链表中的每一个binderproc结构都对应用户空间中的一个binder进程,每一个binder进程里面只有一个IProcessState对象,这是单例模式保证的。每个binder线程内部也只有一个IPCThreadState对象,也是单例保证的。binder驱动中也有与之相应的结构binder_thread,binderproc结构中的rb_root thread就记录所有binder进程中的binder_thread。
    每一个binder的server进程注册之后,内部都会有一个binder线程池,先注册一个binder的线程,之后server进程也可以注册新的线程,或者binder驱动检测到当前没有空闲的线程的时候,那就会在线程池中新注册一个线程。biner线程池都是有一个最大的线程限制数目,默认是16个线程。
    在这里插入图片描述

  6. servicemanager启动
    sm是读取init.rc配置文件启动的,通过调用binderOpen系统调用创建binderprocs链表,然后循环调用binderLooper不断处理共享内存中的数据。
    在这里插入图片描述

  7. servicemanager注册服务
    某个service注册服务,调用addService函数。sm通过BC_TRANSACTION将ADD_SERVICE传到内核中,binder驱动将事务添加到TODO 列表中,此时注册服务的线程waitForResponse进入等待。Binder驱动收到命令之后,向servicemanager的事务队列中插入一条事务,这个事务就是创建一个binder_node并且插入到binderprocs中。执行完之后BR_TRANSACTION命令通知sm执行完成,sm将已注册的服务添加到servInfo中,通过BR_REPLY唤醒等待的线程。
    在这里插入图片描述

  8. sm获取服务
    获取服务类似于注册服务的相反的过程。客户端通过getService函数获取服务,sm通过BC_TRANSACTION将CHECK_SERVICE的命令发给内核中,插入到sm的事务队列中,此时获取服务的队列进入等待。驱动收到的获取服务的命令之后,向sm发送BR_TRANSACTION查询已注册的服务,查到则返回,没有则再次查找。

  9. 完整的通信过程
    首先通过sm获取服务端的BinderProxy,通过BinderProxy将函数的参数和标识传递到内核中,Binder驱动会插入一条TODO事务,等执行之后,再将结果返回到用户空间,之后唤醒线程的等待,通信结束。
    在这里插入图片描述

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

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

相关文章

好用的ps滤镜插件Portraiture2024

Photoshop 是最常用到的综合性的设计工具,虽然PS一直在迭代升级,但是在细节功能上,PS总是无法完全满足全部所有的用户需求,今天coco玛奇朵推荐一个个截至目前最受欢迎的免费的PS插件,有了这些功能扩展的插件后PS如虎添…

OpenCV C++ 图像处理实战 ——《缺陷检测》

OpenCV C++ 图像处理实战 ——《缺陷检测》 一、结果演示二、缺陷检测算法2.1、多元模板图像2.2、训练差异模型三、图像配准3.1 功能源码3.1 功能效果四、多元模板图像4.1 功能源码五、缺陷检测5.1 功能源码六、源码测试图像下载总结一、结果演示

拓世大模型 | 立足行业所需,发力终端,缔造智能无限可能

蒸汽机的发明为人类工业革命揭开序幕,引领了近现代产业变革。众所周知,而今AI技术的革命性突破,站在了时代舞台的中心,特别是大模型的崛起,无疑是第四次产业革命的焦点,它的地位可与当年的“蒸汽机”相提并…

AndroidSDK下载及安装(Windows)

下载地址:https://www.androiddevtools.cn/ 找到SDK工具并下载安装 都是傻瓜式一键安装 除了注意安装路径应避免选择中文或特殊字符路径,应该没什么大问题。 下载安装Android SDK Android SDK Tools安装后,启动SDK Manager.exe:…

综合OA管理系统源码 OA系统源码

综合OA管理系统源码 OA系统源码 功能介绍: 编号:LQ10 一:系统管理 系统配置,功能模块,功能节点,权限角色,操作日志,备份数据,还原数据 二:基础数据 审批…

Linux-组管理和权限管理

一、组管理—基本介绍 在linux中的每个用户必须属于一个组,不能独立于组外。在linux中每个文件有所有者、所在组、其它组的概念。 1)所有者 2)所在组 3)其它组 4)改变用户所在的组 二、组管理—文件/目录所有者 1、查看文件或者目录的所有者和所在组的指令 所有…

文件加密,数据防泄密软件

文件加密和数据防泄密软件成为了保护信息安全的重要工具,它们可以有效地防止敏感数据的泄露和非法访问。 发展历史 文件加密和数据防泄密软件的发展历程可以追溯到上世纪90年代,当时随着互联网的普及和信息技术的不断发展,人们开始意识到信息…

考虑温度影响的vumat子程序在木材受火后强度分析中的应用

木结构在火灾作用下,木材的化学成分及物理特性会发生复杂的变化,导致其力学性能的改变,木构件承载能力降低。本文编写了考虑温度影响的木材本构vumat子程序,并对子程序的正确性进行了验证。 木材是一种复杂的各向异性复合材料&am…

JavaScript综合案例五

目录 一、实战案例:轮播图案例-完整版 代码实现 二、实战案例:tab栏切换 1.普通版本 代码实现 2.事件委托版本 代码实现 三、实战案例:表单全选反选 代码实现 四、实战案例:哔哩哔哩导航滑动 代码实现 五、实战案例&am…

win10安装Tensorflow(2.10-)使用最新cuda(12+),cudnn(8.9+)

# tensorflow在2.11版本后不再支持原生windows的GPU: https://blog.tensorflow.org/2022/09/whats-new-in-tensorflow-210.html# 1、首先,在windows安装好最新的GPU环境: https://blog.csdn.net/sinat_20174131/article/details/121781420?s…

可以实时监控屏幕的电脑监控软件

电脑已经成为了人们工作和生活不可或缺的工具。然而,这也带来了诸多安全问题。一些人可能会利用电脑进行不恰当的操作,如聊天、游戏、观看视频等,甚至会泄露公司的商业机密。 电脑监控软件的定义 电脑监控软件是一种用于监控电脑使用情况的软…

【CSDN 每日一练 ★★☆】【数学】字符串相乘

###【CSDN Daily Practice】【数学】字符串相乘 数学 模拟 题目 给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。 示例 示例 1: 输入: num1 “2”, num2 “3” 输出: “6” 示例 2: …

【SOPHON】算能盒子SE-16的C++模型转换

目录 ONNX转MLIR指定模型的预处理过程转换结果 本文以 arcface 为例, 介绍如何编译迁移一个onnx模型至TPU平台运行。 有疑问具体可参考 TPU-MLIR ONNX转MLIR 如果模型是图片输入, 在转模型之前我们需要了解模型的预处理。如果模型用预处理后的npz文件做输入, 则不需要考虑预处…

01. 嵌入式与人工智能是如何结合的?

CPU是Arm A57的 GPU是128cuda核 一.小车跟踪的需求和设计方法 比如有一个小车跟踪的项目。 需求是:小车识别出罪犯,然后去跟踪他。方法:摄像头采集到人之后传入到开发板,内部做一下识别,然后控制小车去跟随。在人工智…

Linux ———— 管理磁盘

(一)MBR硬盘与GPT硬盘 硬盘按分区表的格式可以分为MBR硬盘与GPT硬盘两种硬盘格式。 MBR 硬盘:使用的是旧的传统硬盘分区表格式,其硬盘分区表存储在MBR(Master Boot Record,主引导区记录)内。MBR位于…

为什么引入偏向锁、轻量级锁,介绍下升级流程

Synchronized Synchronized 在 jdk1.6 版本之前,是通过重量级锁的方式来实现线程之间锁的竞争。之所以称它为重量级锁,是因为它的底层底层依赖操作系统的 Mutex Lock 来实现互斥功能。(如图)Mutex 是系统方法,由于权限…

PN7727 集成驱动及四个开关管的无线充电发射端功率芯片 20W无线发射功率

PN7727是一款用于无线充电的智能功率芯片该芯片集成了驱动及四颗高效功率级场效应管内置自举高压PMOS和5V/50mA LDO,具备自适应死区功能。 该芯片集成了欠压保护、过温保护等功能。芯片的两个输入管脚PWM1和PWM2兼容5V和3.3v信号控制,具有良好的…

小黑子—spring:第一章 Bean基础

spring入门1.0 一 小黑子对spring基础进行概述1.1 spring导论1.2 传统Javaweb开发困惑及解决方法1.3 三大的思想提出1.3.1 IOC入门案例1.3.2 DI入门案例 1.4 框架概念1.5 初识spring1.5.1 Spring Framework 1.6 BeanFactory快速入门1.7 ApplicationContext快速入门1.8 BeanFact…

浅谈智慧空开在某市科技馆项目的应用-安科瑞 蒋静

【摘要】:ASCB1系列智能微型断路器是安科瑞电气股份有限公司全新推出的智慧用电产品,产品由智能微型断路器与智能网关两部分组成,可用于对用电线路的关键电气因素,如电压、电流、功率、温度、漏电、能耗等进行实时监测&#xff0c…