Для каждой записи в таблице страниц есть бит invalid
. Когда страница загружается на жесткий диск, устанавливается ее бит invalid
. Каждый раз, когда к странице обращаются, MMU (блок управления памятью внутри процессора) вызывает исключение, и система отвечает за перезагрузку страницы в память. Затем ошибочная инструкция перезапускается.
Обычно подкачанные страницы - это страницы, к которым не часто обращаются. В каждой записи таблицы страниц есть еще один бит, чтобы знать, когда к странице обращались.
Как правильно выбрать страницу для замены этого единственного бита - большая проблема, об этом есть целая глава в очень хороших операционных системах Эндрю Таненбаума
Вы можете заблокировать страницу в ОЗУ с помощью системного вызова mlock()
. Если вы используете mmap()
для отображения вашего файла в памяти, это можно сделать с помощью флага MAP_LOCKED (см. Руководства).