对Binder通信机制的强行理解

参考
Android Bander设计与实现 - 设计篇
Binder学习指南
github_Binder机制

其中的各种概念和比喻让我看的十分痛苦,不知道是我的理解能力太差,还是人类的语言太苍白。我按自己的理解整理出一下笔记。主要是对概念的梳理,刨除比喻,以简要的文字,把我从这三篇文章中理解到的内容阐述出来,理解深度也根据自己的水平来。当时内心急躁,没有细看,也没有全看。有人看到我这篇文章了,如发现问题,欢迎指正。

(Android系统所基于的)Linux内核基础知识(为什么需要跨进程)

  1. 进程隔离/虚拟地址空间:每个进程对应一个虚拟地址空间,不同进程数据不共享。
  2. 系统调用:Linux分内核空间和用户空间,应用程序存在于用户空间,不能直接访问内核空间,但可以通过系统调用间接访问。这样间接的方式可对访问权限进行限制,保证系统的安全。跨进程通信的原理,就是通过系统调用功能,使用内核空间作为桥梁,完成不同应用程序间的通信。

为什么使用Binder

  1. Android广泛使用跨进程通信
  2. 性能:Binder拷贝数据的次数少,性能比socket、管道、消息队列等方式更高效
  3. 安全:Binder支持对通信双方进行身份校验

Binder通信模型

  1. Binder驱动:“驱动”是保证计算机能操作硬件设备的一小块代码,与此类似,“Binder驱动”是Android系统中保证Binder对象能操作内核空间的一小块代码。
  2. Binder(对象,或实体):提供了间接访问内核空间的功能,由Server创建并向ServiceManager注册,Client可以通过对Binder对象的引用与Server进行通信。所谓注册,就是将对象的名字和引用的映射关系记录在ServiceManager中。
  3. Binder引用(或代理对象):Client对Binder对象所持有的引用,或称代理对象,由Binder驱动根据Binder对象创建。Client通过它可以调用Binder对象的功能,实现方式由Binder驱动完成。
  4. Client和Server(进程):假设发起和接收通信请求的进程分别为Client和Server。
  5. ServiceManager(进程):作用是将字符形式的Binder名字转化成Client中对该Binder的引用,使得Client能够通过Binder名字获得Binder引用。(ServiceManager也是一个进程,对于ServiceManager而言,其他所有的进程都是Client,也就是说,它是其他所有进程的Server。它的Binder引用是0号引用,该Binder没有名字也不需要注册。其它进程要通过0号引用向ServiceManager发起注册Binder或获取Binder引用的请求)
  6. Client、Server、ServiceManager运行于用户空间,Binder驱动运行于内核空间。
  7. 通信流程:
    1. ServiceManager的建立:进程向Binder驱动申请为ServiceManager,此时进程还没有区分为Client角色或Server角色,所以统称之为Service。(我理解的建立是,其他进程通过0号引用和ServiceManager建立了连接,不知道是不是这样)
    2. Server创建Binder对象并向ServiceManager注册。
    3. Client通过Binder的名字向ServiceManager查询和获取Binder引用。
    4. Client通过Binder引用与Server通信,Binder通过操作内核空间,实现了两者的跨进程通信。
Binder通信示意图

扩展

匿名Binder:没有向ServiceManager注册的Binder对象,即该Binder对象的引用没有公开,能收到此匿名Binder引用的Client,便可以和Server建立起一条私密的通道。(具体Client怎么才能收到,在文章中没找到)

Binder的总结

  1. 通常意义下,Binder指的是一种通信机制。(以上的Binder是Binder对象的简称)
  2. 对于Server进程来说,Binder对象指的是Binder本地对象,对于Client来说,Binder对象指的是Binder代理对象。
  3. 对于传输过程而言,Binder对象是可以进行跨进程传递的对象。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容