如何将文件映射到进程地址空间?

时间:2018-06-29 13:01:15

标签: linux fwrite mmap

如何将映射文件存储到进程地址空间?通常,文件存储在诸如NAND,SD卡等辅助存储设备中(嵌入式环境),该存储设备不提供逐字节访问吗?当我们更新映射到文件的内存时,我需要管道如何在辅助存储中更新文件?还有为什么mmap与write()系统调用或fwrite()库调用相比更快?

1 个答案:

答案 0 :(得分:0)

您映射的所有内容都可能会复制到内部内存中。因此,如果您从sd卡或其他任何文件访问prog文件的某个地址,则数据副本将加载到内部ram中。真正的范围有多大,只有操作系统才知道。即使您保留了完整文件的位置,也只需要读取一小部分。如果CPU有mmu,则可以通过页面错误轻松实现,从而导致重新加载。

如果不直接存储到基础物理设备,则访问只会更快。因此,更改只会在ram中完成,而ram是快速的,以后会立即写入较慢的设备,例如串行闪存或其他设备。

可以通过msync http://man7.org/linux/man-pages/man2/msync.2.html

完成从已更改的映射虚拟ram到基础文件的同步。

如果您需要一些基本信息,如何解决(虚拟)ram以及mmap如何映射到虚拟ram,则可以阅读以下内容:https://www.xml.com/ldd/chapter/book/ch13.html