Таблиці переадресації в A- і R-профілях
- Загальні відомості
- База таблиці переадресації
- Таблиця переадресації першого рівня
- «Груба» таблиця переадресації другого рівня
- «Тонка» таблиця переадресації другого рівня
Загальні відомості
Інформація, необхідна для перетворення віртуальних адрес в фізичні і для контролю прав доступу, знаходиться в записах таблиць переадресації, розташованих в пам'яті. MMU кешируєт останню використану інформацію з цих таблиць в буферах швидкої переадресації (TLB), і звернення до пам'яті для вибірки записів таблиць виконуються лише тоді, коли відповідна інформація в TLB відсутня.
Таблиці переадресації мають два рівня. Перший (верхній) рівень описує перетворення адрес для секцій і суперсекцій (ділянок пам'яті розміром 1 і 16 Мбайт відповідно), а також містить посилання на таблиці другого рівня, що відповідають за перетворення адрес для сторінок (ділянок пам'яті розміром 64, 16 або 1 Кбайт - відповідно великі, малі і крихітні сторінки). Підтримка суперсекцій розміром 16 Мбайт є необов'язковою; крихітні сторінки розміром 1 Кбайт не підтримуються, починаючи з версії VMSAv6 . Таким чином, MMU забезпечує гарантовану підтримку секцій довжиною 1 Мбайт і сторінок в 64 і 16 Кбайт.
Великі і малі сторінки можуть ділитися на чотири рівні частини довжиною відповідно 16 і 1 Кбайт. У версії VMSAv6 ця можливість вважається застарілою, але для сумісності підтримується.
Формат таблиць переадресації визначається значенням біта 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 повинні бути рівні нулю.