- •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.5. Выравнивание элементов памяти и атомистичность
Все выборки Itanium инструкций, выровненные операции загрузки, сохранения и семафорные (включая IA-32), являются элементарными (atomic), за исключением обращений к расширенной памяти с плавающей точкой (ldfe, stfe и обращений к 10-байтовой IA-32 памяти) для кэшируемой памяти без отложенной записи. В некоторых моделях процессоров, обращения к выровненной 10-байтовой расширенной Itanium памяти с плавающей точкой, для кэшируемой памяти без отложенной записи могут вызвать ошибку «Обращение к не поддерживаемым данным». Детали см. разделе 4.4.9 «Эффекты атрибутов памяти в инструкциях обращающихся к памяти». Загрузкам разрешается удовлетворяться значениями, полученными из буфера сохранений (или любой логически эквивалентной структуры), где разрешения архитектурного упорядочивания и загружаемые значения могут оказаться не атомарными. За деталями обратитесь к разделу 4.4.7 «Атрибуты последовательности и упорядочивание».
Инструкции парной загрузки выполняются атомарно при следующих условиях: парная загрузка 16-байтовых выровненных целых чисел и чисел с двойной точностью, выполняется как обращение к 16-байтовому элементу памяти. Парная загрузка 8-байтовых выровненных чисел с одинарной точностью, выполняется как обращение к 8-байтовому элементу памяти.
Обращения к памяти выровненных Itanium данных никогда не вызывает ошибку «Обращение к не выровненным данным». Минимально, каждая Itanium инструкция и соответствующий ей шаблон, выбираются атомарно вместе. Не упорядоченные Itanium загрузки могут использовать буфер сохранения для значений данных. За деталями обратитесь к разделу 4.4.7 «Атрибуты последовательности и упорядочивание».
Если PSR.ac=1, то любое обращение к памяти данных Itanium, которое не выровнено на границу размера операнда, приводит к ошибке «Обращение к не выровненным данным»; например, 1, 2, 4, 8, 10 и 16-байтовые элементы данных, должны быть выровнены на 1, 2, 4, 8, 16 и 16-байтовые границы, во избежание ошибки «Обращение к не выровненным данным». Если PSR.ac=1, то любое обращение к памяти данных IA-32, которое не выровнено на границу размера операнда, приводит к ошибке исключение IA-32 «Проверка выравнивания».
Примечание. 10-байтовые элементы и элементы парных загрузок с плавающей точкой двойной точности, выравниваются на границу 16-байт. Обращения к 32-байтовому длинному формату VHPT, всегда выравниваются на 32-байтовую границу.
Не выровненные семафорные Itanium обращения (cmpxchg, xchg, fetchadd) приводят к ошибке «Обращение к не выровненным данным», не зависимо от состояния PSR.ac.
Если PSR.ac=0, то обращения к памяти данных Itanium, которые не выровнены, может либо не может привести к ошибке «Обращение к не выровненным данным», в зависимости от реализации. Уровень поддержки не выровненной памяти определяется реализацией. Однако, все реализации будут вызывать ошибку «Обращение к не выровненным данным», если обращение к элементу данных с помощью Itanium инструкции, охватывает 4К-байтную границу, а многие реализации будут вызывать ошибку «Обращение к не выровненным данным», если элемент данных охватывает строку кэша. Реализации могут также вызвать ошибку «Обращение к не выровненным данным» для любых других, не выровненных обращений к памяти. Программе настоятельно рекомендуется выравнивать значения данных для избежания возможной деградации эффективности и для кода IA-32, и для кода Itanium. Если PSR.ac=0 и проверки IA-32 выравнивания также запрещены, то не вызывается никаких ошибок, не зависимо от выравнивания обращений к памяти IA-32 данных.
Не выровненные предварительные загрузки поддерживаются, хотя конкретная реализация может принять решение – не выделять элемент ALAT для не выровненной предварительной загрузки. Кроме того, ALAT может «пессимистично» выделять элемент для не выровненной загрузки, путем выделения большего элемента, чем естественный размер загружаемого элемента данных, такой длины, что большой элемент полностью охватывает не выровненный диапазон адресов (например, ld4.a для адреса 0х3 может выделить 8-байтовый элемент, начиная с адреса 0х0). Сохранения (не выровненные или иные) могут также аннулировать не выровненные элементы ALAT.
1 Хотя обходы VHPT выполняются несколько асинхронно относительно выполнения программы, каждое чтение обходчика VHPT появляется, как если бы оно было выполнено автоматически, в некоторой одной точке в программном порядке.
2 Это включает все типы загрузок (ld, ld.acq) и чтение памяти VHPT и RSE. Однако, обратите внимание, что операция чтения семафоров не может быть удовлетворена значениями найденными в буфере сохранения.
3 Для обоих семафорных форм, и для запроса и для освобождения.
4 Например, неупорядоченные сохранения, загрузки, ld.acq или операции с памятью для страниц с атрибутами другими, чем кэшируемая отложенная запись.
