Страницы mlock()- статические или их можно перемещать в физической памяти?
Согласно mlock()
справочная страница:
Все страницы, которые содержат часть указанного диапазона адресов, гарантированно будут находиться в оперативной памяти при успешном завершении вызова; страницы гарантированно останутся в ОЗУ, пока не будут разблокированы.
Гарантирует ли это также, что физический адрес этих страниц постоянен на протяжении всей их жизни или пока не разблокирован?
Если нет (то есть, если он может быть перемещен диспетчером памяти - но все еще оставаться в оперативной памяти), можно ли что-либо сказать о новом местоположении или событии, когда такое изменение произойдет?
ОБНОВИТЬ:
Что-нибудь можно сказать о связности заблокированных страниц в оперативной памяти? Если у ЦПУ есть кеш, то гарантирует ли mlock-ing согласованность ОЗУ с кешем (при условии кеширования с обратной записью)?
1 ответ
Нет. Страницы, которые были mlocked
управляются с помощью неустранимого списка LRU ядра. Как следует из названия (и mlock()
гарантии) эти страницы не могут быть удалены из оперативной памяти. Однако страницы могут быть перенесены из одного физического фрейма в другой. Вот выдержка из Unevictable LRU Infrastructure (добавлено форматирование для ясности):
МИГРАЦИОННЫЕ МОЛОЧНЫЕ СТРАНИЦЫ
Переносимая страница была изолирована от списков LRU и удерживалась заблокированной при отмене отображения страницы, обновляя запись адресного пространства страницы и копируя содержимое и состояние, пока запись таблицы страниц не будет заменена записью, которая относится к новая страница. Linux поддерживает миграцию
mlocked
страницы и другие неустранимые страницы. Это включает в себя просто перемещениеPG_mlocked
а такжеPG_unevictable
состояния от старой страницы до новой.