多次内存映射同一个文件?

3

将同一个文件进行多次内存映射的性能特征是什么?操作系统是否会在映射之间重复使用/缓存,还是会多次读取文件到内存的不同部分?

例如,如果我从两个不同的进程中的内存映射文件进行读写操作,它会通过磁盘还是在内存中进行通信?如果我从两个不同的进程或者线程交替地读取同一个文件的内存映射,他们会从相同的内存中读取吗?


每个进程中的指针/地址都是相同的,它们共享同一块内存,因此内存映射也被称为共享内存。 - undefined
2个回答

3
您可以使用MAP_PRIVATE来获取底层文件的私有写时复制映射。您可以使用MAP_SHARED来获取底层文件的视图。我不知道如果您同时在MAP_PRIVATE映射和MAP_SHARED映射中映射相同的区域会发生什么,但我怀疑对任一映射的写入都会导致复制。
为了与磁盘同步,您需要使用msync。在大多数系统上,多个MAP_SHARED映射将为您提供一块内存,名义上由磁盘支持,可在进程间共享。我不确定这种行为是指定的还是典型实现的愉快结果。

1
它将使用文件缓存,因此假设机器上有足够的RAM,它应该会缓存两个进程的写入。当然也要假设读取和写入实际上命中了文件的相同区域...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接