- •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.4.10. Эффекты атрибутов памяти в предварительных и проверяемых загрузках
Поведение ALAT предварительных и проверяемых загрузок зависит от атрибута памяти страницы, к которой обращается загрузка. Окончания предварительных и проверяемых загрузок не являются подсказками.
Все спекулятивные страницы имеют идентичное поведение относительно ALAT. Продвинутые загрузки для спекулятивных страниц, всегда выделяют элемент ALAT для регистра, размера и адреса кортежа (tuple), заданного предварительной загрузкой. Спекулятивные предварительные загрузки выделяют элемент ALAT, если спекулятивная загрузка успешна (т.е. нет задержанного исключения); если спекулятивная предварительная загрузка приводит к задержанному исключению, то любой соответствующий элемент ALAT удаляется и не выделяется никакого нового ALAT элемента. Проверки загрузок с окончаниями очистки (ld.c.clr, ld.c.clr.acq, ldf.c.clr), при ALAT попадании– удаляют соответствующий элемент ALAT при попадании, а при ALAT промахе – не меняют состояние ALAT. Проверки загрузок с окончаниями «без очистки» (ld.c.nc, ldf.c.nc) выделяют элемент ALAT при промахе ALAT. При ALAT попадании, ALAT не изменяется, если обнаружено точное соответствие ALAT (регистр, адрес и размер); новый ALAT элемент с регистром, адресом и размером, указанными проверкой загрузки без очистки, может быть выделен, если обнаружено частичное соответствие ALAT (соответствие в регистре).
Предварительные загрузки (спекулятивный и не спекулятивный варианты) для не спекулятивных страниц, всегда удаляют любой соответствующий элемент ALAT. Проверки загрузок для не спекулятивных страниц, при промахах ALAT, никогда не выделяют элемент ALAT, даже в случае проверки загрузки без очистки. Попадания ALAT при проверках загрузки для не спекулятивных страниц (которые могут происходить, если предшествующая предварительная загрузка обращалась к этой странице через спекулятивный атрибут памяти) приводят к неопределенному поведению. Поэтому, при изменении существующей страницы из спекулятивного в не спекулятивное (или наоборот), программное обеспечение должно гарантировать, что аннулируются элементы ALAT соответствующие этой странице.
Страницы с ограниченной спекулятивностью ведут себя, как не спекулятивные страницы по отношению к спекулятивным предварительным загрузкам, и ведут себя, как спекулятивные страницы по отношению ко всем другим предварительным и/или проверочным загрузкам.
Табл. 4.16 описывает поведение предварительных и проверочных загрузок для различных спекулятивных атрибутов памяти.
Табл. 4.16. ALAT поведение в безошибочных предварительных/проверочных загрузках
Атрибуты памяти |
Реакция ld.sa |
Реакция ld.a |
Реакция ld.c.clr, ld.c.clr.acq, ldf.c.clr |
Реакция ld.c.nc, ldf.c.nc |
|||
Не NaT |
NaT |
ALAT попадание |
ALAT промах |
ALAT попадание |
ALAT промах |
||
Спекулятивная |
Выделяет |
Удаляет |
Выделяет |
Удаляет |
nop |
Не меняетA |
Выделяет |
Не спекулятивная |
Нет |
Удаляет |
Удаляет |
Не определен |
nop |
Не определен |
Не должен выделять |
Ограниченная спекулятивность |
Нет |
Удаляет |
Удаляет |
Удаляет |
nop |
Не меняетA |
Выделяет |
Может выделить новый элемент ALAT, если размер и/или адрес отличается от соответствующих ld.a или ld.sa, чей элемент ALAT был согласован.
