我有关于mmap功能的问题。当mmap用于异步模式,其中内核负责将数据持久保存到磁盘上的映射文件时,是否可以让以前的更新覆盖以后的更新?
让我们说在时间T,我们修改内存中映射到磁盘上文件的位置,并在时间T + 1再次修改内存中的相同位置。由于对文件的写入不是同步的,内核是否有可能首先在时间T + 1处获取修改,然后在时间T获取修改,从而导致内存映射文件不一致?
答案 0 :(得分:0)
这不太可能。文件 允许不一致,直到 msync(2)或 munmap(2) - 当发生这种情况时,脏(已修改的)页面逐页写入磁盘(有时更多,取决于较新内核中的文件系统)。 msync()允许您在完成写入后指定高速缓存的同步操作和失效,这允许您确保高速缓存中的数据与文件中的数据相同。如果没有这个,你的程序可能会看到更新的数据,但文件包含更旧的 - 相当毛茸茸的情况的确切细节取决于CPU架构和这些例程的特定操作系统实现。