2010-02-09 85 views
2

我有一个关于mmap功能的问题。当mmap在内核负责将数据保存到磁盘映射文件的异步模式下使用时,是否有可能让以前的更新覆盖以后的更新?我们修改内存中映射到磁盘上文件的位置,并在时间T + 1再次修改内存中的相同位置。由于对文件的写操作不同步,内核是否有可能在时间T + 1首先提取修改,然后在时间T提取修改,导致内存映射文件不一致?mmap写入磁盘上的文件(同步/异步)

+0

指定操作系统可能会有帮助。 – 2010-02-09 04:50:51

+0

一般来说,没有。写入被缓存到页面(或文件系统)缓存中,写入同一位置两次意味着数据被写入同一个RAM位置。因此,据我所知,你描述的问题不太可能 – 2010-02-09 05:51:39

回答

0

这不是完全可能的。该文件允许是直到的msync(2)munmap(2)不一致 - 这种情况发生时,(修改)页逐页写入磁盘页面(有时更多,取决于文件系统中更新的内核)。 msync()允许您在完成写入后指定高速缓存的同步操作和无效,这样可以确保高速缓存中的数据与文件中的数据相同。没有这一点,你的程序可能会看到更新的数据,但文件包含更老的数据 - 相当多毛的情况的确切细节取决于CPU架构和这些例程的特定操作系统实现。