Как ядро ​​Linux меняет страницу с отображенными файлами? - PullRequest
4 голосов
/ 01 февраля 2010

Я использую сопоставление файлов для чтения файла размером 20 ГБ.А когда основная память исчерпана, как ядро ​​подменяет отображенные файлы на диск?

Возможно, я могу установить для записи страницы значение NULL.Затем в следующий раз, если к странице обращаются, снова будет вызвана функция do_no_page() для сопоставления файла с памятью.Это правильно?

Другой вопрос: какой приоритет использует ядро ​​для обмена страницами памяти?Обычная страница или страница с отображением файла?

1 Ответ

2 голосов
/ 01 февраля 2010

Для каждой записи в таблице страниц есть бит invalid. Когда страница загружается на жесткий диск, устанавливается ее бит invalid. Каждый раз, когда к странице обращаются, MMU (блок управления памятью внутри процессора) вызывает исключение, и система отвечает за перезагрузку страницы в память. Затем ошибочная инструкция перезапускается.

Обычно подкачанные страницы - это страницы, к которым не часто обращаются. В каждой записи таблицы страниц есть еще один бит, чтобы знать, когда к странице обращались. Как правильно выбрать страницу для замены этого единственного бита - большая проблема, об этом есть целая глава в очень хороших операционных системах Эндрю Таненбаума

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

...