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

定义

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

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

作用

若存在上述映射关系,则具备以下特征:在多个进程的虚拟内存区域已和同1个共享对象建立映射关系的前提下,若其中1个进程对该虚拟区域进行写操作,那么对于也把该共享对象映射到其自身虚拟内存区域的进程也是可见的。
示意图如下:

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

实现过程

内存映射的实现过程主要是通过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个进程对虚拟内存写入数据时,则真正实现了数据的可见*/

特点

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

应用场景

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

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

参考:
操作系统:图文详解 内存映射
理解虚拟内存机制

内存映射(Memory Map)相关推荐

  1. S32K144学习笔记:3 寄存器映射(Memory Map)

    3.1 介绍 此芯片包含各种存储器和内存映射外围设备,它们位于一个32位的连续内存空间中.本章描述了该内存空间内的内存和外围位置. 有关内存映射的详细信息显示在附加到本文档的电子表格中:s32k1xx ...

  2. 全面介绍Windows内存管理机制及C++内存分配实例(四):内存映射文件

    本文背景: 在编程中,很多Windows或C++的内存函数不知道有什么区别,更别谈有效使用:根本的原因是,没有清楚的理解操作系统的内存管理机制,本文企图通过简单的总结描述,结合实例来阐明这个机制. 本 ...

  3. windows 内存映射文件

    4.内存管理机制--内存映射文件 (Map)    和虚拟内存一样,内存映射文件可以用来保留一个进程地址区域:但是,与虚拟内存不同,它提交的不是物理内存或是虚拟页文件,而是硬盘上的文件. ·使用场合 ...

  4. Java NIO内存映射文件

    Java NIO 内存映射文件 文件操作的四大方法 效率对比 内存映射文件 缓冲区 缓冲区的获得: 文件加锁机制 文件锁使用注意点: 文件操作的四大方法 前提:内存的访问速度比磁盘高几个数量级,但是基 ...

  5. 底板芯片组与内存映射(Motherboard Chipsets and the Memory Map) 【转】

    转自:http://blog.chinaunix.net/uid-25909619-id-4194650.html 底板芯片组与内存映射 我打算写一些关于计算机内部构造(computer intern ...

  6. Linux 进程通信之:内存映射(Memory Map)

    一.简介 正如其名(Memory Map),mmap 可以将某个设备或者文件映射到应用进程的内存空间中.通过直接的内存操作即可完成对设备或文件的读写.. 通过映射同一块物理内存,来实现共享内存,完成进 ...

  7. Android漫游记(1)---内存映射镜像(memory maps)

    Android系统内核基于Linux2.6+内核,因此,其在进程内存管理方面的非常多机制和Linux是非常相像的.首先,让我们来看一个典型的Android进程的内存镜像(App进程和Native本地进 ...

  8. TC297 Memory Maps 内存映射

    TC297的框图 3.Memory Maps 内存映射 TC29x CPU相关内存如下: PMU0(程序存储器单元)特点如下: -8M 程序闪存 -Data Flash Memory -User Co ...

  9. IO的端口映射和内存映射 (Port mapped I/O 和 Memory mapped I/O说明)

    IO端口和IO内存的区别及分别使用的函数接口  每个外设都是通过读写其寄存器来控制的.外设寄存器也称为I/O端口,通常包括:控制寄存器.状态寄存器和数据寄存器三大类.根据访问外设寄存器的不同方式,可以 ...

  10. jvm 堆外内存_NIO效率高的原理之零拷贝与直接内存映射

    更多内容,欢迎关注微信公众号:全菜工程师小辉~ 前言 在笔者上一篇博客,详解了NIO,并总结NIO相比BIO的效率要高的三个原因,彻底搞懂NIO效率高的原理. 这篇博客将针对第三个原因,进行更详细的讲 ...

最新文章

  1. Opencv实现透视形变
  2. 记:返回方法参数的值(或多个值),
  3. dubbo服务者配置说明
  4. Spring 配置元数据
  5. 重口味动漫_每种口味的图标样式
  6. vue 用key拿对象value_利用 WeakMap 对 Vue 新建数组中的对象赋予 :key
  7. 基于前端HTML+CSS+JS实现2022城市新年贺卡特效
  8. 互联网教育+大数据=新型大学?
  9. selenium 实现循环点击_-循环点击遇到的坑(每次点击后返回,页面元素都会变化的解决方法)...
  10. 【Shell】特殊变量
  11. vb连接mysql未发现_vb连接mysql(错误代码)
  12. 给宝宝的固态硬盘装机教程
  13. Android程序员简历
  14. 计算网路地址,广播地址,第一位和最后一位可用地址,可用的IP地址
  15. 创业路演前准备好这些,距离融资成功还会远吗?
  16. 设置无线路由器与有线网络在同一网段
  17. poj1985和poj1849(树的直径)
  18. java jta mysql_JTA实现跨数据库操作
  19. Android录音下————AudioRecord源码分析
  20. 事件分发机制Android,宅家36天咸鱼翻身入职腾讯,复习指南

热门文章

  1. Nvivo用法--数据可视化工具
  2. 利用计算机画统计图教学设计,小学数学人教版四年级上册《条形统计图》教学设计及反思...
  3. 特殊矩阵——三对角矩阵(Tridiagonal Matrix)
  4. DFT与DTFT的区别?
  5. 计算机网络体系结构(详图)
  6. 常见的web前端面试试题(含答案)
  7. java 摄像头_javacv调用摄像头拍照
  8. 计算机操作系统(第四版)课后习题答案(完整版)---汤小丹 梁红兵 哲凤屏 汤子瀛 版本
  9. (图文)最详细的XAMPP的安装及使用教程
  10. INSPINIA ADMIN 开发框架