阿里面试必问:带你读懂Binder通信机制;拿捏面试官

本文详细解析了Android中的Binder通信机制,通过对比Linux的进程通信方式,阐述了Binder实现一次拷贝的原理,涉及到mmap、Service Manager等关键概念。适合准备阿里面试的Android开发者学习。
摘要由CSDN通过智能技术生成

本文设计内容:
结合视频掌握更快

1.准备
2.为什么会有Binder通信机制
3.面试系列
4.为什么会有内核空间与用户空间
5.内存管理单元
6.Binder原理

之前有个朋友小明1.2.3号去阿里面试的时候被问道一些关于Binder相关的内容,由于本文重点讲解Binder的知识点,所有把小明被问到的技术点拿出来分析,同时打算去阿里面试的小伙伴也要注意这些技术点,不然被问到打不出来面试过不了就得不偿失了。

先看看小明是怎么回答的:
面试官:

谈谈你对 binder 的理解?

小明1号(自认为无所不知,水平已达应用开发天花板,目前月薪 10k):binder 是用来跨进程通信的,可以分为 client、server、binder 驱动以及 service manager 四部分。然后被问及到一次拷贝的原理的同时小明小明一号蒙了,被告知回家等通知。

小明二号(业余时间经常打游戏、追剧、熬夜,目前月薪 15k)
binder 是一种 IPC 方式,相比于 Linux 原有的管道、共享内存、Socket 等,它通过 mmap 实现一次拷贝,比 Socket 、管道传输速度更快,比共享内存更安全可控,是 Android 系统中主要的 IPC 通信方式。
面试官:Intent 传参有大小限制,这跟 binder 有关系吗?,如何限制大小?二号回答不了解没有深入看过相关源码,也被告知回家等消息。

小明三号(坚持每天学习、不断的提升自己,目前月薪 30k)
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 进程就能读取到数据了。另外映射的虚拟内存块

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值