__get_free_page, физический адрес и своп - PullRequest
1 голос
/ 05 февраля 2012

Предположим, для вызова __get_free_page запрашиваем у ядра свободную страницу в зоне ZONE_NORMAL, поэтому с флагом GFP_KERNEL.Мы знаем, что возвращаемый адрес является логическим адресом ядра, поэтому в таблице страниц существует «постоянное» отображение для этого логического адреса, и физический адрес вычисляется с помощью макроса __pa.Мой вопрос: если существует постоянное сопоставление для этой страницы, возможна ли подкачка на диск для этой страницы?Если да, я полагаю, что когда он будет снова помещен в память, он будет каждый раз помещаться в один и тот же фрейм страницы ... это правильно?

1 Ответ

4 голосов
/ 06 февраля 2012

Если вы выделите страницу в ядре с __get_free_page в ядре, она может быть заменена на , а не . В Linux struct page отслеживает физическую страницу, которая не может быть заменена. Обмен работает на уровне отображения пользовательских пространств и их содержимого; поэтому, если память пространства пользователя выгружается, содержимое может быть перенесено обратно на другую физическую страницу. Но эта физическая страница будет отображаться на тот же виртуальный адрес пространства пользователя.

Память ядра не может быть заменена в Linux.

...