MMap

作者: NapoleonY | 来源:发表于2021-04-09 17:54 被阅读0次
  1. mmap 是什么?
    本质是一种进程虚拟内存映射的方法,可以将一个文件、一段物理内存或其他对象映射到进程的虚拟内存地址空间。实现这样的映射关系后,进程就可以采用指针的方式来读写操作这一段内存,进而完成对文件的操作,而不必再调用 read/write 等系统调用函数了。

  2. 为什么对于大文件而言 mmap 的效率要高于 read/write?
    调用 read/write 进行的常规的文件系统操作中,函数的调用过程:

  • 进程发起读文件请求。
  • 内核通过查找进程文件符表,定位到内核已打开文件集上的文件信息,从而找到此文件的 inode。
  • inode 在 address_space 上查找要请求的文件页是否已经缓存在页缓存中。如果存在,则直接返回这片文件页的内容。
  • 如果不存在,则通过 inode 定位到文件磁盘地址,将数据从磁盘复制到页缓存。之后再次发起读页面过程,进而将页缓存中的数据发给用户进程。

    所以,总结来说,常规的文件操作为了提高读写效率和保护磁盘,使用了页缓存机制。这样造成读文件时需要先将文件页从磁盘拷贝到页缓存中,由于页缓存处在内核空间,不能被用户进程直接寻址,所以还需要将页缓存中数据页再次拷贝到内存对应的用户空间中。这样,通过了两次数据拷贝过程,才能完成进程对文件内容的获取任务。写操作也是一样,待写入的 Buffer 在内核空间不能直接访问,必须要先拷贝至内核空间对应的主存,再写回磁盘中(延迟写回),也是需要两次数据拷贝。
而使用 mmap 进行的文件操作中,首先会创建新的虚拟内存区域与文件磁盘地址之间的映射关系,在之后数据访问中,如果发现内存中并无相应的数据,则发起缺页异常,通过已经建立好的映射关系,只使用一次数据拷贝就将数据从磁盘中拷贝到用户空间中,供用户态进程使用。

参考

  1. Linux 操作系统原理 — mmap() 进程虚拟内存映射
  2. Linux内存映射mmap原理分析
  3. [原创] 深入剖析mmap原理 - 从三个关键问题说起
  4. mmap原理之详解
  5. mmap机制初探
  6. 理解inode

相关文章

  • mmap

    简单的目录 mmap基础概念 mmap内存映射原理 mmap和常规文件操作的区别 mmap优点总结 mmap相关函...

  • 【转】linux库函数mmap()原理

    linux库函数mmap()原理 目录 1.mmap基本概念 2.mmap内存映射原理 3.mmap和常规文件操作...

  • 内存映射

    转自认真分析mmap:是什么 为什么 怎么用 阅读目录mmap基础概念mmap内存映射原理mmap和常规文件操作的...

  • Linux 共享内存函数

    mmap 函数实现共享内存 1. 匿名mmap 匿名存储映射:调用mmap函数时,指定 MAP_ANONYMOUS...

  • NIO中FileChannel和MappedByteBuffer

    MappedByteBuffer实现MMAP(Memory Mapped Files)技术(内存映射) mmap(...

  • 2020-03-17 想了解文件内存映射mmap的过来看看啊

    测试fread,fwrite,mmap_read,mmap_write分别在多线程单线程下的效率。 结论是mmap...

  • linux手册翻译——mmap(2)

    mmap,munmap-将文件或设备映射(消取映射)到内存 mmap() mmap()将在调用者进程的虚拟地址空间...

  • mmap和MMKV

    一. mmap 1. 什么是mmap mmap是一种内存映射文件的方法,即将一个文件或者其他对象映射到进程的地址...

  • 内存映射

    mmap 背景 mmap将一个文件或者其它对象映射进内存,文件以mmap的方式映射到用户的虚拟内存空间,省去了从内...

  • 关于mmap不为人知的秘密

    mmap初入 我们常说的mmap,其实是一种内存映射文件的方法,mmap将一个文件或者其它对象映射进内存。但是更加...

网友评论

      本文标题:MMap

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