IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> 深入理解Binder机制 -> 正文阅读

[移动开发]深入理解Binder机制

Binder框架

Binder架构.png

Binder是什么

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

Binder与传统IPC对比

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

Binder数据传输流程

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

mmap()

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

####Binder数据传输流程
BInder数据传输流程图.png

总结:通过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 数据读写操作;
  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-07-04 23:03:58  更:2022-07-04 23:06:29 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 2:24:00-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码