Общие сведения[]
Информация, необходимая для преобразования виртуальных адресов в физические и для контроля прав доступа, находится в записях таблиц переадресации, расположенных в памяти. MMU кэширует последнюю использованную информацию из этих таблиц в буферах быстрой переадресации (TLB), и обращения к памяти для выборки записей таблиц выполняются лишь тогда, когда соответствующая информация в TLB отсутствует.
Таблицы переадресации имеют два уровня. Первый (верхний) уровень описывает преобразование адресов для секций и суперсекций (участков памяти размером 1 и 16 Мбайт соответственно), а также содержит ссылки на таблицы второго уровня, отвечающие за преобразование адресов для страниц (участков памяти размером 64, 16 или 1 Кбайт — соответственно большие, малые и крошечные страницы). Поддержка суперсекций размером 16 Мбайт является необязательной; крошечные страницы размером 1 Кбайт не поддерживаются, начиная с версии VMSAv6. Таким образом, MMU обеспечивает гарантированную поддержку секций длиной 1 Мбайт и страниц в 64 и 16 Кбайт.
Большие и малые страницы могут делиться на четыре равные части длиной соответственно 16 и 1 Кбайт. В версии VMSAv6 эта возможность считается устаревшей, но для совместимости поддерживается.
Возможность считывания таблиц переадресации из кэш-памяти первого уровня определяется реализацией. Поэтому во избежание проблем после модификации таблиц следует опорожнять соответствующие строки кэша. Кроме того, таблицы не могут размещаться в тесно связанной памяти (TCM), поскольку выборка оттуда строк таблиц для выполнения переадресации невозможна.
Формат таблиц переадресации определяется значением бита XP регистра управления. Когда он равен 0, разрешается использование подстраниц памяти; когда равен 1, подстраницы запрещены, но вместо этого появляются более гибкие возможности управления доступом. Значение 1 может быть установлено только в версиях, начиная с VMSAv6; значение 0 в VMSAv6 считается устаревшим, но поддерживается для совместимости.
База таблицы переадресации[]
В версиях, предшествующих VMSAv6, имеется лишь один набор таблиц переадресации. Базовый физический адрес таблицы первого уровня находится в регистре базы таблицы переадресации (Translation Table Base Register, TTBR), доступ к которому выполняется через регистр 2 сопроцессора управления системой (CP15). Эта таблица всегда содержит 4096 элементов и описывает преобразование всех возможных виртуальных адресов в физические.
В версии VMSAv6 существуют два набора таблиц, базовые адреса которых находятся соответственно в регистрах TTBR0 и TTBR1. Оба регистра TTBR, а также регистр управления базой таблицы переадресации TTCBR (Translation Table Control Base Register; см. ниже) доступны через регистр 2 CP15. В TTBCR задаётся количество старших битов виртуального адреса (от 0 до 7), при нулевом значении которого в качестве базы будет использоваться регистр TTBR0; в том случае, если хотя бы один из этих старших битов равен 1, в качестве базы используется регистр TTBR1. Благодаря этому размер таблицы первого уровня, адресуемой через TTBR0, может колебаться в пределах от 128 байт до 16 Кбайт (от 32 до 4096 элементов), что соответствует размеру виртуального адресного пространства от 32 Мбайт до 4 Гбайт. Таблица, адресуемая через TTBR1, всегда имеет размер 16 Кбайт. Предполагается, что в TTBR1 постоянно находится базовый адрес таблицы переадресации, используемой для обращений к памяти со стороны операционной системы (она, соответственно, должна располагаться в старших адресах памяти; там же должны находиться и регистры внешних устройств); в регистре же TTBR0 находится базовый адрес таблицы переадресации для текущей задачи, виртуальное адресное пространство которой всегда начинается с нулевого адреса.
Сам процесс преобразования адресов в целом не зависит от того, какой именно набор таблиц переадресации используется, поэтому в дальнейшем, за исключением специально отмеченных случаев, будет говориться просто о таблицах и регистре TTBR.
Таблица переадресации первого уровня[]
Таблица переадресации первого уровня содержит до 4096 записей размером слово; каждая запись описывает отображение одного мегабайта виртуального адресного пространства. Индексом записи, используемой для преобразования данного виртуального адреса в физический, служат старшие 12 разрядов MVA.
На рисунках ниже приведены форматы записей таблицы переадресации первого уровня для версий, предшествующих VMSAv6, и для версии VMSAv6 со включенной и выключенной поддержкой подстраниц.
Биты записей таблицы первого уровня имеют следующее назначение.
Биты 1:0 определяют правила преобразования адресов для области виртуального адресного пространства, соответствующего данной записи:
- 00 — отображение на физическую память отсутствует; попытка обращения по виртуальному адресу, соответствующему этой записи, вызовет отказ;
- 01 — отображение этой области виртуальных адресов на физическую память осуществляется постранично и описывается «грубой» (coarse) таблицей переадресации второго уровня. Данная запись содержит базовый физический адрес этой таблицы;
- 10 — область виртуального адресного пространства, соответствующая этой записи, является секцией или частью суперсекции и отображается на физическую память как единое целое. Таблица второго уровня для преобразования адреса не используется. Данная запись содержит базовый физический адрес этой секции или суперсекции;
- 11 — отображение виртуальных адресов осуществляется постранично и описывается «тонкой» (fine) таблицей переадресации второго уровня. Данная запись содержит базовый физический адрес этой таблицы. «Тонкие» таблицы в версиях, начиная с VMSAv6, не поддерживаются.
Биты B (2), C (3), TEX (14:12) и S (16) описывают атрибуты области физической памяти, на которую отображаются виртуальные адреса, соответствующие данной записи. Поле TEX и бит S появились в версии VMSAv6.
Биты Domain (8:5), AP (11:10) и APX (15) применяются для управления правами доступа к данной области памяти. Бит APX появился в версии ARMv6.
Бит nG (17) также введён в версии ARMv6 и предназначен для использования совместно с механизмом идентификации процессов. Когда он равен нулю, соответствующая секция или суперсекция считается глобальной, если же он равен единице, секция или суперсекция относится к определённому процессу.
Поля Coarse page table base address (31:10), Fine page table base address (31:12), Section base address (31:20) и Supersection base address (31:24, 23:20 и 8:5) определяют старшие разряды физического базового адреса «грубой» и «тонкой» таблицы переадресации второго уровня, секции и суперсекции соответственно. Базовый адрес суперсекции разделён на три части, причём он является единственным, позволяющим адресовать физическую память объёмом свыше 4 Гбайт (подробнее об этом говорится в подразделе «Преобразование адресов»).
Биты, помеченные как SBZ, должны быть равны нулю. Биты IMP отвечают за функциональность, определяемую производителями конкретных моделей процессоров, и для совместимости между моделями разных производителей должны быть нулевыми. Биты IGN устройством управления памятью игнорируется; разработчик ОС может использовать их по своему усмотрению.
«Грубая» таблица переадресации второго уровня[]
«Грубая» таблица переадресации содержит 256 однословных записей и описывает отображение на физическую память больших (64 Кбайта) и малых (4 Кбайта) страниц виртуальной памяти. Каждая запись таблицы отвечает за отображение 4 Кбайт виртуального адресного пространства на физическое, поэтому записи для больших страниц должны повторяться в таблице 16 раз подряд.
Различают два формата этих запсей: с поддержкой подстраниц и без таковой, причём формат без подстраниц появился лишь в версии VMSAv6. Подстраницы этой версией поддерживаются, но считаются устаревшими; в будущем их поддержка может быть упразднена. Форматы записей приведены на рисунках.
Назначение разрядов элемента таблицы следующее.
Биты 1:0 определяют, какую страницу описывает данный элемент:
- 00 — память под таблицу не выделена, обращение к странице вызовет отказ;
- 01 — большая страница (64 Кбайта);
- 10 — малая страница (4 Кбайта) при разрешённых подстраницах; расширенная малая страница при запрещённых подстраницах (начиная с версии VMSAv6);
- 11 — расширенная малая страница.
Биты B (2), C (3), S (10, только при запрещённых подстраницах) и TEX (14:12 для больших страниц и 8:6 для расширенных малых страниц; у обычных малых страниц этого поля нет) определяют атрибуты памяти, в которой находится страница. Поле TEX и бит S появились в версии VMSAv6; в более ранних версиях архитектуры соответствующие разряды должны быть равны нулю. Для обычных малых страниц, доступных только при разрешённых подстраницах, также предполагается, что это поле равно нулю.
Биты AP (биты 5:4 при запрещённых подстраницах, а также при разрешённых подстраницах для расширенных малых страниц; четыре поля по два бита с 11-го по 4-й включительно при разрешённых подстраницах для больших и обычных малых страниц — по одному полю на каждую подстраницу), APX (бит 9, только при запрещённых подстраницах) и XN (только при запрещённых подстраницах, бит 15 для больших страниц и 0 для расширенных малых страниц) управляют доступом к странице целиком или к её отдельным подстраницам. Два последних разряда появились в версии VMSAv6 и должны быть равны нулю в более ранних версиях. Если MMU версии VMSAv6 работает с разрешёнными подстраницами (в режиме совместимости с предыдущими версиями), считается, что эти биты равны нулю.
Бит nG (11, только при запрещённых подстраницах) появился в версии VMSAv6 и используется с механизмом идентификации процессов. Когда он равен нулю, страница считается глобальной, когда единице — относящейся к определённому приложению.
Поля Large page base address (31:16) для больших и Small page base address и Extended small page base address (31:12) для обычных и расширенных малых страниц содержат физический базовый адрес страницы.
Биты IGN устройством управления памятью игнорируются и могут иметь любые значения. Биты SBZ должны быть равны нулю.
«Тонкая» таблица переадресации второго уровня[]
«Тонкие» таблицы переадресации поддерживаются только в версиях, предшествующих VMSAv6, поэтому пользоваться ими не рекомендуется. Они имеют размер 4 Кбайта и состоят из 1024 записей, каждая из которых описывает отображение 1 Кбайта виртуальной памяти на физическую. Для описания большой страницы требуется 64 идентичных записей «тонкой» таблицы страниц, для описания малой страницы — четыре записи.
Формат записей «тонкой» таблицы переадресации приведён на рисунке.
Назначение разрядов записи «тонкой» таблицы переадресации следующее.
Биты 1:0 определяют вид страницы, которая описывается данной записью:
- 00 — память под страницу не выделена, попытка обращения к ней вызовет отказ;
- 01 — большая страница размером 64 Кбайта;
- 10 — малая страница размером 4 Кбайта;
- 11 — крошечная страница размером 1 Кбайт.
Биты B (2) и C (3) определяют атрибуты области физической памяти, на которую отображена данная страница.
Биты AP (5:4 для крошечных страниц и четыре поля по два бита с 11-го по 4-й включительно для подстраниц больших и малых страниц) служат для проверки прав доступа к странице или её подстраницам.
Поля Large table base address (31:16) для больших, Small page base address (31:12) для малых и Tiny page base address (31:10) для крошечных страниц содержат базовый адрес страницы.
Биты IGN устройством управления памятью игнорируются и могут иметь любое значение, а биты SBZ должны быть равны нулю.