Наличие или отсутствие содержимого файла в памяти гораздо менее связано с mmap
системными вызовами, чем вы думаете. Когда вы mmap
файл, он не обязательно загружает его в память. Когда вы munmap
это (или если процесс завершается), он не обязательно удаляет страницы.
Существует много разных вещей, которые могут инициировать загрузку содержимого файла в память: сопоставить его, прочитать его нормально, выполнить, попытаться получить доступ к памяти, которая сопоставлена с файлом. Точно так же существуют разные вещи, которые могут привести к удалению содержимого файла из памяти, в основном это связано с тем, что ОС решает, что ей нужна память для чего-то более важного.
В двух сценариях из вашего вопроса, попробуйте вставить шаг между шагами 1 и 2:
- 1.5. другой процесс выделяет и использует большой объем памяти -> файл
mmap
ed удаляется из памяти, чтобы освободить место.
В этом случае содержимое файла, вероятно, придется перезагружать в память, если оно снова отображается и снова используется на шаге 2.
против
- 1,5. ничего не происходит -> содержимое файла
mmap
ed хранится в памяти.
В этом случае содержимое файла не нужно перезагружать на шаге 2.
С точки зрения того, что происходит с содержимым вашего файла, ваши два сценария мало чем отличаются. Это что-то вроде этого шага 1.5, которое будет иметь гораздо более важное значение.
Что касается фонового процесса, который постоянно обращается к файлу, чтобы убедиться, что он хранится в памяти (например, сканируя файл, а затем спит в течение короткого периода времени в цикле), это, конечно, вынудит файл останется в памяти. но вам, вероятно, лучше просто позволить ОС самостоятельно решать, когда удалять файл, а когда не удалять.