Прогулка по таблице страниц ARM MMU и ARM Linux

Я немного смущен тем, как Linux использует аппаратное обеспечение ARMv7 MMU для обхода трехуровневой таблицы страниц. MMU имеет только 2 регистра ttbr0 и ttbr1 (один для ядра, а другой для пользовательского пространства). Откуда mmu знает многоуровневую прогулку по таблице страниц в Linux?

Спасибо, Хвр


person Hemant    schedule 19.01.2015    source источник
comment
Обход таблицы программных страниц работает точно так же, как обход таблицы аппаратных страниц — по базовому адресу найдите соответствующую запись и декодируйте ее либо до ошибки, отображения, либо до адреса таблицы следующего уровня (и повторите ). Вы вообще знаете, как работают многоуровневые таблицы страниц, верно?   -  person Notlikethat    schedule 19.01.2015
comment
Я не совсем понимаю это. Я имею в виду обход таблицы страниц программного обеспечения, не слишком ли это много для каждой выборки/загрузки? Разве это не должно быть сделано только аппаратно? Я пытался прочитать много ссылок, но не мог полностью понять это. Можете ли вы предоставить некоторые содержательные ссылки для понимания этой темы?   -  person Hemant    schedule 20.01.2015


Ответы (1)


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

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

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

person scott    schedule 26.01.2015