阅读几篇文章和帖子后:
https://lwn.net/Articles/502612/
mmap, msync(MS_ASYNC) and munmap
我有点困惑:
1. msync是否真的做任何事情(上面的第二个链接包括一个手册页的一部分,指示它不在较新的内核中;因此,第一个链接说它做了什么)
2.如果进程可能被杀死或崩溃(而不是操作系统),则是否需要调用msync。
3.内核多久将映射的内存刷新回“磁盘”一次?
假设我使用内核3.10和2.6.32。
谢谢。
最佳答案
我们需要小心-您的问题标题为“需要调用msync吗?
”,但msync()
带有使答案复杂的参数:
在Linux上,msync(MS_ASYNC)
是禁止操作。在其他操作系统上,它可能会执行某些操作,当然您可以使用其他参数调用msync()
。
如果您需要知道同步是否完成,并且愿意在同步完成之前进行阻止,则可以使用msync(MS_SYNC)
(注意缺少A)。如果just your program crashes the Linux kernel will continue to track dirty filesystem pages。
这将取决于您的文件系统和VM设置。请参见https://www.kernel.org/doc/Documentation/sysctl/vm.txt中的dirty_*
设置。
这个问题与having linux persist memory changes to disk相似-如果您需要知道数据何时存储在稳定的介质上,则必须使用阻塞调用(这将立即触发写回)。在Linux上没有“请在后台开始同步”调用。
关于c - 是否需要调用msync?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46826989/