Android Binder IPC详解-Android学习之旅(96)
linux内存空间与BInder Driver
Android进程和linux进程一样,他们只运行在进程固有的虚拟空间中。一个4GB的虚拟地址空间,其中3GB是用户空间,1GB是内核空间 ,用户空间是非共享的,内核空间是共享的,如下图:
linux本身就提供了IPC工具,但是android中的Binder功能更丰富,不仅可以用来实现进程件的IPC通信,还可以用来调用另一个进程的函数,支持RPC操作,Binder使用运行在内科空间中的抽象驱动程序Binder(IPC) Driver,来实现进程间的通信,如下图:
Android使用Binder机制的原因有两个:
1.首先Binder采用了linux的优秀的内存管理技术,在通过内科空间传递数据时,能保证数据的正确性。
2.使用用户空间无法访问的内存空间来交换数据,保证了IPC的安全性
Android Binder Model
介绍一个Surface Flinger服务的使用,进程A与进程B分别调用Surace Flinfer服务,统一生成显示画面,如下图:
服务客户端通过Binder Driver将IPC数据传递到Service Server,实现跨进程调用,如下图:
IPC数据由4部分构成,如下图:
上图中,handle实质的服务号,用来区分不同的服务。RPC代码和RPC数据分别表示待调用的函数和待调的函数参数。Binder协议表示IPC数据的处理方法。
Binder IPC的数据传递
传递过程如下图所示:
Binder尝试RPC操作的时候,会进行Open()调用,Binder Driver的文件描述符,而后通过mmap()系统调用,在内核中开辟一块区域,以便存放接收的IPC数据。最后,调用ioctl()函数,讲IPC数据作为参数,传递给Binder Driver。ioctl命令的格式:
ioctl(文件描述符,ioctl命令,数据类型)
文件描述符是open()函数的返回值,后两个参数的介绍如下图:
Binder的数据流
Binder协议
Binder协议就是IPC数据的第四个参数,根据从IPC传递到Binder Driver和从Binder Driver传递到IPC层,分为两种,如下图:
RPC代码和RPC数据
如下图:
关于相关的鸡排你博客,链接如下:
Android的启动过程分析(从进程和Framework的角度
Android系统服务详解
Android的Context Manager(服务管理器)源码剖析
Binder寻址
分为三个过程:
1.Service Server会向Context Manager注册,发送IPC数据,BinderDriver生成节点编号和服务一一对应,以及Binder节点和Binder引用文件一一对应。
2.服务客户端向Context Manager发送IPC数据,查询服务的编号,这个编号和服务,以及Binder节点以及Binder引用一一对应。
3.服务客户端访问Service Server的服务,通过编号对应到Binder节点和服务,直接对Service Server进行访问
Android Binder IPC详解-Android学习之旅(96)的更多相关文章
- Android Binder机制详解:手写IPC通信
想要掌握一样东西,最好的方式就是阅读理解它的源码.想要掌握Android Binder,最好的方式就是写一个AIDL文件,然后查看其生成的代码.本文的思路也是来自于此. 简介 Binder是Andro ...
- android binder机制详解
摘要 Binder是android中一个很重要且很复杂的概念,它在系统的整体运作中发挥着极其重要的作用,不过本文并不打算从深层次分析Binder机制,有两点原因:1是目前网上已经有2篇很好的文章了,2 ...
- Android系统服务详解-android学习之旅(95)
本文是看完android框架揭秘第六章后的总结 android系统服务提供最基本的,最稳定的核心功能,如设备控制,信息通知,通知设定,以及消息显示等,存在于Android Framework与Andr ...
- Android lifecycle 使用详解
版权声明:本文为博主原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/gdutxiaoxu/article/det ...
- 图文详解 Android Binder跨进程通信机制 原理
图文详解 Android Binder跨进程通信机制 原理 目录 目录 1. Binder到底是什么? 中文即 粘合剂,意思为粘合了两个不同的进程 网上有很多对Binder的定义,但都说不清楚:Bin ...
- Android AIDL使用详解_Android IPC 机制详解
一.概述 AIDL 意思即 Android Interface Definition Language,翻译过来就是Android接口定义语言,是用于定义服务器和客户端通信接口的一种描述语言,可以拿来 ...
- adb shell 命令详解,android
http://www.miui.com/article-275-1.html http://noobjava.iteye.com/blog/1914348 adb shell 命令详解,android ...
- Android Studio 插件开发详解三:翻译插件实战
转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/78113868 本文出自[赵彦军的博客] 一:概述 如果不了解插件开发基础的同学可以 ...
- Android Studio 插件开发详解一:入门练手
转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/78112003 本文出自[赵彦军的博客] 一:概述 相信大家在使用Android S ...
随机推荐
- iOS开发之使用block块进行数据遍历的方法
看了一篇文章,发现遍历数组.字典中的数据时,除了使用for循环外,还可以使用block块进行操作,瞬间感觉iOS的语言代码确实有点高大上的感觉,下面就简单的介绍一下这个方法. 首先是最基本的运用形式, ...
- ToolBar与AppcompatAcitivity实现浸入式Statusbar效果
toolbar是android sdk API21新增的组件,下面是谷歌官方的介绍文档: A standard toolbar for use within application content. ...
- Android水印相机
本篇文章实现的水印相机,类似于qq空间中的水印相机功能,因之前看过一个demo上实现了一个简陋的水印相机功能,觉得挺有意思,就在此基础上进行了修改,优化和完善,并增加了部分功能,使之更接近于qq水印相 ...
- XML Schema
XML Schema 是基于 XML 的 DTD 替代者. XML Schema 描述 XML 文档的结构. XML Schema 语言也称作 XMLSchema 定义(XML Schema Defi ...
- iOS中让Settings Bundle中的变化立即在App中反应出来的两种方法
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 为了能够在Settings Bundle中的变化在进入App后 ...
- myeclipse一直停留在Loading workbench界面上的处理办法
找到工作目录比如我的叫work,在.metadata中删掉以下两个文 件,再次重启myeclipse走一个! org.eclipse.ui.workbench org.eclipse.ui.workb ...
- 【嵌入式开发】 ARM 汇编 (指令分类 | 伪指令 | 协处理器访问指令)
作者 : 韩曙亮 博客地址 : http://blog.csdn.net/shulianghan/article/details/42408137 转载请著名出处 本博客相关文档下载 : -- AR ...
- Intent的Component,Action和Category属性详解-android学习之旅(五十)
Component属性 代码示例 public class MainActivity extends Activity{ @Override protected void onCreate(Bundl ...
- SVM 使用朗格朗日乘子得到权重向量
紧跟前一篇SVM博文,下面我们用数学推导来导出权重的计算方法.
- JAVA代理机制
JAVA代理相关主要知识如下: (1)利用代理可以在运行时创建一个实现了一组给定接口的新类. 这种功能只有在编译时无法确定需要实现哪个接口时才有必要使用. (2)假设有一个表示接口的C ...