- •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.9. 32-Битная виртуальная адресация
- •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.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байтовую границу внутри первоначального региона.