浅谈对 Binder 的理解

news2024/11/16 1:37:41

文章目录

    • Binder 是干嘛的?
    • Binder 的意义
    • binder 的通信架构
      • 如何启动 binder 机制
    • binder 通信
    • binder 驱动的分层架构图

  • 需要了解的知识

    1. binder 是干嘛的
    2. binder 的存在意义是怎样的
    3. Android 为什么选择 binder 作为主要的 ipc 通信机制?
    4. binder 的架构

Binder 是干嘛的?

简单来说,Binder 就是用来Client 端和 Server 端通信的。并且 Client 端和 Server 端 可以在一个进程也可以不在同一个进程,Client 可以向 Server 端发起远程调用,也可以向Server传输数据(当作函数参数来传),并且不用关心对方在哪个进程。

  • 设计夸进程通信所关注的点有哪些
    在这里插入图片描述

如果使用 Linux 提供的夸进程通信方式来看,流程如上图,Client 端通过函数传参序列化成 buffer,然后通过 Linux提供的如 Socket ,管道,等通信方式进行传输,然后到 Server端进行解析。

像早期的电话总机接线员,我们想打个电话,先打到总机告诉接线员我要打到哪里,接线员再把电话转接过去,这样的方式即麻烦,采用人工的方式,效率慢,还需要先接收再转接,还不安全。理想的跨进城通信方式要保证 性能好、使用方便、安全 等需求,binder 和其他方式对比就满足了这些要求。

Binder 的意义

  • Binder 并不是 Linux 提供的跨进程机制,它是跑在驱动层的跨进程方式,它是数据内核太,并没有使用 Linux 的跨进程通信方式(socket,pipe,共享内存…)。
  • 性能:Linux 提供的socket、pipe 是需要内核来做中转,相当于两次数据拷贝,一次是从应用层拷贝到内核,一次是从内核拷贝到应用层。Binder 是有开辟一块物理内存,同时影射到内存和用户空间,所以当你把数据拷贝到内核空间时也就相当于拷贝到了应用空间了。
  • 方便易用:逻辑简单直接,不容易出问题,共享内存虽然性能很好,但是用起来比较复杂,没有 binder 好用。
  • 安全:普通的 Linux 的跨进程通信方式并不是很安全,比如 socket 它的 ip 地址都是开放的,只要知道 ip 就可以去连接访问了。主要我们拿不到调用方可靠的信息,可靠的信息只能在IPC内核态的时候添加好,不能让调用方自己添加。

binder 的通信架构

在这里插入图片描述
上图是展示的系统服务的 binder 通信,因为只有系统服务才能注册到 ServiceManager 中,应用的服务是无法注册到 ServiceManager 中的,通过不了权限验证。Client 是应用进程,Server 是系统服务(可能跑在 SystemServer 进程,也可能是单独进程)ServiceManager是一个单独的进程。无论是 Client 还是 Server 还是 ServiceManager,第一步都是需要先启动 binder 机制。

如何启动 binder 机制

之前有写过 binder 机制 的启动,大概分为以下几个步骤:

1. 打开 binder 驱动
2. 内存映射,分配缓冲区
3. 启动 binder 线程

binder 启动流程

binder 通信

从ServiceManager开始,通过一系列的启动和准备,最后会进入 loop 循环等待Client 和 server 端的消息。具体逻辑可以查看ServiceManager 的作用、启动流程和工作原理。

上图 Server 端一般是系统服务,Client 一般是应用服务,所以一般显示 Server 先和 ServiceManager 交互,系统服务是如何注册到 ServiceManager 中的可以查看 怎样添加一个Android的系统服务?。

binder 驱动的分层架构图

在这里插入图片描述

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

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

相关文章

Vue 3 介绍

Vue 3 介绍Vue3 动机 和 新特性Vite 的使用为什么选 Vite为什么要学习 vue 3Vue是国内最火的前端框架Vue 3 于 2022 年 2 月 7 日星期一成为新的默认版本!Vue3性能更高,体积更小Vue3.0在经过一年的迭代后,越来越好用 目前已支持 vue3 的UI组…

Python简介安装与PyCharm安装使用

一、Python简介 Python官方文档:https://docs.python.org/zh-cn/3/ Python 3.x 已经将 UTF-8 作为默认的源文件编码格式。 1、Python简介 Python 是一门开源免费、通用型的脚本编程语言,它上手简单,功能强大,坚持「极简主义」&am…

Visual Studio Code (VS Code) - 列块编辑与查找

Visual Studio Code (VS Code) - 列块编辑与查找1. 列块选择 Shift Alt 鼠标左键,进行列编辑,批量增删改。 在选定位置按下滚轮键 (鼠标中键) 不放,移动鼠标完成多列选择。 2. 页面双列布局 查看 -> 编辑器布局 -> 双列 3. 查…

linux使用ZLMediaKit搭建rtsp服务器

入门小菜鸟,希望像做笔记记录自己学的东西,也希望能帮助到同样入门的人,更希望大佬们帮忙纠错啦~侵权立删。 致敬rtsp 服务器搭建_音视频开发老马的博客-CSDN博客_rtsp服务器 这里是参考上面链接的介绍再进行一些自己遇到的问题的补充。 一…

一种化学荧光探针945928-17-6,TAMRA alkyne,5-isomer,四甲基罗丹明-炔基

【中文名称】5-四甲基罗丹明-炔基【英文名称】 TAMRA alkyne,5-isomer【CAS】945928-17-6【分子式】C28H25N3O4【分子量】467.53【纯度标准】95%【包装规格】5mg,10mg,25mg【是否接受定制】可进行定制,定制时间周期上面可以和我们进行沟通【外…

redis常用数据类型和应用场景

我们都知道 Redis 提供了丰富的数据类型,常见的有五种:String(字符串),Hash(哈希),List(列表),Set(集合)、Zset&#xff0…

稀疏表(ST表,Sparse Table)

ST表用来解决区间最值问题(也可以解决区间gcd) 利用倍增的思想,O(nlog⁡2n)O\left(n\log_2 n\right)O(nlog2​n)预处理,O(1)O\left(1\right)O(1)区间查询 令f(i,j)f\left(i,j\right)f(i,j)表示区间[i,i2j−1]\left[i,i2^j-1\right…

TypeScript 学习笔记总结(二)

TypeScript 笔记记录,侧重于接口,对象等内容。 文章目录一、 TS 面向对象二、TS 类三、TS 继承四、TS super关键字五、TS 抽象类六、TS 接口七、TS 属性封装八、TS 泛型一、 TS 面向对象 js也是面向对象的,并不是面向过程的。 下面&#xf…

虹科案例 | AR数字化解决方案在石油与天然气领域“大放异彩”

石油和天然气在当今人类社会中扮演着重要角色,但是石油和天然气的开采,却是耗费成本巨大的工程,石油和天然气公司也在不断寻找着能帮助他们降低运营成本并提高效率的好方法。 事实上,AR技术解决方案能帮助这些公司实现他们的目标…

Linux[安装gitlab笔记]

参考文章:https://www.jianshu.com/p/2cb10c11813d CentOS7下安装gitlab中文版 前提: 下载文件:gitlab-ce-12.9.2-ce.0.el7.x86_64.rpm 地址1:https://packages.gitlab.com/gitlab/gitlab-ce 地址2:https://mirrors.…

JVM——类加载与字节码技术(3)

目录四、类加载阶段4.1 加载4.2 链接4.3 初始化五、类加载——练习练习1练习2四、类加载阶段 4.1 加载 ① 将类的字节码载入方法区(1.8后为元空间,在本地内存中)中,内部采用 C 的 instanceKlass ● _java_mirror 即 java 的类镜…

大数据技术架构(组件)10——Hive:集合函数类型转化函数

1.4.3、集合函数1.4.3.1、size select map(a,1,b,2),size(map(a,1,b,2)),array(1,2,3,4),size(array(1,2,3,4));1.4.3.2、map_keysselect map(a,1,b,2), map_keys(map(a,1,b,2));1.4.3.3、map_valuesselect map(a,1,b,2), map_values(map(a,1,b,2));1.4.3.4、array_containssel…

中国国际电子商务中心与易观分析联合发布:2022年3季度全国网络零售发展指数同比增长1.5%

近日,中国国际电子商务中心与易观分析联合发布2022年3季度“全国网络零售发展指数”及其分指数。2022年3季度全国网络零售发展指数同比增长1.5%,环比下降2.9%。随着稳经济一揽子政策和接续措施全面落地显效,生产加快回暖,经济平稳…

vmstat、free、df、iostat、sar

1. vmstat看CPU vmstat -n 2 3 一般vmstat工具的使用是通过两个数字参数来完成的,第一个参数是采样的时间间隔数单位是秒,第二个参数是采样的次数 -procs r:运行和等待CPU时间片的进程数,原则上1核的CPU的运行队列不要超过2,整个…

Softing为Endress+Hauser提供过程自动化连接解决方案

一 背景 恩德斯豪斯(EndressHauser)是一家总部位于瑞士的过程工业自动化解决方案的全球领军企业,致力于为过程工业及实验室自动化领域提供测量仪器、服务和解决方案。其产品被广泛应用于石油、化工、制药、食品饮料以及废水处理等过程自动化…

银河麒麟V10操控系统Qt安装

下载安装镜像申请试用https://www.kylinos.cn/support/trial.html,根据CPU架构选择要下载的安装包。AMD、Intel的CPU下载银河麒麟桌面操作系统V10 AMD64版本,我下载的Kylin-Desktop-V10-SP1-HWE-Release-2203-X86_64.iso制作系统安装启动U盘下载制作启动…

1. kafka-提高生产者吞吐量

kafka的基础使用知识不在这篇文章阐述,默认读者都会使用 首先kafka的生产者原理,如下。图来自网上 上面的图可能不全, 我再详细描述下,在消息发送过程中,设计到两个线程main和sender线程; (1…

Java接口——子接口是否能直接通过子接口名调用父接口类方法

Java9允许在接口中定义默认方法和类方法,为接口增加了一种私有方法,也可以提供实现。 接口就是定义一组通用的方法,就像U盘,只要是USB接口大部分都可以在电脑上使用,电脑无需关心U盘内部怎么实现,只需要告…

浅谈python中@装饰器 - 附例子(含类装饰器与函数装饰器)

浅谈python中装饰器 文章目录浅谈python中装饰器关于装饰器(decorator)小总结关于(语法糖)进阶装饰器顺序装饰器 & 参数End提到的使用首先要先讲一下装饰器的概念 关于装饰器(decorator) 先来看看官方…

计算机相关专业提升学历的解决方案(硕士研究生)

文章目录1、正规全日制硕士1.1 研究生入学考试1.2 硕士毕业要求2、继续教育(非全日制)2.1 在职研究生2.2 同等学力申硕3、海外硕士3.1 海外硕士申请3.2 中外合作项目1、正规全日制硕士 1.1 研究生入学考试 1、考试报名 官方网站:国家研究生…