美文网首页基础
Linux下mmap的实现过程与普通文件io操作

Linux下mmap的实现过程与普通文件io操作

作者: clawhub | 来源:发表于2019-02-23 10:40 被阅读179次

mmap定义

Linux通过将一个虚拟内存区域与一个磁盘上的对象(object)关联起来,以初始化这个虚拟内存区域的内容,这个过程称为内存映射(memory mapping)。

mmap原理与实现过程:

原理:在虚拟内存分配了地址空间

mmap原理.png

实现过程:

  1. 进程启动映射过程,并在虚拟地址空间中为映射创建虚拟映射区域
  2. 调用内核空间的系统调用函数mmap(不同于用户空间函数),实现文件物理地址和进程虚拟地址的一一映射关系
  3. 进程发起对这片映射空间的访问,引发缺页异常,实现文件内容到物理内存(主存)的拷贝

与常规文件操作比较

1. mmap()中没有进行数据拷贝,真正的数据拷贝是在缺页中断处理时进行的,由于mmap()将文件直接映射到用户空间,所以中断处理函数根据这个映射关系,直接将文件从硬盘拷贝到用户空间,只进行了 一次数据拷贝 。

mmap映射原理与过程.gif

2. 常规文件操作需要从磁盘到页缓存再到用户主存的两次数据拷贝

一般文件IO操作.gif

参考

深度分析mmap:是什么 为什么 怎么用 性能总结
深入剖析mmap-从三个关键问题说起
LMDB中的mmap、Copy On Write、MVCC深入理解

相关文章

网友评论

    本文标题:Linux下mmap的实现过程与普通文件io操作

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