Kmap для HIGHMEM

Я использую kmap чтобы получить логический адрес страницы, но я немного запутался насчет большого объема памяти. Если страница находится в верхней памяти, что делает kmap вернуть? Один источник говорит, что логический адрес, другой - линейный адрес дескриптора страницы.

Цель состоит в том, чтобы получить прямой доступ к содержимому физических страниц путем преобразования адресов vma в линейный адрес пространства ядра определенных страниц.

2 ответа

kmap всегда возвращает виртуальный адрес, который адресует нужную страницу. Если страница уже доступна - т.е. она уже имеет действительный виртуальный адрес ядра (потому что, скажем, она находится в области FIXADDR и, следовательно, уже сопоставлена), - тогда этот адрес просто возвращается вам. Если он находится в области highmem, то устанавливается временное сопоставление виртуального адреса и возвращается действительный виртуальный адрес памяти.

Преобразование, на которое ссылается ваше последнее предложение, немного двусмысленно, но, поскольку у вас есть "struct page", я предполагаю, что вы имеете в виду страницу, которая пришла из отображения, описанного vm_struct? ("vma" несколько перегружен)

В любом случае, предполагая, что ваша настоящая цель - просто получить адрес, по которому вы можете "напрямую" изменить и исследовать указанное место в произвольной физической памяти в случае, когда у вас уже есть "страница структуры", kmap должен работать для вас.

По определению логический адрес ядра (также называемый линейным адресом) - это виртуальный адрес в пространстве ядра, который можно преобразовать в физический адрес путем вычитания фиксированного смещения.

Диапазон адресного пространства ядра является фиксированным параметром времени компиляции, поэтому, если виртуальное адресное пространство работает от 3G - 4G (скажем), то с низким mem может работать от 3G - OFFSET до 4G - OFFSET. Страницы за пределами этого диапазона занимают много памяти. Поэтому для страницы с большим объемом памяти не может быть логического адреса ядра.

kmap () создает отображение страницы с большим объемом памяти в адресное пространство ядра и возвращает виртуальный адрес, к которому можно получить доступ, чтобы получить доступ к содержимому страницы с большим объемом памяти.

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