mmap概念
  mmap是一种内存映射文件的方法,即将一个文件或者其它对象映射到进程的地址空间,实现文件磁盘地址和进程虚拟地址空间中一段虚拟地址的一一对映关系。 
  特点:实现这样的映射关系后,进程就可以采用指针的方式读写操作这一段内存,而系统会自动回写脏页面到对应的文件磁盘上,即完成了对文件的操作而不必再调用read,write等系统调用函数。相反,内核空间对这段区域的修改也直接反映用户空间,从而可以实现不同进程间的文件共享。如下图所示: 
  

mmap内存映射原理
  mmap内存映射的实现过程,总的来说可以分为三个阶段:

应用进程启动映射,在进程的虚拟地址空间中,寻找一段空闲的满足要求的连续的虚拟地址作为映射区域;
调用系统函数mmap,实现文件物理地址和进程虚拟地址的一一映射;
应用进程对映射区域访问,引发缺页异常,实现文件内容到物理内存(主存)的拷贝;
mmap优缺点
只有一次数据拷贝:当发生缺页异常时,直接将数据从磁盘拷贝到进程的用户空间,跳过了页缓存。
实现了用户空间和内核空间的高效交互方式:两空间的各自修改操作可以直接反映在映射的区域内,从而被对方空间及时捕捉。
提供进程间共享内存及相互通信的方式。 
  不管是父子进程还是无亲缘关系的进程,都可以将自身用户空间映射到同一个文件或匿名映射到同一片区域。从而通过各自对映射区域的改动,达到进程间通信和进程间共享的目的。 
  同时,如果进程A和进程B都映射了区域C,当A第一次读取C时通过缺页从磁盘复制文件页到内存中;但当B再读C的相同页面时,虽然也会产生缺页异常,但是不再需要从磁盘中复制文件过来,而可直接使用已经保存在内存中的文件数据。
mmap注意点
对于大文件而言,内存映射比普通IO流要快,小文件则未必;
不要经常调用MappedByteBuffer.force()方法,这个方法强制操作系统将内存中的内容写入硬盘,所以如果你在每次写内存映射文件后都调用force()方法,你就不能真正从内存映射文件中获益,而是跟disk IO差不多。
读写内存映射文件是操作系统来负责的,因此,即使你的Java程序在写入内存后就挂掉了,只要操作系统工作正常,数据就会写入磁盘。
如果电源故障或者主机瘫痪,有可能内存映射文件还没有写入磁盘,意味着可能会丢失一些关键数据
--------------------- 
作者:库昊天 
来源:CSDN 
原文:https://blog.csdn.net/yangguosb/article/details/77891275 
版权声明:本文为博主原创文章,转载请附上博文链接!

mmap内存映射原理相关推荐

  1. Linux内存管理子系统——mmap内存映射原理分析(dax文件系统的mmap)

    Linux mmap分析 内核版本:linux-5.16 1. 虚拟内存概要及相关内容简介 内存映射是学习过操作系统的大家都耳熟能详的词,理解起来也很简单.所谓"映射"就是为一种事 ...

  2. igs无法分配驱动器映射表_Linux的mmap内存映射原理到底是怎样的?

    在Unix/Linux系统下读写文件,一般有两种方式. 一种是open一个文件,然后使用read系统调用读取文件的一部分或全部.这个read过程是这样的:内核将文件中的数据从磁盘区域读取到内核页高速缓 ...

  3. mmap 内存映射详解

    目录 mmap基础概念 mmap内存映射原理 mmap示例代码 mmap和常规文件操作的区别 mmap使用的细节 前言 原文对 mmap 内存映射已经表述的很清楚了,我只是在原文的基础上,附上了 mm ...

  4. 一文搞懂内存映射原理及使用方法

    a. 内存映射原理 内存映射即在进程的虚拟地址空间中创建一个映射,分为两种: 文件映射:文件支持的内存映射,把文件的一个区间映射到进程的虚拟地址空间,数据源是存储设备上的文件. 匿名映射:没有文件支持 ...

  5. linux内存管理函数mmap和brk,brk() 和 mmap() 内存映射

    参考博文:http://www.cnblogs.com/huxiao-tee/p/4660352.html x86平台下linux进程虚拟地址空间分布(2.6.7以前版本) mmap区域与栈区域相对增 ...

  6. mmap内存映射、system V共享内存和Posix共享内存

    linux内核支持多种共享内存方式,如mmap内存映射,Posix共享内存,以system V共享内存.当内核空间和用户空间存在大量数据交互时,共享内存映射就成了这种情况下的不二选择.它能够最大限度的 ...

  7. 【Linux内核】内存映射原理

    [Linux内核]内存映射原理 物理地址空间 物理地址是处理器在总线上能看到的地址,使用RISC(Reduced Instruction Set Computing精简指令集)的处理器通常只实现一个物 ...

  8. Linux mmap内存映射

    将最近网上搜索的资料统一整理下,方便后续复查. 一.什么是mmap mmap是一种内存映射文件的方法,即将一个文件或者其它对象映射到进程的地址空间,实现文件磁盘地址和进程虚拟地址空间中一段虚拟地址的一 ...

  9. linux mmap 内存映射

    http://www.perfgeeks.com/?p=723 mmap() vs read()/write()/lseek() 通过strace统计系统调用的时候,经常可以看到mmap()与mmap ...

最新文章

  1. python aes_python AES 加密
  2. MySQL之INSERT
  3. Android操作系统2.0制作备份
  4. linux 启动一个网站_在线试用 200 多种 Linux 和 Unix 操作系统
  5. SqlServer2008备份与还原(完整图示版)
  6. 栈的顺序存储及实现(二)
  7. python计算区间内偶数和_Python 计算当真因子个数为偶数个时为幸运数,计算区间内幸运数之和...
  8. 生存分析——KM生存曲线、hazard比例、PH假定检验、非比例风险模型(分层/时变/参数模型)(二)
  9. 拓端tecdat|R语言用普通最小二乘OLS,广义相加模型GAM ,样条函数进行逻辑回归LOGISTIC分类
  10. 【路径规划】基于matlab任意架次植保无人机作业路径规划【含Matlab源码 322期】
  11. 微信OpenIdUnionID
  12. AD域权限分配_ADManager Plus对AD域管理有哪些帮助作用?
  13. 整理了100个必备的 Python 函数,值得收藏
  14. Linux下wm8978调试指南
  15. 使用Selenium模拟登陆百度盘
  16. 次坐标从0开始_三坐标测量机安全使用+量块校准操作规程
  17. yolov5训练结果解析
  18. 招标投标中各流程时间期限的规定
  19. ASP.NET的三层架构(DAL,BLL,UI)
  20. %05d和%5d的区别和联系

热门文章

  1. optaplanner学习笔记(二)OptPlanner求解步骤及配置
  2. 定积分的基本性质4 绝对可积性
  3. 统计学简介之九——两个总体参数的区间估计
  4. BIT计科小学期web前端开发lab1
  5. 如何快速定位 Redis 热 key
  6. 基于MATLAB的求解线性方程组(附完整代码和例题)
  7. CHIP-seq流程学习笔记(9)-使用IDR 软件对生物学重复样本间的差异peak进行提取
  8. 【不定期更新】游戏开发中的一些良好习惯与技术技巧
  9. 文本标注工具-brat安装
  10. win7任务计划提示”该任务映像已损坏或已篡改“