Android-Binder基本原理

news2024/11/24 12:40:16

一、进程角度看IPC机制

在Android系统中,每个进程只能运行在自己所拥有的虚拟地址空间。例如,一个4GB的虚拟地址空间,包含3GB的用户空间和1GB的内核空间,内核空间的大小可以通过参数配置进行调整。两个进程之间的用户空间是彼此独立的,但内核空间是可共享的。Server 进程与 Client 进程之间就是利用共享的内核空间进行通信的,Server 端与 Client 端主要使用 ioctl 等方法跟内核空间的驱动进行交互。

 二、Binder原理

2.1 使用Binder的优点

在传统的Linux中存在多种IPC的方式,例如SystemV、管道、Socket等。但是Android系统没有大量采用原有的技术方式,而是开发了 Binder 并在系统中大量使用。主要原因有如下几点:

1.性能方面

  • 跨进程通讯中,只有socket支持Client-Server的通信方式,但是socket作为一款通用接口,其传输效率低,开销大,主要用在跨网络的进程间通信和本机上进程间的低速通信。
  • 消息队列和管道采用存储-转发方式,即数据先从发送方缓存区拷贝到内核开辟的缓存区中,然后再从内核缓存区拷贝到接收方缓存区,至少有两次拷贝过程。
  • 共享内存虽然无需拷贝,但控制复杂,难以使用。
  • 广泛地使用跨进程通信对通信机制的性能有严格的要求,Binder相对于传统的Socket方式,有更高的性能,它只需要1次数据拷贝。

2.安全方面

  • 首先传统IPC的接收方无法获得对方进程可靠的UID和PID(用户ID进程ID),从而无法鉴别对方身份。Android为每个安装好的应用程序分配了自己的UID,故进程的UID是鉴别进程身份的重要标志。使用传统IPC只能由用户在数据包里填入UID和PID,但这样不可靠,容易被恶意程序利用。可靠的身份标记只有由IPC机制本身在内核中添加。其次传统IPC访问接入点是开放的,无法建立私有通道。比如命名管道的名称,systemV的键值,socket的ip地址或文件名都是开放的,只要知道这些接入点的程序都可以和对端建立连接,不管怎样都无法阻止恶意程序通过猜测接收方地址获得连接。

3.是否易用

  • Binder使用面向对象的设计,基于C/S架构,进行一次远程调用和直接调用本地调用一样,使用方便。并且Binder驱动通过引用计数法实现了管理跨进程传递的代理对象的生命周期。

基于以上原因,Android需要建立一套新的IPC机制来满足系统对通信方式,传输性能和安全性的要求,这就是Binder。Binder基于Client-Server通信模式,传输过程只需一次拷贝,为发送方添加UID/PID身份,既支持实名Binder也支持匿名Binder,安全性高。

2.2 Binder架构

Binder采用 C/S 架构,其中的角色主要包括Client、Server、ServiceManager和Binder驱动。

  • Client进程:使用服务的进程。
  • Server进程:提供服务的进程。
  • ServiceManager进程:ServiceManager的作用是将字符形式的Binder名字转化成Client中对该Binder的引用,使得Client能够通过Binder名字获得对Server中Binder实体的引用。
  • Binder驱动:驱动负责进程之间Binder通信的建立,Binder在进程之间的传递,Binder引用计数管理,数据包在进程之间的传递和交互等一系列底层支持。

系统首次启动 ServiceManager 后,当 Client 和 Server 通信时都需要先获取 ServiceManager 接口。因此无论是注册服务还是获取服务,都需要 ServiceManager,需要主要的是此处的 ServiceManager 是指 Native 层的 ServiceManager(C++)。

1.注册服务:Server 进程要先注册 Service 到 ServiceManager。该过程,Server是客户端,ServiceManager 是服务端。

2.获取服务:Client 进程使用某个 Service 前,需要先向 ServiceManager 中获取相应的 Service。该过程,Client 是客户端,ServiceManager 是服务端。

3.使用服务:Client 根据获得的 Service 信息建立与 Service 所在的 Server 进程通信的通路,之后就可以与 Service 交互了。该过程:Client 是客户端,Server 是服务端。

2.3 Binder的工作流程

  1. Server 进程向 ServiceManager 注册,告诉 ServiceManager 我是谁,我有什么,我能做什么。假如 Server 进程有一个 computer 对象,这个对象有个add方法。这时映射关系表就生成了。
  2. Client 进程向 ServiceManager 查询,我要调用 Server 进程的 computer 对象的 add 方法,这时候 Binder 驱动就开始发挥他的作用了。当向 ServiceManager 查询完毕,Binder 驱动将 computer 对象转换成了 computerProxy 对象,并转发给了 Client 进程,因此,Client 进程拿到的并不是真实的 computer 对象,而是一个代理对象,即 computerProxy 对象。很容易理解这个 computerProxy 对象也是有 add 方法。
  3. 当 Client 进程调用 add 方法,这个消息发送给 Binder 驱动,这时驱动发现,原来是computerProxy,那么 Client 进程应该是需要调用 computer 对象的 add 方法的,这时驱动通知 Server 进程,调用你的 computer 对象的 add 方法,将结果给我。然后 Server 进程就将计算结果发送给驱动,驱动再转发给 Client 进程,最终 Client 进程拿到了计算结果。

2.4 Binder的线程管理

  • 每个 Binder 的 Server 进程会创建很多线程来处理 Binder 请求,而真正管理这些线程并不是由这个 Server 端来管理的,而是由 Binder 驱动进行管理的。
  • 一个进程的 Binder 线程数默认最大是 16,超过的请求会被阻塞等待空闲的 Binder 线程。理解这一点的话,你做进程间通信时处理并发问题就会有一个底,比如使用 ContentProvider 时(又一个使用 Binder 机制的组件),你就很清楚它的CRUD(创建、检索、更新和删除)方法只能同时有 16 个线程在跑。

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

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

相关文章

如何开发一个免费的App

开发一个免费App意味着能够在项目启动初期,以更低成本的方式进行业务的迭代和市场化验证。 互联网发展到2023年,尤其在生成式AI及大模型技术“跃进式”增长的背景下,一个创新式商业模式的起步变得异常艰难。但如果用好工具,那么不…

【网络安全】—计算机网络基础

文章目录 网络必备基础物理层数据链路层与交换机网络模型OSI/TCP对等传输虚拟局域网VLAN静态路由与配置网络地址转换NAT访问控制列表ACLIP协议与IP地址分类子网掩码网关子网划分总结 计算机网络是指将地理位置不同的、功能独立的多台计算机通过通信线路连接起来,以功…

前端基础Vue项目中的插槽使用

概念 简单理解就是组件内部留一个或多个的插槽位置&#xff0c;可供组件传对应的模板代码进去。插槽的出现&#xff0c;让组件变的更加灵活。 1. 匿名插槽 父组件 <son><p>我是父组件通过匿名插槽传输的内容</p></son> 子组件 <template><di…

透过清澈的眼眸:新生儿视力检测的重要性与留意事项

引言&#xff1a; 新生儿的视力发展是其整体感知和认知能力的基础。因此&#xff0c;进行新生儿视力检测是保障他们健康成长的关键一步。本文将深入探讨新生儿视力检测的重要性&#xff0c;并提供父母在这一过程中需要留意的关键事项&#xff0c;以确保宝宝在视觉方面的正常发…

50ms时延工业相机

华睿工业相机A3504CG000 参数配置&#xff1a; 相机端到端理论时延&#xff1a;80ms 厂家同步信息&#xff0c;此款设备帧率上线23fps&#xff0c;单帧时延&#xff1a;43.48ms&#xff0c;按照一图缓存加上传输显示的话&#xff0c;厂家预估时延在&#xff1a;80ms 厂家还有…

2018年第七届数学建模国际赛小美赛C题共享单车对城市交通的影响解题全过程文档及程序

2018年第七届数学建模国际赛小美赛 C题 共享单车对城市交通的影响 原题再现&#xff1a; 共享自行车改变了许多城市的交通状况&#xff0c;许多大城市引入共享自行车来解决交通问题。我们需要定量评估共享自行车对城市交通的影响&#xff0c;以及相关的经济、社会和环境影响。…

人工智能辅助下的人工心脏:未来医疗的奇迹

导言 人工智能在医学领域的应用不断创新&#xff0c;其中人工心脏作为医疗工程的重要方向&#xff0c;将为心血管疾病患者带来新的治疗可能性。本文将深入研究人工智能辅助下的人工心脏技术&#xff0c;其原理、应用以及对未来医疗的影响&#xff0c;探讨人工心脏的发展历程、面…

七轴开源协作机械臂myArm视觉跟踪技术!

引言 ArUco标记是一种基于二维码的标记&#xff0c;可以被用于高效的场景识别和位置跟踪。这些标记的简单性和高效性使其成为机器视觉领域的理想选择&#xff0c;特别是在需要实时和高精度跟踪的场景中。结合机器学习和先进的图像处理技术&#xff0c;使用ArUco标记的机械臂系统…

安卓自动化 APP:轻松关闭任意开屏广告 | 开源日报 No.116

gkd-kit/gkd Stars: 8.7k License: GPL-3.0 基于无障碍 高级选择器 订阅规则的自定义屏幕点击 APP&#xff0c;主要功能包括实现跳过任意开屏广告、关闭应用内部弹窗广告以及一些快捷操作&#xff0c;如微信电脑登录自动同意和领取红包等。其核心优势和特点包括&#xff1a;…

[Ray Tracing in One Weekend] 笔记

前言 本文参照自raytracing in one weekend教程&#xff0c;地址为&#xff1a;https://raytracing.github.io/books/RayTracingInOneWeekend.html 什么是光线追踪&#xff1f; 光线追踪模拟现实中的成像原理&#xff0c;通过模拟一条条直线在场景内反射折射&#xff0c;最终…

【深度学习目标检测】十、基于yolov5的火灾烟雾识别(python,目标检测)

YOLOv5是目标检测领域一种非常优秀的模型&#xff0c;其具有以下几个优势&#xff1a; 1. 高精度&#xff1a;YOLOv5相比于其前身YOLOv4&#xff0c;在目标检测精度上有了显著的提升。YOLOv5使用了一系列的改进&#xff0c;如更深的网络结构、更多的特征层和更高分辨率的输入图…

失业无忧!掌握这四个网站,年收入10-20万!

大家好&#xff01;在职场中&#xff0c;失业可能是每个人都会面临的一种情况。当然&#xff0c;失业并不是终点&#xff0c;而是重新出发的起点。在这个充满机遇的数字时代&#xff0c;利用网络资源来提升自己是再合适不过了。今天&#xff0c;我将介绍四个非常有用的网站&…

patchless amsi学习(下)

patchless amsi 代码参考&#xff1a;https://gist.github.com/CCob/fe3b63d80890fafeca982f76c8a3efdf 解读代码可以从函数入口开始 setupAMSIBypass这个函数前面主要是获取amsiScanBuffer的地址&#xff0c;随即注册了一个veh异常。 然后通过调用GetThreadContext获取到了…

解决docker拉取镜像报错:Error response from daemon: Get “https://registry-1.docker.io/v2/“: dial tcp

1、问题&#xff1a;今天做完一个新项目&#xff0c;搭建了一个新的虚拟机&#xff0c;打算使用docker来搭建各种环境&#xff0c;发现拉取镜像报错 2、报错信息&#xff1a;Error response from daemon: Get "https://registry-1.docker.io/v2/": dial tcp 如下&am…

我从阿里云学到的返回值处理技巧

作者简介&#xff1a;大家好&#xff0c;我是smart哥&#xff0c;前中兴通讯、美团架构师&#xff0c;现某互联网公司CTO 联系qq&#xff1a;184480602&#xff0c;加我进群&#xff0c;大家一起学习&#xff0c;一起进步&#xff0c;一起对抗互联网寒冬 阿里云CosmoController…

【办公软件】C# NPOI 操作Excel 案例

文章目录 1、加入NPOI 程序集&#xff0c;使用nuget添加程序集2、引用NPOI程序集3、设置表格样式4、excel加载图片5、导出excel 1、加入NPOI 程序集&#xff0c;使用nuget添加程序集 2、引用NPOI程序集 private IWorkbook ExportExcel(PrintQuotationOrderViewModel model){//…

算法通关村第十关—快速排序(青铜)

快速排序 快排的基本过程 快速排序是将分治法运用到排序问题的典型例子  快速排序基本思想是&#xff1a;通过一个标记pivot元素将n个元素的序列划分为左右两个子序列left和right,.其中left中的元素都比pivot小&#xff0c;right的都比pivot的大&#xff0c;然后再次对Ieft和r…

企业办公加密系统中——全透明加密和半透明加密的区别

PC端访问地址&#xff1a; www.drhchina.com 天锐绿盾数据防泄密系统中的全透明加密和半透明加密的区别如下&#xff1a; 全透明加密是采用驱动层动态加解密技术&#xff0c;对企业内部所有涉密文档进行强制加密处理&#xff0c;从文件创建开始即可自动加密保护。加密文档在加…

【思扬赠书 | 第1期】教你如何一站式解决OpenCV工程化开发痛点

⛳️ 写在前面参与规则 ✅参与方式&#xff1a;关注博主、点赞、收藏、评论&#xff0c;任意评论&#xff08;每人最多评论三次&#xff09;⛳️本次送书1~3本【取决于阅读量&#xff0c;阅读量越多&#xff0c;送的越多】思扬赠书 | 第1期活动开始了&#xff01;&#xff01;…

十问ByteHouse:如何基于ClickHouse玩转向量检索?

更多技术交流、求职机会&#xff0c;欢迎关注字节跳动数据平台微信公众号&#xff0c;回复【1】进入官方交流群 向量检索被广泛使用于以图搜图、内容推荐以及大模型推理等场景。随着业务升级与 AI 技术的广泛使用&#xff0c;用户期望处理的向量数据规模越来越大&#xff0c;对…