写在前面:这是本人初入研究方法时做的笔记作为学习的输出,其中可能存在一些认知上的错误。若您有自己的见解,希望你可以在本文结尾给我留言或直接邮件联系我,与我讨论。

谢谢!

email:zhaos@nbjl.nankai.edu.cn

一. 内存映射(Memory-mapped)

内存映射(mmap)是一种内存映射文件的方法,即将一个文件或者其他对象映射到进程的地址空间,实现文件磁盘地址和应用程序进程虚拟地址空间中一段虚拟地址的一一映射关系。实现这样的映射关系后,进程就可以采用指针的方式读写操作这一段内存,而系统会自动回写藏页面到对应的文件磁盘上。应用程序处理映射部分如同访问主存。

图1. 内存映射文件(图片来源https://www.cnblogs.com/huxiao-tee/p/4660352.html)

二. mmap内存映射原理

(1)线程启动映射过程,并在虚拟地址空间中为映射创建虚拟映射区域。

先在用户空间调用库函数mmap,并在进程当前进程的虚拟地址空间中,寻找一段空闲的满足要求的连续虚拟地址作为内存虚拟映射区域,对此区域初始化并插入进程的虚拟地址区域链表或树中。

(2)系统在内核空间调用内核函数mmap,实现文件物理地址和进程虚拟地址之间的一一映射关系。

(3)进程发起堆这片映射空间的访问

进程读写操作访问虚拟地址,查询页表,发现这一段地址并不在内存的物理页面上,因为虽然建立了映射关系,但是还没有将文件从磁盘移到内存中。由此发生缺页中断,内核请求从磁盘调入页面。调页过程先在交换缓存空间(swap cache)中查找,若没有则通过nopage函数把缺失页从磁盘调入内存。之后进程会对其做读写操作,若写操作改变了页面内容,一段时间后系统会自动回写脏页面到磁盘中。(修改过的脏页面不会立即更新到文件中,可以调用msync来强制同步,写入文件)

三. mmap和分页文件操作的区别

区别在于分页文件操作在进程访存时是需要先查询页面缓存(page cache)的,若发生缺页中断,需要通过inode定位文件磁盘地址,先把缺失文件复制到page cache,再从page cache复制到内存中,才能进行访问。这样访存需要经过两次文件复制,写操作也是一样。总结来说,常规文件操作为了提高读写效率和保护磁盘,使用了页缓存机制。这样造成读文件时需要先将文件页从磁盘拷贝到页缓存中,由于页缓存处在内核空间,不能被用户进程直接寻址,所以还需要将页缓存中数据页再次拷贝到内存对应的用户空间中。但mmap的优势在于,把磁盘文件与进程虚拟地址做了映射,这样可以跳过page cache,只使用一次数据拷贝。

另外我还想简单谈一下分页文件操作:

分页(Paging) :主存可以使用一部分磁盘空间,这样看上去主存的空间更大了。文件系统把磁盘分为固定大小的页(Page)。当不需要时,将分页由主存(通常是内存)移到辅助存储器;当需要时,再将数据取回,加载主存中。

分页文件技术能有助“大大地”降低整体及额外非必要的 I/O 次数,提高系统整体运作性能。但若运行所需物理内存过大,内存需要频繁的调入调出,页面不停的写入释放读取,回极大影响性能。这被称为系统颠簸。

参考文献:

[1] 认真分析mmap:是什么 为什么 怎么用

[2] 内存映射文件

[3] 分页

内外网映射 html缓存问题_浅谈内存映射相关推荐

  1. java缓存同步_浅谈JSON的数据交换、缓存问题和同步问题

    JSON轻量级的数据交换格式 相对于XML来说,JSON的解析速度更快,文档更小. JSON的格式 {属性名:属性值,属性名:属性值,--} 属性名的类型可以是string,number,boolea ...

  2. 浅谈内存映射I/O(MMIO)与端口映射I/O(PMIO)的区别

    最近在看NVMeDirect和SPDK的源码,觉得有必要梳理一下MMIO和PMIO的区别.关于MMIO和PMIO,维基百科上是这么讲滴, Memory-mapped I/O (MMIO) and po ...

  3. wifi频率和zigbee干扰_浅谈ZigBee和Wi—Fi的共存和干扰

    龙源期刊网 http://www.qikan.com.cn 浅谈 ZigBee 和 Wi - Fi 的共存和干扰 作者:姜伟 朱凯 刘童 来源:<科技视界> 2013 年第 16 期 [摘 ...

  4. 有关《家》的经典歌曲_浅谈艺术歌曲《家》的演唱

    龙源期刊网 http://www.qikan.com.cn 浅谈艺术歌曲<家>的演唱 作者:张赞 来源:<音乐时空> 2015 年第 10 期 摘要:<家>是我国著 ...

  5. 三菱d700变频器模拟量控制_浅谈三菱FR—D700变频器基本参数的设定

    龙源期刊网 http://www.qikan.com.cn 浅谈三菱 FR - D700 变频器基本参数的设定 作者:韩雪 来源:<卷宗> 2017 年第 17 期 摘 要:本文介绍了变频 ...

  6. rnss和rdss的应用_浅谈北斗二代RDSS与RNSS组合技术

    龙源期刊网 http://www.qikan.com.cn 浅谈北斗二代 RDSS 与 RNSS 组合技术 作者:陈德旭 王成皇 刘延鹏 来源:<中国科技博览> 2015 年第 07 期 ...

  7. 《计算机辅助教学及应用实践研究》,《论文_浅谈计算机辅助教学(定稿)》

    <论文_浅谈计算机辅助教学(定稿)> (3页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 9.9 积分 摘要:计算机辅助教学中要用到多媒体课件 ...

  8. python判断两个对象是否为相等使用的运算符是_Python入门_浅谈逻辑判断与运算符...

    这是关于Python的第6篇文章,主要介绍下逻辑判断与运算符. (一) 逻辑判断: 如果要实现一个复杂的功能程序,逻辑判断必不可少.逻辑判断的最基本标准:布尔类型. 布尔类型只有两个值:True和Fa ...

  9. 简述autocad在测绘工程中的应用_浅谈AutoCAD在工程测绘制图中的应用

    龙源期刊网 http://www.qikan.com.cn 浅谈 AutoCAD 在工程测绘制图中的应用 作者:高振华 来源:<职业 · 下旬> 2011 年第 02 期 AutoCAD ...

最新文章

  1. NBTC明年6月将举行5G频谱拍卖 2.6GHz频段成关注重点
  2. Docker Swarm Mode 学习笔记(聊聊 replicas)
  3. python语言是谁发明的咋读-Python的发明,竟然是因为他不喜欢花括号。
  4. Anaconda安装及第一个py程序
  5. C#判断字符串是否为数字字符串
  6. TRUNCATE vs DELETE命令
  7. java怎么设置404界面_如何使用Spring MVC显示自定义的404 Not Found页面
  8. MySQL定义异常和异常处理方法
  9. dapperpoco mysql_DapperPoco -- 基于Dapper的、轻量级的、高性能的、简单的、灵活的ORM框架...
  10. Python 数据分析 —— Matplotlib ①
  11. Java基础语法(详细版)
  12. mysql 索引失效情况总结
  13. 使用SharePoint Designer 2010新建外部内容类型,并解决访问被拒绝问题
  14. Oracle 在已有表上添加字段
  15. Win10 默认输入变全角问题解决方法
  16. 新型电话诈骗手法“明天到我办公室来一下”全揭秘
  17. Python爬虫实战:爬取贝壳网二手房成交数据,将数据存入Excel。
  18. 面试之HashMap与HashTable
  19. Linux搭建FTP服务使用案例
  20. JAVAWEB之小说书城项目

热门文章

  1. hdu 3917 Road constructions 最大权闭合子图
  2. PAT乙级(1031 查验身份证)
  3. et z201 php扩展,ET z201 时间型(Time)
  4. 视频PPT互动问答丨数据库技术前沿的创新与实践专题
  5. 资源放送丨《Oracle 19c x86下移经验分享》PPT视频
  6. Oracle 20c 新特性:基础级内存数据库免费功能 In-Memory Base Level
  7. PostgreSQL的几种分布式架构对比
  8. Oracle 12c因bug导致ORA-04031问题处理过程 | 云和恩墨技术通讯精选
  9. MySQL 8.0 在关系数据库方面有这些新特性
  10. 如何避免成为新技术背后的“奶嘴一族”