- •4. Адресация и защита
- •4.1. Виртуальная адресация
- •4.1.1. Буфер трансляции адресов (tlb)
- •4.1.1.1. Регистры трансляции (tr)
- •4.1.1.2. Кэш трансляции (tc)
- •4.1.1.3. Объединенные буфера трансляции адресов
- •4.1.1.4. Сбрасывающее поведение вставок и сбросов tlb
- •4.1.1.5. Формат вставки трансляции
- •4.1.1.6. Права доступа к странице
- •4.1.1.7. Размеры страниц
- •4.1.2. Регистры регионов (rr)
- •4.1.3. Ключи защиты
- •4.1.4. Инструкции трансляции
- •4.1.5. Таблица виртуальных хэш страниц (vhpt)
- •4.1.5.1. Конфигурация vhpt
- •4.1.5.2. Поиск vhpt
- •4.1.5.3. Короткий формат базирования региона vhpt
- •4.1.5.4. Длинный формат vhpt
- •4.1.6. Хэширование vhpt
- •4.1.6.1 Индекс короткого формата vhpt базирования региона
- •4.1.6.2. Длинно форматный vhpt хэш
- •4.1.7. Среда vhpt
- •4.1.8. Поиск трансляции
- •4.1.10. Виртуальное совмещение (aliasing)
- •4.2. Физическая адресация
- •4.3. Не реализованные адресные биты
- •4.3.1. Не реализованные физические адресные биты
- •4.3.2. Не реализованные виртуальные адресные биты
- •4.3.3 Поведение инструкций с не реализованными адресами
- •4.4. Атрибуты памяти
- •4.4.1. Атрибуты памяти виртуальной адресации
- •4.4.2. Атрибуты памяти физической адресации
- •4.4.3. Атрибуты кэшируемости и когерентности
- •4.4.4. Атрибут политики записи кэша.
- •4.4.5. Атрибут объединения
- •4.4.6. Атрибуты спекулятивности
- •4.4.7. Атрибуты последовательности и упорядочивание
- •4.4.8. Атрибут «не вещь» (NaTPage)
- •4.4.9. Эффекты атрибутов памяти в инструкциях обращения к памяти
- •4.4.10. Эффекты атрибутов памяти в предварительных и проверяемых загрузках
- •4.4.11. Передача атрибутов памяти
- •4.4.11.1. Передача атрибутов памяти виртуальной адресации
- •4.4.11.2. Передача атрибутов физической адресации – отключение предвыборок/спекуляций и удаление кэшируемости
- •4.5. Выравнивание элементов памяти и атомистичность
4.1.8. Поиск трансляции
Общая последовательность поиска и VHPT показана на рис. 4.16. При неудачном TLB поиске, если обходчик VHPT запрещен для региона обращения, то вызывается ошибка «Альтернативный промах TLB инструкций/данных». Если обходчик VHPT разрешен для региона обращения, то следует обращение к VHPT для локализации промахнувшейся трансляции. См. раздел 4.1.7 «Среда VHPT». Если дополнительные промахи TLB происходят в процессе обращений обходчика VHPT, то вызывается ошибка «Трансляция VHPT». Если обходчик VHPT не находит требуемую трансляцию в VHPT или поиск завершается аварийно, то вызывается ошибка «Промах TLB инструкций/данных». В противном случае элемент загружается в ITC или DTC. Если же упомянутые условия ошибки не обнаружены, то процессор может загрузить элемент в ITC или DTC, даже если порядок выполнения программы не требует трансляции.
Вставки обходчика VHPT в TC, следуют тем же самым правилам очистки перед выполнением, которым подчиняются программные вставки (см. табл. 4.1 «Поведение сброса инструкций TLB»). Вставки обходчика VHPT в DTC, ведут себя подобно itc.d; вставки обходчика VHPT в ITC, ведут себя подобно itc.i. Если обращение инструкции приводит в результате к обходу VHPT, который отсутствует в данных TLB, то вставка DTC для трансляции для VHPT, действует подобно itc.d. Вставки обходчика VHPT в элементы, которые существуют в регистрах TR, не разрешены. Установлено, что обходчик VHPT может искать любой виртуальный адрес, но если адрес отображается TR, то он не вставляется в TC. Программное обеспечение не должно создавать накладывающиеся трансляции в VHPT, которые являются большими, чем текущие существующие TR трансляции. Вставка обходчика VHPT может привести к аварийному завершению «Машинная проверка», если существует наложение между TR и вставляемым элементом VHPT.
После того как загружен элемент трансляции, проверяются дополнительные ошибки TLB; они включаются в приоритетном порядке: «Страница не представлена», «Употребление NaT-страницы», «Промах ключа», «Разрешение ключа», «Права доступа», «Бит доступа» и «Бит мусора». Табл. 4.9 описывает ошибки связанные с обходчиком VHPT и TLB.
При неудачном поиске TLB/VHPT, процессор загружает регистры прерывания и трансляцию по умолчанию, как это описано в разделе 8.1 «Описания вектора прерывания» при описании параметров ошибки трансляции. Если операционная система принимает значения по умолчанию, то только часть физического адреса элемента TLB, нужна для вставки TLB.
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||
|
|
Virtual Address |
|
|
|||||||||||||
|
|
|
|
||||||||||||||
|
|
|
|
|
|
||||||||||||
Unimplemented Data Address fault |
no |
implemented VA? |
|
|
|||||||||||||
|
|
|
|||||||||||||||
|
|
|
yes |
|
|||||||||||||
|
|
||||||||||||||||
Data Nested TLB fault |
|
Search TLB |
|
|
|||||||||||||
|
0 |
|
|
||||||||||||||
|
PSR.ic |
|
not found |
|
|||||||||||||
Alternate Data TLB Miss fault |
|
|
|
||||||||||||||
|
Data VHPT Walker Enabled |
|
|
||||||||||||||
|
|
|
|||||||||||||||
|
|
|
|||||||||||||||
Data Nested TLB fault |
0 |
|
yes |
|
|
||||||||||||
|
|
|
|
||||||||||||||
|
PSR.ic |
VHPT walker |
|
|
|
||||||||||||
VHPT Data |
|
TLB Miss |
|
|
|
||||||||||||
fault |
|
|
|
|
|
||||||||||||
|
Search VHPT |
|
|
||||||||||||||
Data Nested TLB fault |
|
|
|
||||||||||||||
PSR.ic |
|
|
|
||||||||||||||
|
failed search: tag mismatch or walker abort |
found |
|
||||||||||||||
Data TLB Miss fault |
|
|
|
||||||||||||||
|
|
|
|||||||||||||||
|
|
|
|||||||||||||||
Faults: Page Not Present NaT Page Consumption Key Miss Key Permission Access Rights Dirty Bit Access Bit Debug Unaligned Data Reference |
|
|
|
|
|||||||||||||
TC Insert |
|
|
|||||||||||||||
|
|
||||||||||||||||
|
|
|
|
||||||||||||||
fault checks |
|
|
|||||||||||||||
|
|
||||||||||||||||
|
no fault |
|
|||||||||||||||
|
|
|
|
||||||||||||||
Access Memory |
|
|
|||||||||||||||
|
|
||||||||||||||||
Unsupported Data Reference |
|
|
|
||||||||||||||
|
|
|
|||||||||||||||
Data TLB VHPT Search |
|
||||||||||||||||
|
|
|
|
|
|
||||||||||||
Рис. 4.16. Поиск TLB/VHPT
Табл. 4.9. Ошибки поиска TLB и VHPT
Ошибка |
Описание |
Инструкции/данные VHPT |
Вызывается, если есть дополнительный промах TLB, когда обходчик VHPT пытается обратиться к VHPT. Обычно используется для создания отображения листа таблицы для конфигурации таблицы линейных страниц. |
Альтернативный промах TLB инструкций/данных |
Вызывается, когда обходчик VHPT не разрешен, а обращение к инструкциям или данным приводит к промаху TLB. Например, обходчик VHPT может быть запрещен в данном виртуальном регионе, так что могут быть использованы алгоритмы трансляции, зависимые от регионов. |
Промах TLB инструкций/данных |
Вызывается, если обходчик VHPT разрешен, но:
По сути, обработчики промахов TLB инструкций/данных, являются программными обходчиками VHPT. |
Вложенные данные TLB |
Вызывается, если произошла одна из ошибок «Промах TLB данных», «Альтернативный промах TLB данных», «Трансляция данных VHPT» и PSR.ic=0 и нет летящего состояния (например, ошибка в обработчике промаха TLB). Ошибка вложенных данных TLB разрешает программному обеспечению для того, чтобы избежать накладных расходов для потенциальных ошибок промаха TLB данных. |
Не представлена страница инструкций/данных |
Вызывается, если Р-бит вызываемой трансляции равен 0. |
Употребление NaT страницы инструкций/данных |
Не спекулятивная загрузка, сохранение, принудительная RSE загрузка, сохранение, выполнение, либо семафорная операция обращается к странице, которая помечена в физической памяти атрибутом NaTPage. Детальнее см. раздел 4.4.8 «Атрибут не вещь (NaTPage)». |
Промах ключа инструкций/данных |
Ключ разрешения обращающейся трансляции не представлен в наборе регистров допустимых ключей защиты. |
Разрешение ключа инструкций/данных |
Требуемая трансляция отклонена по разрешению чтения, записи или выполнения, с помощью соответствующих регистров ключей защиты. |
Права доступа инструкций/данных |
Отклонено, постранично гранулированное чтение, запись выполнение и обращения привилегированного уровня. |
Бит мусора данных |
При сохранении или семафорной операции бит мусора обращающейся трансляции, равен 0. |
Бит доступа инструкций/данных |
Бит доступа обращающейся трансляции, равен 0. |
4.1.9. 32-битная виртуальная адресация
32-битная виртуальная адресация данных поддерживается в архитектуре набора инструкций Itanium с помощью трех моделей: расширения нулями, расширения знаком и «swizzling» указателя. Обращения к памяти IA-32 используют модель расширения нулями, все линейные виртуальные 32-битные IA-32 адреса, расширяются нулями до 64-битного виртуального адреса.
Модель расширения нулями выполняет вычисление адреса с помощью инструкций add и shladd, только если программное обеспечение убедится, что старшие 32 бита всегда нули. Эта модель ограничивает 32-битную виртуальную адресацию виртуальным регионом 0. В этой модели регионы с 1 по 7 доступны только для 64-битной адресации.
В модели расширения знаком, программное обеспечение гарантирует, что старшие 32 бита виртуального адреса всегда равны биту 31. Вычисления адреса используют инструкции add, shladd и sxt. Эта модель разбивает 32-битное адресное пространство на две половины, которые распространяются на 231 байтов виртуальных регионов 0 и 7, внутри 64-битного адресного пространства. В этой модели регионы со 2 по 6 доступны только для 64-битной адресации.
Модель указателя «swizzling» выполняет вычисление адреса с помощью инструкций addp4 и shladdp4. Эти инструкции генерируют 32-битный адрес в пределах 64-битного виртуального адресного пространства, как это показано на рис. 4.17. 32-битное виртуальное адресное пространство делится на 4 секции, которые распространяются на 230 байтов виртуальных регионов от 0 до 3, внутри 64-битного адресного пространства. В этой модели регионы с 4 по 7 доступны только для 64-битной адресации.
|
|
||||||||||||||||||
|
base |
offset |
|
||||||||||||||||
|
63 |
32 |
31 |
30 |
29 |
0 |
|
63 |
32 |
31 |
0 |
|
|||||||
|
|
|
|
|
|
|
|
||||||||||||
|
|||||||||||||||||||
|
|
63 |
62 |
61 |
60 |
32 |
31 |
0 |
|
|
|||||||||
|
|
0 |
|
000000 |
|
|
|
||||||||||||
|
|
||||||||||||||||||
Рис. 4.17. Генерация 32-битного адреса использующая addp4
В модели указателя «swizzling», отображения в пределах каждого региона не обязательно начинаются с нулевого смещения, т.к. старшие 2 бита 32-битного адреса служат внутри каждого региона и номером виртуального региона, и смещением. Биты виртуального адреса {62:61} не участвуют в сложении адреса, поэтому некоторые регионы могут быть на самом деле больше, чем 230 байтов из-за сложения 32-битного смещения и отсутствия переноса в биты {62:61}. Заметим, что преобразования является не разрушающим: преобразованный 64-битный указатель может быть использован как 32-битный указатель. Плоское 31- или 32-битное адресное пространство может быть создано путем назначения одного и того же идентификатора региона для регистров непрерывных регионов. Переходы в другой 230 байтовый регион выполняются путем вычисления адреса перехода в 32-битном виртуальном пространстве и дальнейшим преобразованием в 64-битный указатель с помощью addp4. В противном случае, адреса переходов будут расширены за 230 байтовую границу внутри первоначального региона.
