美文网首页
Android Binder跨进程通信—— 内存映射

Android Binder跨进程通信—— 内存映射

作者: Darren的徒弟 | 来源:发表于2020-04-01 20:15 被阅读0次

前言

  • 内存映射Linux操作系统中非常重要,因为其涉及到高效的跨进程通信 & 文件操作
  • 今天,我将详细讲解操作系统中核心概念:内存映射

目录

image

1. 定义

关联 进程中的1个虚拟内存区域 & 1个磁盘上的对象,使得二者存在映射关系

  1. 上述的映射过程 = 初始化该虚拟内存区域
  2. 虚拟内存区域被初始化后,就会在交换空间中换你来还去
  3. 被映射的对象称为:共享对象(普通文件 / 匿名文件)

2. 作用

若存在上述映射关系,则具备以下特征

  • 在多个进程的虚拟内存区域 已和同1个共享对象 建立映射关系的前提下
  • 若 其中1个进程对该虚拟区域进行写操作
  • 那么,对于 也把该共享对象映射到其自身虚拟内存区域的进程 也是可见的

示意图如下

  1. 假设进程1、2的虚拟内存区域同时映射到同1个共享对象;
  2. 当进程1对其虚拟内存区域进行写操作时,也会映射到进程2中的虚拟内存区域
image

3. 实现过程

  • 内存映射的实现过程主要是通过Linux系统下的系统调用函数:mmap()
  • 该函数的作用 = 创建虚拟内存区域 + 与共享对象建立映射关系
  • 其函数原型、具体使用 & 内部流程 如下
/**
  * 函数原型
  */
void *mmap(void *start, size_t length, int prot, int flags, int fd, off_t offset);

/**
  * 具体使用(用户进程调用mmap())
  * 下述代码即常见了一片大小 = MAP_SIZE的接收缓存区 & 关联到共享对象中(即建立映射)
  */
  mmap(NULL, MAP_SIZE, PROT_READ, MAP_PRIVATE, fd, 0);

/**
  * 内部原理
  * 步骤1:创建虚拟内存区域
  * 步骤2:实现地址映射关系,即:进程的虚拟地址空间 ->> 共享对象
  * 注: 
  *    a. 此时,该虚拟地址并没有任何数据关联到文件中,仅仅只是建立映射关系
  *    b. 当其中1个进程对虚拟内存写入数据时,则真正实现了数据的可见
  */

4. 特点

  • 提高数据的读、写 & 传输的时间性能
    1. 减少了数据拷贝次数
    2. 用户空间 & 内核空间的高效交互(通过映射的区域 直接交互)
    3. 用内存读写 代替 I/O读写
  • 提高内存利用率:通过虚拟内存 & 共享对象

5. 应用场景

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

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

6. 实例讲解

下面,我将详细讲解 内存映射应用在跨进程通信 & 文件操作的实例

6.1 文件读 / 写操作

  • 传统的Linux系统文件操作流程如下
image
  • 使用了内存映射的 文件读 / 写 操作
image

从上面可看出:使用了内存映射的文件读/写 操作方式效率更加高、性能最好!

6.2 跨进程通信

  • 传统的跨进程通信
image
  • 使用了内存映射的 跨进程通信
image

从上面可看出:使用了内存映射的跨进程通信 效率最高、性能最好!

相关文章

  • Android Binder机制

    Binder简介 binder使用内存映射(mmap)来实现进程间传递数据,比较传统的进程间通信. binder只...

  • 零散的小知识记录(待补充和修改)

    Android跨进程通信:Binder,socket/管道/消息队列,共享内存; linux进程间通信:管道,Bi...

  • Android Binder跨进程通信—— 内存映射

    前言 内存映射 在 Linux操作系统中非常重要,因为其涉及到高效的跨进程通信 & 文件操作 今天,我将详细讲解操...

  • Binder机制

    进程间通信方式 Android Binder框架图 Android系统框架 IPC 进程通信原理 Binder原理...

  • AIDL

    google-AIDL在Android ,进程独立,内存也独立,IPC binder 通信,数据与进程绑定,使用完...

  • Android学习--binder机制(一)原理

    前言 binder是Android的一套进程间通信框架,用来跨进程发送消息,同步和共享内存。 1.进程间通信 进程...

  • Android 高级之跨进程通信(IPC)

    先看一下 Android 中跨进程通信的方式: Binder Binder 是 Android 系统进程间通信(I...

  • Android进程间的通信

    Android进程间通信的方式有很多种,例如:文件通信、共享内存、Binder、Socket、管道、信号等等作为A...

  • Android IPC 面试题

    1.1 请回答一下Android进程间的通信方式? 文件通信、共享内存、Binder、Socket、管道、信号等在...

  • Android多进程之Binder的使用

    Android多进程系列 Android 多进程通信之几个基本问题 Binder是什么 Binder是Androi...

网友评论

      本文标题:Android Binder跨进程通信—— 内存映射

      本文链接:https://www.haomeiwen.com/subject/weqzuhtx.html