Mmap записывает в файл на диске (синхронно / асинхронно) - PullRequest
2 голосов
/ 09 февраля 2010

У меня есть вопрос, касающийся функциональности mmap. Когда mmap используется в асинхронном режиме, когда ядро ​​заботится о сохранении данных в отображенном файле на диске, возможно ли, чтобы прежние обновления перезаписывали более поздние обновления?

Допустим, в момент времени T мы изменяем место в памяти, которое является памятью, сопоставленной с файлом на диске, и снова в момент времени T + 1 мы изменяем то же место в памяти. Поскольку записи в файл не являются синхронными, возможно ли, что ядро ​​сначала выбирает изменения в момент времени T + 1, а затем выбирает изменения в момент времени T, что приводит к несогласованности в файле отображения памяти?

1 Ответ

0 голосов
/ 13 июля 2012

Это не совсем возможно. Файл может быть несовместимым до msync (2) или munmap (2) - когда это происходит, dirty (изменено) страницы записываются на диск страница за страницей (иногда больше, зависит от файловой системы в новых ядрах). msync () позволяет вам указать синхронную работу и аннулирование кэшей после завершения записи, что позволяет вам гарантировать, что данные в кэш совпадают с данными в файле. Без этого возможно, что ваша программа увидит более новые данные, но файл содержит более старые - точные особенности довольно сложной ситуации зависят от архитектуры ЦП и конкретной реализации этих подпрограмм в ОС.

...