公众号: Linux内核那些事

零拷贝技术mmapmmap

一、传统的读写文件

一般来说,修改一个文件的内容需要如下3个步骤:

  • 把文件内容读入到内存中。
  • 修改内存中的内容。
  • 把内存的数据写入到文件中。

过程如图 1 所示:

如果使用代码来实现上面的过程,代码如下:

页缓存(page cache)页缓存页缓存

二、使用 mmap 读写文件

页缓存页缓存
mmap
mmap
页缓存mmap页缓存mmap页缓存页缓存
mmap页缓存mmap
msyncmunmap

三、mmap的使用方式

mmapmmap
mmap
addrlengthprotPROT_EXECPROT_READPROT_WRITEPROT_NONEflagsMAP_FIXEDMAP_SHAREDMAP_PRIVATEMAP_LOCKEDfdoffset
mmapmmap
openmmap
addrlengthprotPROT_WRITEflagsMAP_SHAREDfdoffset
mmap

四、总结

mmapmmap
mmapmmapmsync