Что происходит с файлом mmaped, если процесс выходит из строя?

У этого может быть другой ответ между OSX, Windows и Linux.

Если процесс выйдет из строя, будут ли загрязненные страницы из mmap отброшены или выписаны в конечном итоге ОС, если он не сработает?

Ясно, что они сохраняются, если другой процесс их сопоставил, но что, если разбитый процесс был единственным? Меня интересует как технически обещанное в документах, так и то, что на самом деле делает реализация. Если вы знаете только одну ОС, ответьте только за нее.

Ответ 1

Для Windows я не думаю, что есть сомнения, что грязные страницы в конечном итоге записываются на диск. В документах документально зафиксировано, что развязка файлового представления не очищает данные, но данные будут записываться лениво на диск, как с любым кешем. FlushViewOfFile запускает немедленную запись, но вызов необязателен.

Существуют исключения, которые могут или многие из них не имеют отношения к делу. Гарантируется сохранение двух отображаемых представлений файла, даже если одна программа прерывается ненормально, но эта когерентность не распространяется на удаленные файлы или файлы, доступ к которым осуществляется одновременно с использованием ReadFile/WriteFile.

Документация не дает явного ответа, но также не дает никакого намека на то, что противоположное может быть правдой. Я бы опирался на него, при условии тестирования.


И как указано в ссылке, если есть риск отказа машины, может быть хорошей идеей убедиться, что страницы очищены, поскольку они написаны. Ядро, очищающее кеш, может задерживаться довольно долго.