前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Binder 机制】进程通信-正常情况 | 进程通信- mmap 内存映射 | Binder 机制重要组件

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

作者头像
韩曙亮
发布2023-03-29 17:20:28
6600
发布2023-03-29 17:20:28
举报
文章被收录于专栏:韩曙亮的移动开发专栏

文章目录

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


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

正常情况下 , 进行进程间的通信 , 需要进行如下操作 : 进行

2

次数据拷贝 , 用户空间 -> 内核空间 -> 用户空间 ;

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

在这里插入图片描述
在这里插入图片描述

二、进程通信- 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

个重要组成部分 , Client 客户端 , Server 服务端 , Service Manager , Binder 驱动 ;

在这里插入图片描述
在这里插入图片描述

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

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

在这里插入图片描述
在这里插入图片描述
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-09-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 一、进程通信-正常情况 ( 两次拷贝 )
  • 二、进程通信- mmap 内存映射 ( 一次拷贝 )
  • 三、Binder 机制重要组件 ( Client 客户端 、Server 服务端、Service Manager、Binder 驱动 )
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档