Binder跨进程通信原理(一):动态内核加载模块(1)

一开始上手,陌生的东西比较多,But,其实并不复杂。喔,流程图是用 ProcessOn 画的。很棒的在线画图工具。

出发前预备子弹

我们知道进程之间,虚拟地址不同,是不能直接通信的,这是一种保护机制。打开任务管理器,查看一下N多的进程,试想一下如果这些进程直接通信会带来什么后果?

而用户空间可以通过System calls(系统回调)与内核空间通信的,如果在内核空间中有一个模块,能够完成数据的转发,那么是不是两个进程就可以通信了呢?如下图:

在这里插入图片描述

上面提到一些用户空间、内核空间的概念,用户空间也能大概猜到是什么东西,而内核空间,就知道它是很底层的东西好了。而模块呢,可以简单的理解为实现一个功能的程序或一个硬件电路等,比如玩单片机的时候,会有红外线模块,蓝牙模块,wifi模块等。这些概念的东西搜索一下百科知道就好。

Binder驱动

Binder驱动运行在内核空间,它就是那个内核模块了。Binder驱动很重要,承担了进程间通信的数据转发等。一提到驱动,也是比较熟悉,你插个U盘,需要驱动吧。而Binder驱动也差不多,虽然名字取得很好,功能还很强大。但也不是什么神奇的东西。

Binder跨进程通信模型

Binder的通信模型有4个角色:Binder Client、Binder Server、Binder Driver(Binder驱动)、ServiceManager。

想象一个情景:我到北京旅行,要给高中同学寄一张明信片,明信片肯定要写上地址吧,不然怎么寄给对方呢?那么我怎么拿到这个地址呢,很简单,翻一下毕业相册就好了。而这个记录着同学们通信地址的毕业相册,就相当与一个通讯录。在Binder的通信模型中扮演的是ServiceManager的角色。好,现在已经有了通信地址了,那么就找到邮局寄出去就好了。过几天同学就高高兴兴的收到了明信片。那么这个邮局在Binder通信模型中扮演的是Binder驱动的角色,而作为寄信人的我就是Binder Client,收信人同学就是Binder Server。

先上一张图来描述上面的那个情景:

在这里插入图片描述

可以看到,ServiceManager、Binder Client、Binder Server处于不同的进程,他们三个都在用户空间,而Binder驱动在内核空间。(我是特意把Binder驱动画的比较大的,因为Binder驱动的作用最大)

那先来简述一下这个通信模型:

首先是有一个ServiceManager,刚开始这个通讯录是空白的,然后Server进程向ServiceManager注册一个映射关系表,比如徐同学把自己的地址广东省广州市xx区写进通讯录,那么就形成了一张表:

徐同学 —> 广东省广州市xx区

之后Client进程想要和Server进程通信,首先向ServiceManager查询地址,ServiceManager收到查询的请求之后,返回查询结果给Client。

注意到这里不管是Server进程注册,还是Client查询,都是经过Binder驱动的,这也真是Binder驱动的作用所在,先不急,下面的原理会分析到。

这时候我就拿着地址就开始寄明信片咯。当我把明信片放扔进邮筒,之后的工作就是由邮局去完成了,也就是Binder驱动去完成通信的转发。

Binder通信原理

从寄明信片的例子中,邮递员从邮筒取出明信片,然后跨越千山万水将明信片送达。从这点我们也能想到,其实Binder驱动完成的工作是很重要的。

我们来还原一个Binder跨进程通信的过程。 案例:Client进程调用Server进程的computer对象的add方法。

接下来的内容你可能需要知道代理模式才能更好的理解,不过没学习过代理模式也没关系,可以先读下去,然后在去补一下代理模式,再回来看这篇文章。思路会清晰很多。

在这里插入图片描述

尾声

对于很多初中级Android工程师而言,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。 整理的这些架构技术希望对Android开发的朋友们有所参考以及少走弯路,本文的重点是你有没有收获与成长,其余的都不重要,希望读者们能谨记这一点。

最后想要拿高薪实现技术提升薪水得到质的飞跃。最快捷的方式,就是有人可以带着你一起分析,这样学习起来最为高效,所以为了大家能够顺利进阶中高级、架构师,我特地为大家准备了一套高手学习的源码和框架视频等精品Android架构师教程,保证你学了以后保证薪资上升一个台阶。

当你有了学习线路,学习哪些内容,也知道以后的路怎么走了,理论看多了总要实践的。

进阶学习视频

附上:我们之前因为秋招收集的二十套一二线互联网公司Android面试真题 (含BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总。)


《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》点击传送门,即可获取!
移动架构视频+大厂面试真题+项目实战源码》点击传送门,即可获取!**

千里马8年Android系统及应用开发经验,曾担任过美国unokiwi公司移动端技术总监兼架构师,对系统开发,性能优化,应用高级开发有深入的研究,Android开源定制ROM Lineage的贡献者之一,国内首家线下开辟培训Android Framework课程,拥有2年的Android系统培训经验。成为腾讯课堂专业负责android framework课程分享第一人,致力于提高国内android Framework水平Android Framework领域内是国内各大手机终端科技公司需要的人才,应用开发者都对Android系统充满着好奇,其中的binder是重中之重,都说无binder无Android,binde是Android系统的任督二脉。课程水平循序渐进,由中级再到高级,满足各个层次水平的android开发者。1、灵活使用binder进程通信,在app端对它的任何api方法等使用自如2、可以单独分析android系统源码中任何binder部分,分析再也没有难度3、掌握binder驱动本质原理,及对应binder驱动怎么进行进程通信,及内存等拷贝方式数据等4、对binder从上层的java app端一直到最底层的内核binder驱动,都可以顺利理通5、针对系统开发过程中遇到的binder报错等分析方法,及binder bug案例学习6、针对面试官任何的binder问题都可以对答自如7、socket这种进程通信实战使用8、针对android源码中使用的socket源码轻松掌握9、android系统源码中最常见的socketpair中双向进程通信10、使用socket实现一个可以让app执行shell命令的程序
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值