Это очень зависит от реализации, но одно из возможных воплощений:
Когда файл отображается первым в памяти, данные сначала нигде не сохраняются, они все еще находятся на диске. Диспетчер виртуальной памяти (VMM) выделяет диапазон адресов виртуальной памяти процессу для файла, но эти адреса не сразу добавляются в таблицу страниц.
Когда программа сначала пытается прочитать или записать один из этих адресов, возникает ошибка page . ОС ловит страницу с ошибкой, выясняет, что этот адрес соответствует отображенному в памяти файлу, и считывает соответствующий сектор диска во внутренний буфер ядра. Затем он отображает буфер ядра в адресное пространство процесса и перезапускает инструкцию пользователя, которая вызвала ошибку страницы. Если ошибочная инструкция была прочитана, мы все на сегодня. Если это была запись, данные записываются в память, и страница помечается как грязная. Последующие операции чтения или записи данных на той же странице не требуют чтения / записи на / с диска, поскольку данные находятся в памяти.
Когда файл сбрасывается или закрывается, все страницы, помеченные как грязные, записываются обратно на диск.
Использование отображенных в память файлов выгодно для программ, которые читают или записывают секторы диска очень случайным образом. Вы читаете только те сектора диска, которые действительно используются, а не весь файл.