OSDev Wiki
Advertisement

Общие сведения[]

Информация, необходимая для преобразования виртуальных адресов в физические и для контроля прав доступа, находится в записях таблиц переадресации, расположенных в памяти. 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 со включенной и выключенной поддержкой подстраниц.

Старый формат записи таблицы переадресации первого уровня ARM

Формат записей таблицы переадресации первого уровня для версий, предшествующих VMSAv6

Формат записи таблицы переадресации первого уровня с включенными подстраницами ARM

Формат записей таблицы переадресации первого уровня для версии VMSAv6 при включенной поддержке подстраниц

Формат записи таблицы переадресации первого уровня с выключенными подстраницами ARM

Формат записей таблицы переадресации первого уровня для версии 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. Подстраницы этой версией поддерживаются, но считаются устаревшими; в будущем их поддержка может быть упразднена. Форматы записей приведены на рисунках.

Формат записи грубой таблицы переадресации второго уровня с подстраницами (ARM)

Формат записей «грубой» таблицы переадресации второго уровня с подстраницами

Формат записи грубой таблицы переадресации второго уровня без подстраниц (ARM)

Формат записей «грубой» таблицы переадресации второго уровня без подстраниц

Назначение разрядов элемента таблицы следующее.

Биты 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 идентичных записей «тонкой» таблицы страниц, для описания малой страницы — четыре записи.

Формат записей «тонкой» таблицы переадресации приведён на рисунке.

Формат записи тонкой таблицы переадресации (ARM)

Формат записей «тонкой» таблицы переадресации второго уровня

Назначение разрядов записи «тонкой» таблицы переадресации следующее.

Биты 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 должны быть равны нулю.

Advertisement