2010-02-09 4 views
2

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

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

+0

Указание ОС может помочь. – 2010-02-09 04:50:51

+0

В общем, нет. Записи буферизуются кешем страницы (или файловой системы), запись в одно и то же место дважды означает, что данные записываются в одно и то же место ОЗУ. Следовательно, проблема, которую вы описываете, маловероятна, насколько я знаю –

ответ

0

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