- •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.3. Ключи защиты
Ключи защиты обеспечивают метод разрешения ограничений путем маркировки каждой виртуальной страницы уникальным идентификатором защиты домена. Регистры ключей защиты (PKR – Protection Key Registers) представляют кэш регистра всех ключей защиты требуемых процессом. Операционная система ответственна за управление и политики замены кэша ключа защиты. Прежде чем обращение к памяти (включая IA-32) будет разрешено, процессор сравнивает значение ключа трансляции со всеми ключами, содержащимися в регистрах PKR. Если соответствующий ключ не найден, то процессор вызывает ошибку «Промах ключа». Если соответствующий ключ найден, то доступ к странице квалифицируется дополнительными проверками защиты чтения, записи или выполнения, указанными в соответствующем регистре ключа защиты. Если эти проверки не успешны, то вызывается ошибка «Разрешение ключа». При получении ошибок «Промах ключа» и «Разрешение ключа», программа может осуществить желательную политику защиты для защищенного домена. Рис. 4.8 и табл. 4.6 описывают формат регистра ключа защиты и поля регистра ключа защиты.
63 |
|
|
|
|
|
|
|
|
|
|
|
|
|
32 |
31 |
|
|
|
|
|
|
|
8 |
7 |
|
4 |
3 |
2 |
1 |
0 |
rv |
key |
rv |
xd |
rd |
wd |
v |
||||||||||||||||||||||||
32 |
8 |
4 |
1 |
1 |
1 |
1 |
||||||||||||||||||||||||
Рис. 4.8. Формат регистра ключа защиты
Табл. 4.6. Поля регистра ключа защиты
Поле |
Биты |
Описание |
v |
0 |
Valid – правильный. Если – 1, то элемент регистра защиты – правильный и проверен процессором при выполнении процессором проверок защиты. Если – 0, то элемент игнорируется. |
wd |
1 |
Write Disable – запрет записи. Если – 1, то разрешение защиты отклоняется для трансляций в защищаемом домене. |
rd |
2 |
Read Disable – запрет чтения. Если – 1, то разрешение чтения отклоняется для трансляций в защищаемом домене. |
xd |
3 |
Execute Disable – запрет выполнения. Если – 1, то разрешение выполнения отклоняется для трансляций в защищаемом домене. |
key |
31:8 |
Protection Key – ключ защиты. Уникальные метки трансляции для данного защищаемого домена. |
rv |
7:4,63:32 |
Зарезервировано |
Модели процессоров имеют не менее 16 регистров ключей защиты и не менее 18 битов в поле ключа защиты. В некоторых моделях процессоров реализованы дополнительные регистры ключей защиты и дополнительные биты поля ключа защиты. Не реализованные регистры и биты являются зарезервированными. Регистры ключей имеют реализованных битов ключа не меньше, чем имеется в поле rid регистров регионов. Дополнительные реализованные биты должны быть непрерывны, и начинаться с бита 18. Для дальнейшей информации относительно количеств регистров ключей защиты и битов ключей защиты, реализованных в конкретной модели процессора Itanium, посмотрите документацию, специфицирующую процессор.
Программа должна запустить операцию сериализации инструкций, чтобы гарантировать, что записи в регистры ключей защиты являются наблюдаемыми для выборок зависимых инструкций и запустить операцию сериализации данных для обращений к зависимым данным памяти.
Процессор гарантирует уникальность ключей защиты, сверяя новые допустимые ключи защиты со всеми регистрами ключей защиты в течение инструкций записи в PKR. Если допустимый соответствующий ключ найден в каком-то регистре PKR, то процессор аннулирует соответствующий PKR регистр, путем установки PKR.v в 0, перед выполнением записи в новый PKR регистр. Если аннулируется какой-то соответствующий PKR, то его другие поля остаются неизменными.
Ошибки Промаха и Разрешения ключа, вызываются только тогда, когда разрешены трансляции памяти (для обращения к данным – PSR.dt=1, для обращения к инструкциям – PSR.it=1, для обращения к стеку регистров– PSR.rt=1), и разрешена проверка ключа защиты (PSR.pk=1).
Ключи защиты TLB данных могут быть получены с помощью инструкции tak (Translation Access Key – ключ доступа трансляции). Значения ключей TLB инструкций не могут быть прямо прочитаны. Для получения значений ключей TLB инструкций программа должна создать условия для чтения структур памяти.
