Страницы mlock()- статические или их можно перемещать в физической памяти?

Согласно mlock() справочная страница:

Все страницы, которые содержат часть указанного диапазона адресов, гарантированно будут находиться в оперативной памяти при успешном завершении вызова; страницы гарантированно останутся в ОЗУ, пока не будут разблокированы.

Гарантирует ли это также, что физический адрес этих страниц постоянен на протяжении всей их жизни или пока не разблокирован?

Если нет (то есть, если он может быть перемещен диспетчером памяти - но все еще оставаться в оперативной памяти), можно ли что-либо сказать о новом местоположении или событии, когда такое изменение произойдет?

ОБНОВИТЬ:

Что-нибудь можно сказать о связности заблокированных страниц в оперативной памяти? Если у ЦПУ есть кеш, то гарантирует ли mlock-ing согласованность ОЗУ с кешем (при условии кеширования с обратной записью)?

1 ответ

Решение

Нет. Страницы, которые были mlocked управляются с помощью неустранимого списка LRU ядра. Как следует из названия (и mlock() гарантии) эти страницы не могут быть удалены из оперативной памяти. Однако страницы могут быть перенесены из одного физического фрейма в другой. Вот выдержка из Unevictable LRU Infrastructure (добавлено форматирование для ясности):

МИГРАЦИОННЫЕ МОЛОЧНЫЕ СТРАНИЦЫ

Переносимая страница была изолирована от списков LRU и удерживалась заблокированной при отмене отображения страницы, обновляя запись адресного пространства страницы и копируя содержимое и состояние, пока запись таблицы страниц не будет заменена записью, которая относится к новая страница. Linux поддерживает миграцию mlocked страницы и другие неустранимые страницы. Это включает в себя просто перемещение PG_mlocked а также PG_unevictable состояния от старой страницы до новой.

Другие вопросы по тегам