文件如何映射到进程地址space?

How files are mapped to process address space?

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

您映射的所有内容都可能被复制到内部 ram。因此,如果您从 SD 卡或其他任何东西访问您的 prog 文件的某个地址,数据的副本将加载到内部 ram 中。范围到底有多大,只有os才知道。即使您为整个文件保留位置,如果需要也只会读取一小部分。如果 cpu 有一个 mmu,它可以简单地通过导致重新加载的页面错误来实现。

如果您不直接存储到底层物理设备,访问只会更快。所以更改只会在 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