Binder框架

Binder是什么

1.Binder是一种进程间通信机制;
2.Binder是一个虚拟物理设备驱动;
3.Binder是一个能发起通信的Java类;

Binder与传统IPC对比

Binder 共享内存 Socket
性能 内存拷贝一次 无需拷贝 内存拷贝两次
特点 基于C/S架构 易用性高 稳点性好 控制复杂 易用性差 基于C/S架构,作为通用接口,其传输效率低,开销大
安全性 为每个app分配UID,支持实名和匿名 依赖上层协议,访问接入点是开放的,不安全 依赖上层协议,访问接入点是开放的,不安全

Binder数据传输流程

在了解传输流程之前,先简单了解下Android中的内存划分以及内存映射【mmap】概念;
####内存划分
内存被操作系统划分成两块:用户空间和内核空间,用户空间是用户程序代码运行的地方,内核空间是内核代码运行的地方。为了安全,它们是隔离的,即使用户的程序崩溃了,内核也不受影响。

mmap()

Linux通过将一个虚拟内存区域与一个磁盘上的对象关联起来,以初始化这个虚拟内存区域的内容,这个过程称为内存映射(memory mapping)。
对文件进行mmap,会在进程的虚拟内存分配地址空间,创建映射关系。
实现这样的映射关系后,就可以采用指针的方式读写操作这一段内存,而系统会自动回写到对应的文件磁盘上。
所有的系统资源管理都是在内核空间中完成的。比如读写磁盘文件,分配回收内存,从网络接口读写数据等等。用户空间通过系统调用让内核空间完成这些功能。

1.调用write,告诉内核需要写入数据的开始地址与长度;
2.内核将数据拷贝到内核缓存;
3.由操作系统调用,将数据拷贝到磁盘,完成写入;

####Binder数据传输流程

总结:通过Binder机制将数据从发送方通过copy_from_user()方法复制到内核地址空间,而接收方地址空间和内核地址空间通过mmap()映射到同一块物理内存地址,因此整体只需要内存拷贝一次,而普通ipc通信则需要将数据先从发送方缓冲区拷贝到内核地址空间,再从内核地址空间拷贝到接收方缓冲区,整体下来需要两次拷贝;【binder传输的数据大小限制为1M-8K,Binder驱动里限制 】

Binder驱动的四个主要方法

  1. binder_init 初始化binder驱动;
  2. binder_open 打开binder驱动;
  3. binder_mmap 设置内存映射;
  4. binder_ioctl 数据读写操作;

深入理解Binder机制相关推荐

  1. 从mediaserver入手快速理解binder机制(最简单理解binder)

    (一) 概述    Android的binder机制提供一种进程间通信的方法,使一个进程可以以类似远程过程调用的形式调用另一个进程所提供的功能.binder机制在Java环境和C/C++环境都有提供. ...

  2. 深入理解Binder机制4-bindService过程分析

    一.概述 1.1 Binder架构 Android内核基于Linux系统,而Linux系统进程间通信方式有很多,如管道,共g享内存,信号,信号量,消息队列,套接字.而Android为什么要用binde ...

  3. 一文分析Binder机制和AIDL的理解

    为什么要去理解Android的进程间通信机制 对于Android开发工程师来说,如果不去理解进程间通信机制也可以使用系统提供的API完成应用开发,但如果想要达到更高的层级,那么就不能简单只会调用API ...

  4. 理解 Android 的 Binder 机制

    Binder机制的工作流程 1.客户端获取服务端的代理对象(proxy).我们需要明确的是客户端进程并不能直接操作服务端中的方法,如果要操作服务端中的方法,那么有一个可行的解决方法就是在客户端建立一个 ...

  5. aidl使用_借助 AIDL 理解 Android Binder 机制——Binder 来龙去脉

    AIDL 是 Android Interface Definition Language(Android 接口定义语言)的缩写,它是 Android 进程间通信的接口语言.由于 Android 系统的 ...

  6. 理解Android Binder机制(3/3):Java层

    本文是Android Binder机制解析的第三篇,也是最后一篇文章.本文会讲解Binder Framework Java部分的逻辑. Binder机制分析的前面两篇文章,请移步这里: 理解Andro ...

  7. 理解Android Binder机制(1/3):驱动篇

    Binder的实现是比较复杂的,想要完全弄明白是怎么一回事,并不是一件容易的事情. 这里面牵涉到好几个层次,每一层都有一些模块和机制需要理解.这部分内容预计会分为三篇文章来讲解.本文是第一篇,首先会对 ...

  8. Android之最好理解的Binder机制

    转载:http://weishu.me/2016/01/12/binder-index-for-newer/ Binder学习指南 发表于 2016-01-12   |   92条评论   |   3 ...

  9. 细读《深入理解 Android 内核设计思想》(四)Binder 机制 [中]

    对冗余挑拣重点,对重点深入补充,输出结构清晰的精简版 智能指针 binder 驱动中的结构体 ProcessState IPCThreadState BpBinder BinderProxy Serv ...

  10. 细读《深入理解 Android 内核设计思想》(三)Binder 机制 [上]

    对冗余挑拣重点,对重点深入补充,输出结构清晰的精简版 1.必备知识 设备驱动 文件描述符 页框 2.Binder 概述 3.binder 驱动 binder_open binder_mmap bind ...

最新文章

  1. PHP 截取字符串专题
  2. codeblocks断点不停,无效问题终极解决
  3. 我们应该使用什么指标来描述数据中心及其效率?
  4. 【基础算法】常见的ML、DL编程题
  5. if __name__ == __main__:什么意思_好冷的Python if __name__==__main__是啥东东
  6. java调用python代码
  7. js——window.open用法
  8. 财务金融类网页及app界面设计模板
  9. 用python编辑word_使用PYTHON编辑和读取WORD文档
  10. 推荐:安全公司的一些面试题
  11. 房价增幅或于年底见顶
  12. SIM800(GPRS)拨号上网失败未能连接服务器
  13. Docker容器化部署报Fatal error: Can‘t open and lock privilege tables: Table ‘mysql.user‘ doesn‘t exis的解决办法
  14. silk lobe资源公众号_【好设计资源库】公众号素材获取方式说明
  15. 我是谁,没有绝对安全的系统
  16. 2021-10-12 SpringMVC实现JSON数据转换,AJAX失效(解决)
  17. python聊天室socket+tkinter_基于socket和tkinter的python网络聊天室程序
  18. 捡到的苹果手机怎么解id锁_苹果手机维修中软解与硬解的区别
  19. 实战 .Net 数据访问层 - 19
  20. DKN: Deep Knowledge-Aware Network for News Recommendation阅读笔记

热门文章

  1. pip卸载安装的所有python包
  2. abb机器人伺服电机报闸是什么_ABB机器人伺服电机刹车失灵,抱闸卡死维修
  3. spring bean作用域之间有什么区别
  4. C语言常见的陷阱与缺陷
  5. 【3dmax千千问】初学3dmax插件神器第15课|打开疯狂模渲大师已归档效果图的模型场景,弹窗提示“无法创建备份文件”报错,室内设计师应该怎么办?
  6. Unity Demo ——3D时钟
  7. 网络原理制作bt采集蜘蛛
  8. 基于联合非负矩阵分解的多视角聚类学习笔记
  9. android下拉菜单刷新,Android开发之头部悬浮的上拉加载,下拉刷新的列表
  10. 模拟京东登陆 java_java京东自动登录