面试常谈的Binder理解,每个人都不一样~

news2024/11/18 3:37:54

面试官提了一个问题,我们来看看 😎、😨 和 🤔️ 三位同学的表现如何吧


😎 自认为无所不知,水平已达应用开发天花板,目前月薪 10k

面试官️:谈谈你对 binder 的理解

😎:binder 是用来跨进程通信的,可以分为 client、server、binder 驱动以及 service manager 四部分。

面试官:一次拷贝原理知道吗?

😎:不太清楚,其实对应用开发来说,没必要知道的。

面试官:好的,回去等通知吧


😨 业余时间经常打游戏、追剧、熬夜,目前月薪 15k

面试官:谈谈你对 binder 的理解

😨:binder 是一种 IPC 方式,相比于 Linux 原有的管道、共享内存、Socket 等,它通过 mmap 实现一次拷贝,比 Socket 、管道传输速度更快,比共享内存更安全可控,是 Android 系统中主要的 IPC 通信方式。

面试官:Intent 传参有大小限制,这跟 binder 有关系吗?

😨:嗯… 应该有关系吧

面试官:binder 是如何限制这个大小的?

😨:这个不了解,我还没有深入看过相关源码。

面试官:好的,回去等通知吧


🤔️ 坚持每天学习、不断的提升自己,目前月薪 30k

面试官:谈谈你对 binder 的理解

🤔️:binder 是 Android 中主要的跨进程通信方式,binder 驱动和 service manager 分别相当于网络协议中的路由器和 DNS,并基于 mmap 实现了 IPC 传输数据时只需一次拷贝。

binder 包括 BinderProxy、BpBinder 等各种 Binder 实体,以及对 binder 驱动操作的 ProcessState、IPCThreadState 封装,再加上 binder 驱动内部的结构体、命令处理,整体贯穿 Java、Native 层,涉及用户态、内核态,往上可以说到 Service、AIDL 等,往下可以说到 mmap、binder 驱动设备,是相当庞大、繁琐的一个机制。

我自己来谈的话,一天时间都不够,还是问我具体的问题吧。

面试官:基于 mmap 又是如何实现一次拷贝的?

🤔️:其实很简单,我来画一个示意图吧:

Client 与 Server 处于不同进程有着不同的虚拟地址规则,所以无法直接通信。而一个页框可以映射给多个页,那么就可以将一块物理内存分别与 Client 和 Server 的虚拟内存块进行映射。

如图, Client 就只需 copy_from_user 进行一次数据拷贝,Server 进程就能读取到数据了。另外映射的虚拟内存块大小将近 1M (1M-8K),所以 IPC 通信传输的数据量也被限制为此值。

面试官:怎么理解页框和页?

🤔️:页框是指一块实际的物理内存,页是指程序的一块内存数据单元。内存数据一定是存储在实际的物理内存上,即页必然对应于一个页框,页数据实际是存储在页框上的。

页框和页一样大,都是内核对内存的分块单位。一个页框可以映射给多个页,也就是说一块实际的物理存储空间可以映射给多个进程的多个虚拟内存空间,这也是 mmap 机制依赖的基础规则。

面试官:简单说下 binder 的整体架构吧

🤔️:再来画一个简单的示意图吧,这是一个比较典型的、两个应用之间的 IPC 通信流程图:

​ Client 通过 ServiceManager 或 AMS 获取到的远程 binder 实体,一般会用 Proxy 做一层封装,比如 ServiceManagerProxy、 AIDL 生成的 Proxy 类。而被封装的远程 binder 实体是一个 BinderProxy

BpBinder 和 BinderProxy 其实是一个东西:远程 binder 实体,只不过一个 Native 层、一个 Java 层,BpBinder 内部持有了一个 binder 句柄值 handle。

ProcessState 是进程单例,负责打开 Binder 驱动设备及 mmap;IPCThreadState 为线程单例,负责与 binder 驱动进行具体的命令通信。

​ 由 Proxy 发起 transact() 调用,会将数据打包到 Parcel 中,层层向下调用到 BpBinder ,在 BpBinder 中调用 IPCThreadState 的 transact() 方法并传入 handle 句柄值,IPCThreadState 再去执行具体的 binder 命令。

​ 由 binder 驱动到 Server 的大概流程就是:Server 通过 IPCThreadState 接收到 Client 的请求后,层层向上,最后回调到 Stub 的 onTransact() 方法。

​ 当然这不代表所有的 IPC 流程,比如 Service Manager 作为一个 Server 时,便没有上层的封装,也没有借助 IPCThreadState,而是初始化后通过 binder_loop() 方法直接与 binder 驱动通信的。

如果你还没有掌握Binder,现在想要在最短的时间里吃透它,可以参考一下《Android Framework核心知识点》,里面内容包含了:Init、Zygote、SystemServer、Binder、Handler、AMS、PMS、Launcher……等知识点记录。

《Framework 核心知识点汇总手册》:https://qr18.cn/AQpN4J

Handler 机制实现原理部分:
1.宏观理论分析与Message源码分析
2.MessageQueue的源码分析
3.Looper的源码分析
4.handler的源码分析
5.总结

Binder 原理:
1.学习Binder前必须要了解的知识点
2.ServiceManager中的Binder机制
3.系统服务的注册过程
4.ServiceManager的启动过程
5.系统服务的获取过程
6.Java Binder的初始化
7.Java Binder中系统服务的注册过程

Zygote :

  1. Android系统的启动过程及Zygote的启动过程
  2. 应用进程的启动过程

AMS源码分析 :

  1. Activity生命周期管理
  2. onActivityResult执行过程
  3. AMS中Activity栈管理详解

深入PMS源码:

1.PMS的启动过程和执行流程
2.APK的安装和卸载源码分析
3.PMS中intent-filter的匹配架构

WMS:
1.WMS的诞生
2.WMS的重要成员和Window的添加过程
3.Window的删除过程

《Android Framework学习手册》:https://qr18.cn/AQpN4J

  1. 开机Init 进程
  2. 开机启动 Zygote 进程
  3. 开机启动 SystemServer 进程
  4. Binder 驱动
  5. AMS 的启动过程
  6. PMS 的启动过程
  7. Launcher 的启动过程
  8. Android 四大组件
  9. Android 系统服务 - Input 事件的分发过程
  10. Android 底层渲染 - 屏幕刷新机制源码分析
  11. Android 源码分析实战

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

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

相关文章

Topaz Photo AI for Mac 图像智能ai降噪工具

Topaz Photo AI是一款基于人工智能技术的图像编辑软件,它可以帮助用户提升照片质量,使外观更加清晰锐利。这款软件不仅可作为独立的软件使用,也可作为Photoshop的插件,以及能在Lightroom Classic、Capture One中调用。 Topaz Pho…

【Android】关于Activity的onSaveInstanceState生命周期

最近笔者求职时面试一家大厂,被问到Activity的生命周期,其中面试官着重问了onSaveInstanceState的调用是在onStop之前还是之后,本人当时有点蒙圈,之前也没有关注它到底是在OnStop之前还是之后。 但是这个方法在什么时候调用的重要…

Centos7原生hadoop环境,搭建Impala集群和负载均衡配置

Centos7原生hadoop环境,搭建Impala集群和负载均衡配置 impala介绍 Impala集群包含一个Catalog Server (Catalogd)、一个Statestore Server (Statestored) 和若干个Impala Daemon (Impalad)。Catalogd主要负责元数据的获取和DDL的执行,Statestored主要负…

电商领域五强对比:Amazon、eBay、Wish、Target、Newegg,谁更胜一筹?(测评补单)

随着互联网的快速发展,电子商务成为了现代消费的主要方式。在众多电商平台中,Amazon、eBay、Wish、Target、Newegg是备受瞩目的电商巨头。它们在全球范围内拥有庞大的用户群体,提供了丰富的商品选择和便捷的购物体验。本文将对这些电商平台进…

Python网页信息爬取脚本

文章目录 获取整个页面所有源码筛选出源码中图片地址将图片下载到本地完整脚本 获取整个页面所有源码 该步骤可以用requests模块实现,分为下面步骤: 定义一个URL 地址; 发送HTTP 请求; 处理HTTP 响应。 下面代码定义了一个get_Html方法&…

jenkins中添加sonnarqube与OWASP Dependency-Check

jenkins jenkins离线插件地址: http://updates.jenkins-ci.org/download/plugins https://updates.jenkins.io/download/plugins https://mirrors.tuna.tsinghua.edu.cn/jenkins/plugins 国内linux 安装jdk11 文档: https://blog.51cto.co…

流量狂飙!暴涨2000万播放成B站创作标杆

“民以食为天”,美食品类内容是人们日常生活所需延伸出来的一个内容版块,用户浏览量大、众多内容创作者并驱争先,一直到今天,所有人有目共睹美食内容是如何在“内卷”。 饶是如此赛道拥挤的美食圈,也有众多创作者不断…

java字符串压缩和字符串解压

java字符串压缩和字符串解压 运行效果 java工具类 CompressUtil.java import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.serializer.SerializerFeature; import org.apache.commons.codec.binary.Base64;import java.io.BufferedReader; import java.io.Byte…

【LeetCode-中等题】116. 填充每个节点的下一个右侧节点指针

文章目录 题目方法一:直接让每层不是最后一个的节点指向此时队首元素方法二:用list记录下每层的节点 然后再做链接 题目 方法一:直接让每层不是最后一个的节点指向此时队首元素 class Solution {public Node connect(Node root) {if(root nu…

健身完全手册

文章目录 饮食完全手册摄入总量日内分配来源和配餐方法专题&错误 训练完全手册训练分化动作模式胸背手肩腿臀腹训练计划 减脂完全手册胸肌训练(原理动作计划饮食)健身训练的分化、动作、配重体态大师 饮食完全手册 参考视频:&#x1f4a…

什么是Web浏览器的缓存机制?如何控制和清除浏览器缓存?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ Web浏览器的缓存机制⭐ 浏览器缓存的工作原理⭐ 控制和清除浏览器缓存控制缓存 ⭐ 清除缓存⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦&#xf…

YashanDB混合存储揭秘:行式存储如何为高效TP业务保驾护航(上)

上一篇文章《深度干货 | 揭秘YashanDB融合存储引擎》 https://mp.weixin.qq.com/s/yipJcEAH3fVA-_hnUvOiKA从存储结构、事务引擎、高可用等方面介绍了YashanDB存储引擎的整体架构。本篇为大家详细解读YashanDB行式存储技术。 背景 数据库底层组织数据的方式主要分为行式存储和…

成集云 | 金蝶云星空集成聚水潭ERP(金蝶云星空主管库存)| 解决方案

源系统成集云目标系统 方案介绍 金蝶云星空是金蝶软件(中国)有限公司研发的新一代战略性企业管理软件,致力于为企业提供端到端的供应链整体解决方案,它可以帮助企业构建敏捷供应链体系,降低供应链成本,提…

The existence and uniqueness of weak solution

See https://zhuanlan.zhihu.com/p/67522044 https://math.stackexchange.com/questions/1213260/what-is-a-good-definition-of-a-weak-solution

「聊设计模式」之模板方法模式(Template Method)

🏆本文收录于《聊设计模式》专栏,专门攻坚指数级提升,助你一臂之力,带你早日登顶🚀,欢迎持续关注&&收藏&&订阅! 前言 在软件开发中,设计模式是经典的解决方案&#…

广州某机械制造企业生产工序管理系统解决方案

RFID工序管理解决方案在生产工序中引入RFID技术,对生产工序的构件拼装、焊接、打磨后检测、打砂油漆后检测、构件拟装读取确认、项目管理人员收货确认等各个生产环节的数据进行自动化的数据采集,保证生产管理各个作业环节数据输入的效率和准确性&#xf…

如何防止数据库泄露,保障个人信息安全题

在数字化时代,个人信息安全和数据库安全至关重要。为了防止数据库泄露,保障个人信息安全,以下安策带来的一些建议: 1.强化密码管理 密码是保护个人信息安全的第一道防线。确保使用复杂且独特的密码,避免使用容易猜测或…

二分与前缀和

目录 🍈前言 ❤二分 🌹二分 🌼数的范围 🌼数的三次方根 🌼特殊数字 🌼机器人跳跃问题 🌼四平方和 🌼分巧克力 🌹前缀和 🌼前缀和 🌼子…

html form表单高级用法

场景&#xff1a;想单纯使用表单内置的api完成提交&#xff0c;不使用js代码 代码如下&#xff1a; <form name"myForm" action"http://localhost:13734/form" method"post"><label>用户名<input type"text" name&qu…

SecureCRT SSH与FTP连接中文乱码

1、首先要保证服务端环境变量是UTF-8编码的 LANG”zh_CN.UTF-8″ 2、会话里面配置好字符编码&#xff1a;UTF-8 SSH会话的窗口就可以正常显示中文了&#xff0c;效果如下 3、打开FTP或者SFTP时进行文件传输时&#xff0c;列表窗口里面还是乱码&#xff0c;需要把SecureCRT安…