Я знаю, что при изменении страницы кэша страниц она помечается как грязная и требует обратной записи, но что происходит, когда:
Сценарий: файл / apps / EXE, который является исполняемым файлом, полностью помещается в кеш страниц (все его страницы находятся в кеше / памяти) и выполняется процессом P
Непрерывный выпуск заменяет / apps / EXE новым исполняемым файлом.
Предположение 1: Я предполагаю, что процесс P (и любой другой пользователь с файловым дескриптором, ссылающимся на старый исполняемый файл) продолжит использовать старый, в памяти / apps / EXE без проблем, и любой новый процесс, который попытается выполнить этот путь, получит новый исполняемый файл.
Предположение 2: Я предполагаю, что если не все страницы файла будут отображены в памяти, все будет хорошо, пока не произойдет сбой страницы, требующий страниц из файла, который был заменен, и, возможно, произойдет сегфоут?
Вопрос 1: Если вы скомбинируете все страницы файла с чем-то вроде vmtouch, это вообще изменит сценарий?
Вопрос 2: Если / apps / EXE находится на удаленной NFS, будет ли это иметь какое-то значение? (Я предполагаю, что нет)
Пожалуйста, исправьте или подтвердите мои 2 предположения и ответьте на мои 2 вопроса.
Давайте предположим, что это коробка CentOS 7.6 с ядром 3.10.0-957.el7
Обновление: Думая об этом дальше, мне интересно, если этот сценарий ничем не отличается от любого другого сценария грязной страницы ..
Я полагаю, что процесс, который записывает новый двоичный файл, выполнит чтение и получит все страницы кэша, так как он весь разбит на страницы, и тогда все эти страницы будут помечены как грязные. Если они заблокированы, они будут просто бесполезными страницами, занимающими основную память после того, как число ссылок станет равным нулю.
Я подозреваю, что когда текущие программы заканчиваются, все остальное будет использовать новый двоичный файл. Предполагая, что это все правильно, я думаю, что это интересно только тогда, когда в файл вставлена только часть файла.