文档章节

Android Binder IPC详解-Android学习之旅(96)

fengsehng
 fengsehng
发布于 2016/11/09 09:08
字数 761
阅读 3
收藏 0

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进行访问

本文转载自:http://blog.csdn.net/lpjishu/article/details/50803196

fengsehng
粉丝 4
博文 284
码字总数 214494
作品 0
朝阳
程序员
私信 提问
一份关于 Java、Kotlin 与 Android 的学习笔记

JavaKotlinAndroidLearn 这是一份关于 Java 、Kotlin 、Android 的学习笔记,既包含对基础知识点的介绍,也包含对一些重要知识点的源码解析,笔记的大纲如下所示: Java 重拾Java(0)-基础知...

叶应是叶
2018/08/08
0
0
Android 源码分析之旅1--系统架构与分析方法、工具

《Android 源码分析之旅》目录 apefwkall.png 《Android 源码分析之旅》的全部目录将作如下安排: 第1章节——本篇文章,将介绍一些基本的概念、方法、工具。 第2章节——着重介绍Binder IP...

猴亮屏
2017/10/19
0
0
Android之旅[1] - Architecture

本文只要是阅读Anatomy-Physiology-of-an-Android的随笔记录。 Anatomy意为解剖,是一种静态视角。Physiology意为生理,是一种动态视角。原文就是通过这两种角度来分析Android的。 Android基...

开源中国驻成都办事处
2012/11/19
0
0
Android 核心分析 之六 -----IPC框架分析 Binder,Service,Se...

我首先从宏观的角度观察Binder,Service,Service Manager,并阐述各自的概念。从Linux的概念空间中,Android的设计Activity托管在不同的的进程,Service也都是托管在不同的进程,不同进程间的...

LiSteven
2013/08/23
0
0
知识总结 插件化学习 Binder机制原理

Binder是android系统特有IPC方式,安卓平台中的各种服务交互基本都是Binder机制实现,理解和掌握Binder机制的实现原理可有效提升软件性能优化点,同时Binder机制的应用也是动态代理方式实现插...

常兴E站
2017/06/05
0
0

没有更多内容

加载失败,请刷新页面

加载更多

NIO基于长度域的报文在Netty下的解码

1, 先复习一下粘包/拆包 1.1, 粘包/拆包的含义 TCP是个“流”协议, 并不了解上层业务数据的具体含义, 它会根据TCP缓冲区的实际情况进行包的划分,所以在业务上认为,一个完整的包可能会被TCP...

老菜鸟0217
今天
8
0
从零开始搭建spring-cloud(2) ----ribbon

在微服务架构中,业务都会被拆分成一个独立的服务,服务与服务的通讯是基于http restful的。Spring cloud有两种服务调用方式,一种是ribbon+restTemplate,另一种是feign。 其实我们已经在上...

Vincent-Duan
今天
19
0
get和post的区别?

doGet:路径传参。效率高,安全性差(get的传送数据量有限制,不能大于2Kb) doPOST:实体传参。效率低,安全性好 建议: 1、get方式的安全性较Post方式要差些,包含机密信息的话,建议用Pos...

花无谢
昨天
4
0
当谈论迭代器时,我谈些什么?

当谈论迭代器时,我谈些什么? 花下猫语:之前说过,我对于编程语言跟其它学科的融合非常感兴趣,但我还说漏了一点,就是我对于 Python 跟其它编程语言的对比学习,也很感兴趣。所以,我一直...

豌豆花下猫
昨天
14
0
10天学Python直接做项目,我做了这5件事

初学者如何尽快上手python? 市面上关于如何学python的资料很多,但是讲的都太复杂。 我就是很简单的几句话,从小白到开发工程师,我只做了五件事。 我觉得任何商业计划书如果不能用几句话讲...

Python派森
昨天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部