В локальных файловых системах все основные Unix-подобные системы поддерживают решение этой проблемы путем удаления файла. Старый vnode остается открытым, и даже после того, как запись каталога исчезла и затем использовалась для нового образа, старый файл все еще там, без изменений и теперь безымянный, пока не исчезнет последняя ссылка на него (в данном случае ядро) .
Но если вы просто начнете переписывать его, тогда да, это mmap (3) 'ed. Когда блок перезаписывается, в зависимости от того, какие параметры mmap (3) использует динамический компоновщик, может произойти одно из двух:
- ядро сделает недействительной соответствующую страницу, или
- образ диска изменится, но существующие страницы памяти не будут
В любом случае, работающая программа может быть в беде. В первом случае он, по сути, гарантированно взорвется, а во втором случае он будет засорен, если на все страницы не будут ссылаться, выполнять постраничную передачу и они никогда не будут отброшены.
Было два флага mmap, чтобы исправить это. Одним из них был MAP_DENYWRITE (запретить запись), а другим - MAP_COPY, который сохранял чистую версию оригинала и не позволял авторам изменять отображенное изображение.
Но DENYWRITE был отключен по соображениям безопасности, и COPY не реализована ни в одной из основных Unix-подобных систем.