Binder学习笔记

作者: heheworld | 来源:发表于2020-03-18 18:15 被阅读0次

其实也不算学习笔记了,整理下几位大拿写的文章,自己回顾加深下印象

基础概念
  • 进程隔离 为保证运行中的进程互不影响,设立该规则
  • 内核空间 kernel , 我理解为系统空间
  • 用户空间 用户程序运行区域。
  • 系统调用 , 用户空间访问内核空间的唯一途径(什么用户程序都能操作系统,那肯定不行,得遵守一个规则)
  • 内核态 内核运行态,进程在处理内核代码处理时候,CPU 特权 0级最高
  • 用户态 用户运行态,进程处理用户代码时,CPU特权 3级。
  • LKM Loadable Kernel Moudle, 动态可加载内核模块,可以单独编译,不能单独运行,通过该规则可以链接一个模块到内核,做为内核的一部分运行在内核空间,而Binder 就是
  • Binder 基于LKM机制,运行在内核空间,用户进程通过该模块,实现了进程间通信。
Binder 相较其他进程间通信的优势,
  • 性能,linux进程间通信 需要两次内存拷贝,copy_from_user,copy_to_user;而Binder 只需要一次。
    大概是这样的流程,在内核空间 开辟了内核缓存区,接收方缓存区,发送方(A)的数据拷贝到(内核缓存区),然后将内核缓存区的做一次映射(mmap)到接收方缓存区,然后接收方缓存区和接收方(B)之间也有一个内存映射,这样
    A方发送的数据,B方能够接收到,从而完成了一次进程间通信。
  • 安全
    传统的进程通信方式对于通信双方的身份并没有做出严格的验证,只有在上层协议上进行架设,很容易被伪造攻击。
    而Binder机制从协议本身就支持对通信双方做身份校检,因而大大提升了安全性。这个也是Android权限模型的基础。
Binder 通信过程简述

通信过程,主要有下列几个角色

  1. Client 客户端,发送请求的一方。
  2. Server 服务端,提供服务的一方。
  3. ServiceManager 服务管理方。
  4. Binder 驱动,我理解为中介。

大概流程,

  1. 首先一个进程通过Binder 申请成为ServiceManager。
  2. 其他新建的Server 通过Binder 在ServiceManager注册留名(地址)。
  3. Client 需要跟 Server通信时,会通过Binder ,在ServiceManager中查找对应的Server。
  4. 如果ServiceManager 中有需要的Server,会通过Binder返回一个Server的代理对象给Client。
    **需要注意的是,
    Client端取到的对象并不是真正的对象,而是一个代理对象。
    ServiceManager,Server,Client 不在同一个进程,他们之间通信都是基于Binder的,而对应的Client拿到的对象其实都是代理对象。
    **

Binder到底是什么呢

我觉得这篇文章总结的很好
关于binder的总结

我们经常提到Binder,那么Binder到底是什么呢?
Binder的设计采用了面向对象的思想,在Binder通信模型的四个角色里面;他们的代表都是“Binder”,这样,对于Binder通信的使用者而言,Server里面的Binder和Client里面的Binder没有什么不同,一个Binder对象就代表了所有,它不用关心实现的细节,甚至不用关心驱动以及SM的存在;这就是抽象。
通常意义下,Binder指的是一种通信机制;我们说AIDL使用Binder进行通信,指的就是Binder这种IPC机制。
对于Server进程来说,Binder指的是Binder本地对象
对于Client来说,Binder指的是Binder代理对象,它只是Binder本地对象的一个远程代理;对这个Binder代理对象的操作,会通过驱动最终转发到Binder本地对象上去完成;对于一个拥有Binder对象的使用者而言,它无须关心这是一个Binder代理对象还是Binder本地对象;对于代理对象的操作和对本地对象的操作对它来说没有区别。
对于传输过程而言,Binder是可以进行跨进程传递的对象;Binder驱动会对具有跨进程传递能力的对象做特殊处理:自动完成代理对象和本地对象的转换。

总结的差不多了,其实我觉得关于过往的知识点,每次去回顾的时候,认识会更深入一点,同时也可能会与新学习到的知识有关联,渐渐的有‘窥一斑而知全豹’的感觉,古人常说的‘温故而知新’,大概就是如此吧。

相关文章

  • Android Binder 学习笔记(未完结)

    Binder学习笔记 1IPC 简单概要理解Binder 原理 Binder 学习笔记 2Binder 中 Ser...

  • Binder学习笔记

    直观来说,Binder是Android中的一个类,它实现了IBinder接口。从IPC角度来说,Binder是An...

  • Binder 学习笔记

    这不是一篇详细介绍 Binder 实现原理的文章,因为介绍 Binder 的相关文章已经非常多了,比如 :Andr...

  • Binder学习笔记

    在学习Binder时看了不少资料,但是网上的文章质量参差不齐,对Binder的理解程度也不尽相同,所以走了不少弯路...

  • Binder学习笔记

    其实也不算学习笔记了,整理下几位大拿写的文章,自己回顾加深下印象 基础概念 进程隔离 为保证运行中的进程互不影响...

  • binder学习笔记

    进程间通信方式 1、为什么android需要采用binder IPC 两次拷贝,先调用cope_form_user...

  • Android Handler机制的工作原理

    写在前面 上一次写完Binder学习笔记之后,再去看一遍Activity的启动流程,因为了解了Binder的基本原...

  • Binder之一:Binder Driver概览:《androi

    1.第一部分 Binder之一:Binder Driver概览:《android框架揭秘读书笔记》 Binder ...

  • Binder学习笔记-1

    基础知识 进程隔离:进程隔离是为保护操作系统中进程互不干扰而设计的一组不同硬件和软件的技术。这个技术是为了避免进程...

  • Binder学习笔记(一)

    网上看了很多关于binder的文章,但我还是想把自己的心路历程记录下来,有些是跟着别人的脚步领略险峻风景,有些则是...

网友评论

    本文标题:Binder学习笔记

    本文链接:https://www.haomeiwen.com/subject/xwjqyhtx.html