栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

深刻理解Binder机制

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

深刻理解Binder机制

首先是我为什么要写这篇文章,有几点原因:其一,市面上能讲清楚Binder的文章很少,而且很多文章会让人看的云里雾里,不知所云;其二,很多同学对这一块也不是很理解,尽管很多人已经工作了很多年。

我特地去查了一下Binder的英文翻译:

Binder机制其实是用于进程间通信的,可以理解为进程之间的粘合剂。

 Binder到底是什么?

从机制,模型角度来说:Binder是一种Android中实现跨进程通信(IPC)的方式,用于实现Android中跨进程通信。【Binder机制】

从模型,结构组成来说:Binder是一种虚拟的物理设备驱动,链接Service进程,Client进程和Service Manager进程。【Binder驱动】

从Android代码实现角度来说:Binder是一个类,实现了IBinder接口,是Binder机制的在Android代码中的实现。【Binder类】

本文也将从Binder机制到Binder驱动,再到Binder类来层层深入。

在讲解Binder前,先普及一下linux的一些基础知识:

进程空间划分为用户空间和内核空间,进程之间用户空间的数据不可共享,内核空间数据可以共享。

来看一张图:

 进程内用户空间 & 内核空间进行交互需通过 系统调用,主要通过函数:

copy_from_user和copy_to_user。

进程隔离为了保证安全性 & 独立性,一个进程不能直接操作或者访问另一个进程,即 Android 的进程是 相互独 立、隔离的。跨进程通信(IPC )即进程间需进行数据交互、通信。 跨进程通信的基本原理:

 

IPC其中一种方式就是通过共享内存的方式,但是这种方式需要拷贝两次数据,很明显效率低下。而且接受进程也不知道所需要接受的数据大小,不知道需要多大的缓存,一般是开辟尽量大的空间,很明显会浪费空间。

而 Binder 的作用则是:连接两个进程,实现了mmap()系统调用,主要负责创建数据接收的缓存空间 & 管理数据接收缓存 。传统的跨进程通信需拷贝数据2次,但 Binder 机制只需1次,主要是使用到了内存映射。 什么是内存映射?

内存映射在linux操作系统中非常重要,涉及到高效率的跨进程通信和文件操作。

void *mmap(void *start, size_t length, int prot, int flags, int fd, off_t offset);


  mmap(NULL, MAP_SIZE, PROT_READ, MAP_PRIVATE, fd, 0);

在Linux系统下,根据内存映射的本质原理 & 特点,其应用场景在于:

  1. 实现内存共享:如 跨进程通信
  2. 提高数据读 / 写效率 :如 文件读 / 写操作

文件读/写操作:

传统linux操作系统文件操作流程:

 使用内存映射文件读/写操作:

 使用了内存映射的跨进程通信:

 Binder跨进程通信的核心原理:

 模型原理步骤说明:

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/631211.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号