码迷,mamicode.com
首页 > 其他好文 > 详细

Binder驱动理解

时间:2020-04-04 22:40:58      阅读:84      评论:0      收藏:0      [点我收藏+]

标签:请求   图片   数据   androi   roi   server   struct   server进程   内存地址   

1、Binder的三层架构

技术图片

2、BC、BR的理解

通信模型

技术图片

Binder协议包含在IPC数据中,分为两类:

  • BINDER_COMMAND_PROTOCOL:binder请求码,以”BC_“开头,简称BC码,用于从IPC层传递到Binder Driver层;
  • BINDER_RETURN_PROTOCOL :binder响应码,以”BR_“开头,简称BR码,用于从Binder Driver层传递到IPC层;

通信过程

技术图片

3、mmap原理(内存机制)

技术图片

虚拟进程地址空间(vm_area_struct)和虚拟内核地址空间(vm_struct)都映射到同一块物理内存空间。当Client端与Server端发送数据时,Client(作为数据发送端)先从自己的进程空间把IPC通信数据copy_from_user拷贝到内核空间,而Server端(作为数据接收端)与内核共享数据,不再需要拷贝数据,而是通过内存地址空间的偏移量,即可获悉内存地址,整个过程只发生一次内存拷贝。一般地做法,需要Client端进程空间拷贝到内核空间,再由内核空间拷贝到Server进程空间,会发生两次拷贝。

为什么不让发送端和接收端直接映射到同一个物理空间,这样连一次复制都不需要了?

答:多进程的同步问题复杂,Android选择这个选择是基于速度和安全性的考虑。

Binder进程间通信的数据流程图:

技术图片

Binder驱动理解

标签:请求   图片   数据   androi   roi   server   struct   server进程   内存地址   

原文地址:https://www.cnblogs.com/diffx/p/12634567.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!