C++/Linux之内存映射mmap(memory map)

mmap内存映射原理

mmap是unix/linux下的系统调用。

mmap

mmap 是以一种内存映射文件的方法,即将一个文件或者其他对象映射到进程的地址空间,实现文件磁盘地址和进程虚拟空间中一段虚拟地址的一对一关系;实现这样的映射后,进程就可以采用指针的方式读写操作这一块内存,而系统会自动回写脏页面(未提交的数据)到对应文件磁盘上,即完成了对文件的操作而不是调用read/write等系统调用,相反,内核空间这段区域的区域的修改也可以直接反应到内存空间,从而实现不同进程间的文件共享。
C++/Linux之内存映射mmap(memory map)

实现过程

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