文档章节

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

fengsehng
 fengsehng
发布于 2016/11/09 09:18
字数 761
阅读 12
收藏 1

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

© 著作权归作者所有

共有 人打赏支持
fengsehng
粉丝 4
博文 284
码字总数 214494
作品 0
朝阳
程序员
一份关于 Java、Kotlin 与 Android 的学习笔记

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

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

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

猴亮屏
2017/10/19
0
0
Android 核心分析 之六 -----IPC框架分析 Binder,Service,Se...

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

LiSteven
2013/08/23
0
0
Android之旅[1] - Architecture

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

开源中国驻成都办事处
2012/11/19
0
0
Android系统的Binder机制之一——Service Manager

Android虽然构建在Linux上面,但是在IPC(进程间)机制方面,没有利用Linux提供IPC机制,而是自己实现了一套轻量级的IPC机制——binder机制。并且Android Binder机制之上,Android框架提供了...

垂盆草
2012/08/04
0
0

没有更多内容

加载失败,请刷新页面

加载更多

SSO单点登录PHP简单版

  前面做了一个新项目,需要用户资源可以需要共享。由于之前没有做过这样的东西,回家之后,立马网站百度“单点登录”。帖子很多,甄别之后,这里列几篇认为比较有营养。   http://blog...

slagga
15分钟前
0
0
Java 泛型详解-绝对是对泛型方法讲解最详细的,没有之一

对java的泛型特性的了解仅限于表面的浅浅一层,直到在学习设计模式时发现有不了解的用法,才想起详细的记录一下。 本文参考java 泛型详解、Java中的泛型方法、 java泛型详解 1 概述 泛型在j...

hensemlee
18分钟前
0
0
Annotation注解详细介绍

目录介绍 1.Annotation库的简单介绍 2.@Nullable和@NonNull 3.资源类型注释 4.类型定义注释 5.线程注释 6.RGB颜色纸注释 7.值范围注释 8.权限注释 9.重写函数注释 10.返回值注释 11.@Keep注释...

潇湘剑雨
20分钟前
0
0
一步步编写自己的PHP爬取代理IP项目(二)

这一章节我们正式开展我们的爬虫项目,首先我们先要知道哪个网站能获取到免费代理IP,目前比较火的有西刺代理,快代理等,这里我们拿西刺代理作为例子。 这里就是一个个免费的IP地址以及各自...

NateHuang
39分钟前
1
0
11-利用思维导图梳理JavaSE-Java的反射机制

11-利用思维导图梳理JavaSE-Java的反射机制 主要内容 1.反射与Class类 1.1.反射概念 1.2.Class类 1.3.实例化Class类 1.4.反射的作用 1.5.Class对象的作用 2.反射的深入应用 2.1.调用无参的成...

飞鱼说编程
45分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部