2015-01-19 3 views
0

Я немного смущен тем, как linux использует оборудование ARMv7 MMU для своего 3-х уровневого стола. MMU имеет только 2 регистра ttbr0 и ttbr1 (один для ядра и другой для пользовательского пространства). Как известно, что mmu знает многоуровневое перемещение страниц в linux?ARM MMU и ARM Linux page table walk

Спасибо, HVR

+0

страницы программного обеспечения стол ходьба работает точно так же, как аппаратная таблица страниц блуждание - данный базовый адрес, посмотреть соответствующую запись и декодировать его либо с ошибкой, либо с отображением, либо с адресом таблицы следующего уровня (и повторением). Вы знаете, как работают многоуровневые таблицы страниц, верно? – Notlikethat

+0

Я не совсем понимаю это. То, что я имею в виду, заключается в том, чтобы ходить по страницам таблицы страниц страниц, не слишком ли это для каждой выборки/загрузки? Разве это не должно быть сделано только с помощью аппаратного обеспечения? Я попытался прочитать много ссылок, но не мог полностью понять это. Можете ли вы представить несколько значимых ссылок для понимания этой темы? – Hemant

ответ

0

Если верхние N биты виртуального адреса равны нулю, то перевод начинается TTBR0 еще TTBR1. N происходит от TTBCR. Регистры TTBRn содержат физический адрес базы таблицы первого уровня. Соответствующая запись таблицы первого уровня загружается, и различные биты записи определяют, использует ли перевод таблицу второго уровня, и если да, то каков ее физический адрес.

MMU может быть настроен на использование коротких дескрипторов (32-разрядных физических адресов) или длинных дескрипторов (40-разрядных физических адресов). При использовании коротких дескрипторов можно использовать не более двух уровней таблицы перевода. При использовании длинных дескрипторов может быть три уровня.

Это игнорирует переходы этапа 2 (гипервизоры). Все документировано в ARMARM для v7-A раздел B3.3 & R: http://infocenter.arm.com/help/topic/com.arm.doc.ddi0406c/index.html

Смежные вопросы