【Binder 机制】进程通信-正常情况 | 进程通信- mmap 内存映射 | Binder 机制重要组件

简介: 【Binder 机制】进程通信-正常情况 | 进程通信- mmap 内存映射 | Binder 机制重要组件

文章目录

一、进程通信-正常情况 ( 两次拷贝 )

二、进程通信- mmap 内存映射 ( 一次拷贝 )

三、Binder 机制重要组件 ( Client 客户端 、Server 服务端、Service Manager、Binder 驱动 )





一、进程通信-正常情况 ( 两次拷贝 )


Binder 通信机制 依赖于 共享的 内核空间 ;


正常情况下 , 进行进程间的通信 , 需要进行如下操作 : 进行 2 22 次数据拷贝 , 用户空间 -> 内核空间 -> 用户空间 ;


进程 B 发送消息给进程 A , 先将数据 从 进程 A 的 用户空间 缓冲区 写到 内核空间 缓冲区中 , 然后将数据从 内核空间 缓冲区 写到 进程 A 的 用户空间 缓冲区 中 ;


image.png






二、进程通信- mmap 内存映射 ( 一次拷贝 )


Binder 可以只进行 一次拷贝 , 就可以完成跨进程通信 , 该依次拷贝是基于 内存映射 完成的 ;


内存映射 就是 基于 Memory Map 函数 mmap 进行的 ;


参考零拷贝原理 【Netty】mmap 和 sendFile 零拷贝原理 博客 ;


在 进程A 内存中 , 没有在自己的 用户空间 内存中申请 通信的数据缓冲区 , 而是在 内核空间 中申请了一块 进程 A 的缓冲区 ,






三、Binder 机制重要组件 ( Client 客户端 、Server 服务端、Service Manager、Binder 驱动 )


Binder 机制是 C/S 架构的 , Client / Server , 客户端就是进程 , 服务器就是系统的服务 ;


Service Manager 运行在 用户空间 , 负责管理 Server 服务器的 注册服务 功能 ;


Service 服务 需要 先注册 , 客户端 才能获取该 Service 服务 ;



客户端 , 服务端 , Service Manger , 都可以通过 ioctl 调用 Binder 驱动 ;



下图是 Binder 机制中的 4 44 个重要组成部分 , Client 客户端 , Server 服务端 , Service Manager , Binder 驱动 ;


image.png


进程 A 与 进程 B 之间通信 , 先通过 ServiceManager 获取 Binder 驱动的代理 , 然后使用对应的服务 ;


AIDL ( Android Interface Definition Language ) 安卓接口定义语言 , 定义一些接口 , 让两个进程之间可以进行相互通信 ;



目录
相关文章
|
2月前
|
存储 监控 算法
Java中的内存管理:理解Garbage Collection机制
本文将深入探讨Java编程语言中的内存管理,着重介绍垃圾回收(Garbage Collection, GC)机制。通过阐述GC的工作原理、常见算法及其在Java中的应用,帮助读者提高程序的性能和稳定性。我们将从基本原理出发,逐步深入到调优实践,为开发者提供一套系统的理解和优化Java应用中内存管理的方法。
|
27天前
|
存储 Unix Linux
进程间通信方式-----管道通信
【10月更文挑战第29天】管道通信是一种重要的进程间通信机制,它为进程间的数据传输和同步提供了一种简单有效的方法。通过合理地使用管道通信,可以实现不同进程之间的协作,提高系统的整体性能和效率。
|
27天前
|
消息中间件 存储 供应链
进程间通信方式-----消息队列通信
【10月更文挑战第29天】消息队列通信是一种强大而灵活的进程间通信机制,它通过异步通信、解耦和缓冲等特性,为分布式系统和多进程应用提供了高效的通信方式。在实际应用中,需要根据具体的需求和场景,合理地选择和使用消息队列,以充分发挥其优势,同时注意其可能带来的复杂性和性能开销等问题。
|
29天前
|
消息中间件 存储 Linux
|
1月前
|
存储 算法 Java
Go语言的内存管理机制
【10月更文挑战第25天】Go语言的内存管理机制
23 2
|
1月前
|
存储 运维 Java
💻Java零基础:深入了解Java内存机制
【10月更文挑战第18天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
33 1
|
2月前
|
存储 安全 NoSQL
driftingblues9 - 溢出ASLR(内存地址随机化机制)
driftingblues9 - 溢出ASLR(内存地址随机化机制)
38 1
|
2月前
|
存储 Python
Python中的多进程通信实践指南
Python中的多进程通信实践指南
24 0
|
2月前
|
Linux C++
Linux c/c++文件虚拟内存映射
这篇文章介绍了在Linux环境下,如何使用虚拟内存映射技术来提高文件读写的速度,并通过C/C++代码示例展示了文件映射的整个流程。
50 0
|
5月前
|
运维 关系型数据库 MySQL
掌握taskset:优化你的Linux进程,提升系统性能
在多核处理器成为现代计算标准的今天,运维人员和性能调优人员面临着如何有效利用这些处理能力的挑战。优化进程运行的位置不仅可以提高性能,还能更好地管理和分配系统资源。 其中,taskset命令是一个强大的工具,它允许管理员将进程绑定到特定的CPU核心,减少上下文切换的开销,从而提升整体效率。
掌握taskset:优化你的Linux进程,提升系统性能