Android---Binder进程间通信机制1

news2025/2/27 3:05:49

1 binder 是什么?

\bullet 进程间通信机制(一个进程可以理解为一个 app

\bullet 是一个驱动

\bullet Binder.java(implement Ibinder) --> 写一个类 extends Binder.jiva 就有了跨进程的能力。

 跨进程的应用:

 \bullet 自己创建的进程:webView、视频播放、音乐、大图浏览和推送

 \bullet 系统服务:打电话,闹钟等等

2 Android 为什么要增加Binder?为什么面试要问 Binder?Binder 有什么优势?

Linux 进程间通信机制有:管道、信号量、socket、共享内存等。而 android 增加 binder 肯定是比 linux 进程间通信机制更好。

Binder 的性能仅次于“共享内存”优于其它 IPC(进程间通信机制) ,有很多有点。

Binder 与其它 IPC 对比

 Binder 如何实现一次拷贝?

内存划分:

内存被操作系统划分称两块:用户空间内核空间。用户空间是用户程序代码运行的地方,内核空间是内核代码运行的地方。为了安全,它们是隔离的,即使用户程序崩溃了,内核也不受影响。

 传统 IPC 传输数据时的两次拷贝

 第一次copy, 通过系统调用 copy_from_user() 将数据从用户空间 copy 到内核缓存区; 第二次 copy通过调用 copy_to_user() 将数据从内核空间 copy 到用户空间。用户空间和内核空间都是虚拟内存,我们只能操作虚拟内存。

Binder 传输数据时的一次拷贝

数据发送方通过 copy_from_user() 将数据发送到内核地址空间(一次拷贝),内核地址空间与接收方映射了同一块物理内存(binder map空间),接收方通过 mmap(内存映射) 技术就能直接在共同的物理空间中接收数据。内核地址空间与接收方通过mmap 技术实现内存共享的。

mmap(memory mapping) 原理

Linux 通过将一个虚拟内存区域与一个磁盘上的物理区域的对象关联起来,以初始化这个虚拟内城区区域的内容,这个过程称为内存映射(Memory Mapping)

mmap 能够让虚拟内存与指定的物理内存直接联系起来。

共享内存

发送方、接收方、内核都通过mmap 共享同一块内存。所以 Binder 相当于是"半共享内存"。

进程间是怎么实现通信的?

假设:进程A,进程B(有一个 test 方法),进程A 想要调用进程B的 test 方法,在进程A 中 new B.test() 显然是不行的。因为进程间的内存是隔离的。

Binder 驱动设备

binder_init:

1 分配内存;2 初始化设备;3 放入链表 binder_devices

binder_open:

1 创建 binder_proc 对象;2 保存当前进程信息到 proc

3 file-->private_data = proc; 4 添加到 binder_procs 链表中

binder_mmap:

struct vm_struc *area ---> 内核的虚拟内存;vma ---> 进程的虚拟内存

1 通过用户空间的虚拟内存大小,分配一块内核的虚拟内存;

2 分配了一块物理内存 ---4KB;

3 把这块物理内存分别映射到用户的虚拟内存和内核的虚拟内存;

binder_ioctl:

读写操作

binder 的 jni 注册:

目的: java 和 jni 能够相互调用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/379869.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

taobao.appstore.subscribe.get( 查询appstore应用订购关系 )

¥开放平台基础API不需用户授权 查询appstore应用订购关系(对于新上架的多版本应用,建议使用taobao.vas.subscribe.get) 公共参数 请求地址: HTTP地址 http://gw.api.taobao.com/router/rest 公共请求参数: 公共响应参数: 响应参数 点击获取key和secre…

【计算机体系结构-04】流水线:基础与中级概念 (Pipelinling: Basic and Intermediate Concepts)

1. 借题引入 在亚当斯密所著的《国富论》一书中有描述过这样的场景,扣针制造业中制造一个扣针需要先后完成抽铁丝、拉直、切截、削尖铁丝的一端、打磨铁丝的另一端(以便安装圆头),制作圆头也需要二三种不同的操作,包括…

jsp拆迁管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 JSP 拆迁管理系统是一套完善的java web信息管理系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql5.0&…

java 批量插入千万条数据优化方案【值得收藏】

场景介绍 再实际开发应用中总会面临导入大批量数据插入数据库、数据迁移、同步等操作在java 后台执行,执行效率的优化问题随之而来!比如如何快速往MySQL数据库中导入1000万数据 mybatis 2、MySQL中新建一张user表,为了方便演示只保留id、昵称…

【docker】入门

注:最后有面试挑战,看看自己掌握了吗 文章目录docker是什么?Docker Engine overview概述什么是容器container?什么是容器映像 image?官方解释什么是container和container imageDocker objectsImages - 一个用来创建doc…

任务3、监控界面设计

【任务描述】本任务要求使用相对布局或约束布局以及相应的控件完成智慧园区监控系统界面开发一、相对布局(RelativeLayout)概述相对布局(RelativeLayout)是一种根据父容器和兄弟控件作为参照来确定控件位置的布局方式。使用相对布…

Camera Java Native Interface(JNI)介绍

Camera Java Native Interface(JNI)介绍Java Native Interface(JNI)概述Our Goal一、JNI启动流程二、Camera JNI 动态注册1.引入库ReferenceblogCode Address:Java Native Interface(JNI)概述 Android系统…

【软件测试】2023年了还不会接口测试?老鸟总结接口测试面试谁还敢说我不会......

目录:导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜)前言 测试面试&#xff0…

[Java解惑]读书笔记分享

[Java解惑]读书笔记分享 这本书主要讲了Java中经常遇到的坑, 并给出了解释以及解决办法. 读完之后很有收获 读书笔记 表达式之谜 奇数性 用下面的表达式判断一个数是否是奇数 public static boolean isOdd(int i) {return i % 2 1;}问题: 负数无法得出正确的结果. 例如当 i …

建模杂谈系列210 人工智能培训内容梳理

说明 最近打算做一次针对银行的人工智能培训,这里梳理一下培训内容的大纲。以前做过一次很细致的培训,但是现在感觉当时很多文档和内容整理的还是不够方便。 借此机会把这些内容整理好,分门别类放好,争取再有一下次培训的时候可…

嵌入式开发:实时系统中的嵌入式数据库

“实时”这个术语是数据库系统供应商随便说说的,但是实时在嵌入式系统中一直有特定的含义。“实时系统意味着系统是实时的,换句话说,响应应该在指定的时间限制内得到保证,或者系统应该满足指定的期限。例如,飞行控制系…

单目标应用:蜣螂优化算法DBO优化RBF神经网络实现数据预测(提供MATLAB代码)

一、RBF神经网络 1988年,Broomhead和Lowc根据生物神经元具有局部响应这一特点,将RBF引入神经网络设计中,产生了RBF(Radical Basis Function)。1989年,Jackson论证了RBF神经网络对非线性连续函数的一致逼近性能。 RBF的基本思想是…

【面试题】对async/await 的了解?

前言大厂面试题分享 面试题库后端面试题库 (面试必备) 推荐:★★★★★地址:前端面试题库“编程,就像一场开卷考试,题目的答案取决于对书本内容的熟悉程度;而一份源代码就好比一本书&#xff0c…

源码才十几行的数组转换工具arrify,快学起来

前言 前几天在项目中运用到了arrify工具,今天便阅读了arrify的源码,整个源码部分不过才十几行,而且也不难,所以来分享一下阅读心得。 arrify介绍 arrify是什么,有什么作用,或许有些小伙伴还不清楚。简单…

web测试的基本流程

1、web测试流程: (1)web测试 1)参与一个web新项目的测试前,先搜集测试相关的资料,包括原型图、各种需求文档、业务相关等需求相关材料 2)结合第一步搜集到的需求相关资料,自行熟悉系统,同时列出不明白的点,…

时间API在更新,传奇已经谢幕,但技术永远不死

(Bill Joy(左一),Vinod Khosla(左二),Andy Bechtolsheim(右二),Scott McNealy(右一) ) CSDN 博文征集活动(和日期相关的代码和bug):点击这里 各位 “big guys”,这篇博文…

植物大战 二叉搜索树——C++

这里是目录标题二叉排序树的概念模拟二叉搜索树定义节点类insert非递归Finderase(重点)析构函数拷贝构造(深拷贝)赋值构造递归FindRInsertR二叉搜索树的应用k模型KV模型二叉排序树的概念 单纯的二叉树存储数据没有太大的作用。 搜索二叉树作用很大。 搜索二叉树的一般都是用…

摸鱼用python获取弹幕的两种方式【前者简单,后者数据好看】

嗨害大家好鸭!我是小熊猫~ 相信大家对于 “弹幕文化” 已经相当熟悉啦 你不是一个人在看——这就是弹幕网站的存在感。 它形成了新的“抱团”观看模式, 也真正实现了无时空距离的社交。 有网友表示,弹幕简直比剧情还有趣。 看似简单的寥寥…

【ES】Elasticsearch-深入理解索引原理

文章目录Elasticsearch-深入理解索引原理读操作更新操作SHARD不变性动态更新索引删除和更新实时索引更新持久化Segment合并近实时搜索,段数据刷新,数据可见性更新和事务日志更新索引并且将改动提交修改Searcher对象默认的更新时间Elasticsearch-深入理解…

CentOS8基础篇9:进程的延迟与周期调度

一、进程的概念 进程:开始执行但是还没有结束的程序的实例 程序:包含可执行代码的文件 进程与程序的关系 进程由程序产生,是一个运行着的、要占系统资源的程序 进程不等于程序 浏览网络时,打开多个IE浏览器程序;…