Физический адрес адреса, возвращаемого kmalloc
Я немного запутался в адресах, которые мне возвращает kmalloc. Согласно карте виртуальной памяти, адреса, которые я получаю, находятся в ffff880000000000
- ffffc7ffffffffff
диапазон, так что "прямое отображение всей физ. памяти". Как работает это отображение? Я уверен, что kmalloc не просто возвращает физический адрес.
1 ответ
Ты прав, kmalloc
возвращает виртуальный адрес, а не физический. Карта памяти, с которой вы связаны, описывает карту виртуальной памяти, а не карту физической памяти.
Виртуальный адрес обычно преобразуется MMU в физический адрес при доступе к данным по адресу. То, на что преобразуется виртуальный адрес, зависит от карты памяти, указанной ядром.
Карта памяти, с которой вы связаны, показывает, как Linux выполняет сопоставление. Это говорит, если у вас есть виртуальный адрес между 0xffff880000000000
а также 0xffffc7ffffffffff
, он отображается где-то в физической памяти (мы не знаем, где именно, и нам все равно, если мы не делаем DMA).