【安卓跨进程通信IPC】-- Binder

目录

  • Binder
    • Binder是什么?
    • 进程空间分配
    • 进程隔离
    • Binder跨进程通信机制模型
    • 优点
    • AIDL
    • 常见面试题

Binder

夯实基础之超详解Android Binder的工作方式与原理以及aidl示例代码
比较详细的介绍:Android跨进程通信:图文详解 Binder机制 原理
操作系统:图文详解 内存映射
一篇短的介绍:Binder原理解析
很详细的介绍:Android之Binder原理剖析
Android跨进程通信:图文详解 Binder机制 原理
Android之Binder原理剖析
Binder核心原理解析

binder面试题:
【干货满满】关于Binder的一些面试问题

Binder是什么?

是一种IPC方式;
是一种虚拟的物理设备驱动,即Binder驱动,连接service进程、client进程和ServiceManager进程的纽带;
从安卓代码的实现角度,binder是一个类,实现了IBinder接口。

进程空间分配

用户空间:进程间相互隔离
内核空间:进程间共享
进程内用户空间和内核空间进行交互需通过系统调用来实现:copy_from_user()和copy_to_user()

进程隔离

为了保证 安全性 & 独立性,一个进程 不能直接操作或者访问另一个进程,即Android的进程是相互独立、隔离的。
传统的IPC通信需要做2次数据拷贝:用户空间->内核空间->用户空间,效率低下。
而Binder的作用则是:连接两个进程,通过调用mmap()内存映射系统函数,主要负责创建数据接收的缓存空间 & 管理数据接收缓存,最终通过1次数据拷贝就实现了两个进程间的数据通信。

Binder跨进程通信机制模型

是基于Client-Server模式。
基本的流程:(详细流程见原链接)

  1. server进程通过binder驱动向ServiceManager注册服务,binder驱动将注册信息同步给Service Manager进行管理;
    Binder实体是Server进程在Binder驱动中的存在形式;该对象保存Server和ServiceManager的信息(保存在内核空间中);Binder驱动通过内核空间的Binder实体找到用户空间的Server对象。
  2. client进程通过向binder驱动发送获取指定服务的请求,传递要获取的服务名称,binder驱动通过Servcie Manager找到对应的binder实体,发挥实体引用给client进程;
  3. client进程通过binder实体引用使用服务。

binder驱动:一种虚拟设备驱动,连接server进程、client进程和Service Manager的桥梁,具体作用:

  1. 传递进程间的数据:通过内存映射,数据拷贝1次,传输效率高;
  2. 实现线程控制:采用Binder线程池,并由Binder驱动自身进行管理。
    Binder驱动持有每个server进程在内核空间中的binder实体,并给client进程提供binder实体的引用。

内存映射:

  1. binder驱动创建一块接收缓存区;
  2. 实现地址映射关系:实现内核缓存区和接收进程用户空间地址同时映射到同一个共享接收缓存区;
  3. 发送进程通过copy_from_user()发送数据到虚拟内存区域;
  4. 由于内核缓存区和接收进程的用户空间地址存在映射关系,故相当于也发送到了接收进程的用户空间地址,即实现了跨进程通信。

说明:

  1. Client进程、Server进程 & Service Manager 进程之间的交互 都必须通过Binder驱动(使用 open 和 ioctl文件操作函数),而非直接交互。
  2. Binder驱动 & Service Manager进程 属于 Android基础架构(即系统已经实现好了);而Client 进程 和 Server 进程 属于Android应用层(需要开发者自己实现)
  3. Binder请求的线程管理:Binder模型的线程管理 采用Binder驱动的线程池,并由Binder驱动自身进行管理;一个进程的Binder线程数默认最大是16,超过的请求会被阻塞等待空闲的Binder线程。

优点

  1. 高效:数据拷贝只需要1次,而管道、消息队列、Socket都需要2次,通过驱动在内核空间拷贝数据,不需要额外的同步处理。
  2. 安全性高:Binder机制为每个进程分配了UID/PID作为鉴别身份的标志,在Binder通信时会根据其进行有效性检测;传统的IPC方式对于双方的身份并没有做出严格的验证,如Socket通信ip地址都是客户端手动填入,容易出现伪造。
  3. 使用简单:采用CS架构,有AIDL机制使得开发者能够更加容易的使用和集成。

AIDL

Android:学习AIDL,这一篇文章就够了(上)
你真的理解AIDL中的in,out,inout么?

常见面试题

【干货满满】关于Binder的一些面试问题
面试 | 再也不怕被问 Binder 机制了

Android中进程和线程的关系,区别?
为何需要进行IPC,多进程通信可能会出现什么问题?
Android中IPC方式有几种、各种方式优缺点? 为何新增Binder来作为主要的IPC方式?

什么是Binder?
Binder的原理?
Binder Driver 如何在内核空间中做到一次拷贝的?
Binder 驱动加载过程中有哪些重要的步骤?
系统服务是什么时候注册的?
使用Binder进行数据传输的具体过程?
Binder框架中ServiceManager的作用?
系统服务与bindService启动的服务的区别?
系统服务与bindService等启动的服务的区别
【Android话题-2.4系统服务】系统服务和bind的应用服务有什么区别
Activity的bindService流程?
bindService方法流程
Android进阶笔记:bindService的流程–源码解析
Android四大组件系列6 bindService流程
使用 Binder 传输一次数据的最大限制是多少,被占满后会导致什么问题?

什么是AIDL?
AIDL使用的步骤?
AIDL支持哪些数据类型?
AIDL的关键类,方法和工作流程?
如何优化多模块都使用AIDL的情况?
不通过AIDL,手动编码来实现Binder的通信?

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

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

相关文章

可变引用useRef()保存可变数据

场景:useState的状态值一旦通过状态更新函数改变了,React 就会重新渲染组件。 方法:可变引用useRef()保存可变数据,这些数据在更改时不会触发重新渲染 每次渲染组件时,countRenderRef可变引用的值都会使countRenderRef…

Cargo字节镜像源

在 Windows 系统默认为:%USERPROFILE%.cargo,在类 Unix 系统默认为:$HOME/.cargo,在此目录下新建config文件,填写内容如下: [source.crates-io] replace-with rsproxy[source.rsproxy] registry "ht…

GPT-4o横空出世

GPT-4o的技术革新和优化显著,尤其是其多模态处理、速度与性能优化、以及情感理解与表达能力方面。而个人整体感受则普遍正面积极。 GPT-4o的版本对比: 技术进化:从GPT-3到GPT-4再到GPT-4o,OpenAI的模型在参数数量、训练方法、以及…

day20

第一题 23. 合并 K 个升序链表 本题是已经知道有多个链表,需要我们将这些链表按照升序排列的规则组合到一起,同时这些链表都是升序排列的; 解法一: 利用优先级队列 步骤一:利用优先级队列床架一个小根堆; …

【OpenHarmony】TypeScript 语法 ④ ( 函数 | TypeScript 具名函数和匿名函数 | 可选参数 | 剩余参数 | 箭头参数 )

文章目录 一、TypeScript 函数1、TypeScript 具名函数和匿名函数2、TypeScript 函数 与 JavaScript 函数对比3、TypeScript 函数 可选参数4、TypeScript 函数 剩余参数5、TypeScript 箭头函数 参考文档 : <HarmonyOS第一课>ArkTS开发语言介绍 一、TypeScript 函数 1、Typ…

Llama(二):Open WebUI作为前端界面,使用本机的llama3

目录 背景 Open WebUI是什么 工程能力特性 产品功能特性 用户体验特性 Open WebUI安装并使用 背景 Mac M1芯片&#xff0c;16G 内存 llama3 8B的部署参考Llama&#xff08;一&#xff09;&#xff1a;Mac M1芯片运行Llama3-CSDN博客在Mac M1 16G内存环境中&#xff0c;…

牛客热题:缺失的第一个正整数

牛客热题&#xff1a;数组中出现一次的两个数字> &#x1f4df;作者主页&#xff1a;慢热的陕西人 &#x1f334;专栏链接&#xff1a;力扣刷题日记 &#x1f4e3;欢迎各位大佬&#x1f44d;点赞&#x1f525;关注&#x1f693;收藏&#xff0c;&#x1f349;留言 文章目录 …

6月2号总结

刷题记录Codeforces Round 925 &#xff08;A,B,C&#xff09; 1.A. Recovering a Small String 问题 - A - Codeforces 输入&#xff1a; 5 24 70 3 55 48 输出&#xff1a; aav rzz aaa czz auz 给定一个3~78的整数&#xff0c;将这个整数分成a,b,c&#xff0c;其中1表示…

数据结构之二叉搜索树(TreeSetTreeMap)

目录 一.搜索树 1.1概念 1.2适用场景 2.二叉搜索树的基本操作 2.1二叉搜索树的定义 2.2查找 2.1.1基本思路 2.3插入 2.3.1基本思路 2.4删除 2.4.1基本思路 2.5遍历 2.6性能分析 二.TreeSet Map和Set 1.概念 2.模型 1.定义 2.基本操作 三.TreeMap 1.定义 2.基…

LLM大语言模型学习资料网站(git、gitee、等)

先上几个关于大模型方面比较好的开源地址吧&#xff1a; 1.清华智普ChatGLM&#xff1a; GitHub - THUDM/ChatGLM3: ChatGLM3 series: Open Bilingual Chat LLMs | 开源双语对话语言模型 ChatGLM3 series: Open Bilingual Chat LLMs | 开源双语对话语言模型&#xff0c;详细…

【计算机毕设】基于SpringBoot的医院管理系统设计与实现 - 源码免费(私信领取)

免费领取源码 &#xff5c; 项目完整可运行 &#xff5c; v&#xff1a;chengn7890 诚招源码校园代理&#xff01; 1. 研究目的 本项目旨在设计并实现一个基于SpringBoot的医院管理系统&#xff0c;以提高医院管理效率&#xff0c;优化医疗服务流程&#xff0c;提升患者就诊体验…

Codeforces Round 949 (Div. 2)(A,B题解)

这场真是给我打的汗流浃背了&#xff0c;这场真的巨难&#xff08;可能是因为我二进制根本就没学好的原因吧&#xff09; 反正总共就搞了两道题&#xff0c;第一道题注重于思维&#xff0c;第二道题纯二进制&#xff0c;第三道题看着也是二进制&#xff08;最后时间不够了&…

力扣 142题 环形链表Ⅱ 记录

题目描述 给定一个链表的头节点 head &#xff0c;返回链表开始入环的第一个节点。 如果链表无环&#xff0c;则返回 null。如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&#xff0c;评测系统内…

代码随想录算法训练营第57天|● 739. 每日温度 ● 496.下一个更大元素 I

单调栈&#xff1a;维持一个单调的栈&#xff0c;用于解决离最近的比自己大or小的元素的距离 739. 每日温度 和之前那个top k 最小堆感觉思路是一样的 class Solution:def dailyTemperatures(self, temperatures: List[int]) -> List[int]:ans[0]*len(temperatures)stack…

Python知识点18---进程和线程

提前说一点&#xff1a;如果你是专注于Python开发&#xff0c;那么本系列知识点只是带你入个门再详细的开发点就要去看其他资料了&#xff0c;而如果你和作者一样只是操作其他技术的Python API那就足够了。 首先我要给大家说一下进程和线程有什么区别&#xff0c;进程包含着线…

详解 Spark SQL 核心编程知识

一、SparkSQL 概述 1. 概念 Spark SQL 是 Spark 用于结构化数据 (structured data) 处理的 Spark 模块&#xff0c;使用 SQL 的方式简化 RDD 的开发 2. Hive VS SparkSQL Hive 是早期唯一运行在 Hadoop 上的 SQL-on-Hadoop 工具&#xff0c;但是 MapReduce 计算过程中大量的中…

URL路由基础

本书1-7章样章及配套资源下载链接: https://pan.baidu.com/s/1OGmhHxEMf2ZdozkUnDkAkA?pwdnanc 源码、PPT课件、教学视频等&#xff0c;可以从前言给出的下载信息下载&#xff0c;大家可以评估一下。 对于高质量的Web应用来讲&#xff0c;使用简洁、优雅的URL设计模式非常…

时间序列的谱分解

refer&#xff1a;15.pdf (berkeley.edu) Stat 153 Fall 2010 (berkeley.edu)

linux mtd分区应用操作sample之某分区擦除

什么是擦除? 把flash相关的区域数据bit置为1的过程 #include <mtd/mtd-user.h> #include <mtd/mtd-abi.h> struct erase_info_user {__u32 start; // 起点 __u32 length; //长度 块大小对齐 不然报参数失败 };struct erase_info_user64 {__u64 sta…

常见端口及其脆弱点

端口及脆弱性 ⚫ FTP (21/TCP) 1.默认用户名密码anonymous:anonymous 2.暴力破解密码 3.VSFTP 某版本后门 ⚫ SSH (22/TCP) 1.部分版本 SSH 存在漏洞可枚举用户名 2.暴力破解密码 ⚫ Telent (23/TCP) 1.暴力破解密码 2.嗅探抓取明文密码 ⚫ SMTP (25/TCP) 1.无认证…