2010-02-09 406 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架構和這些例程的特定操作系統實現。