- •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.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или операции с памятью для страниц с атрибутами другими, чем кэшируемая отложенная запись.
