- •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.4.11. Передача атрибутов памяти
Если программа изменяет атрибуты памяти для страницы, то она должна выполнить явные действия для гарантии того, что последующие чтения и записи, использующие новые атрибуты, будут когерентны с предшествующими чтениями и записями, которые были выполнены со старым атрибутом. Процессоры могут иметь отдельные буфера для объединенных, не кэшируемых и кэшируемых обращений и эти буфера не должны быть когерентными друг с другом.
4.4.11.1. Передача атрибутов памяти виртуальной адресации
Для изменения атрибута страницы с виртуальной адресацией, программа должна выполнить следующую последовательность (адрес страницы, чей атрибут будет модифицироваться, обозначается как «Х»).
Примечание. Эта последовательность требуется ТОЛЬКО если новое отображение и старое отображение имеют не один и тот же атрибут памяти.
При процессорной инициализации замены, выполняются следующие шаги 1-3:
1. PTE[X].p = 0// Пометим страницу, как не представленную
Это предостерегает любой процессор от чтения старого отображения (со старым атрибутом) из VHPTпосле этой точки.
2. ptc.ga [X] ;;// Глобальный сброс и аннулированиеALATдля всей страницы
Это удаляет отображения из всех процессорных TCв когерентном домене и принуждает все процессоры слить любые предстоящиеWCилиUCсохранения из буфера записи.
3. mf ;;// Гарантирует видимостьptc.gaдля потока локальных данных
srlz.i ;;// Гарантирует видимостьptc.gaдля потока локальных инструкций
После шага 3, никакой процессор в когерентном домене, не будет инициировать новые обращения к памяти или предварительные выборки для старой трансляции. Однако обратите внимание, что обращения к памяти или предварительные выборки для старой трансляции предшествующие шагу 2, все же могут произойти после шага 3. Эти не выполненные обращения к памяти или предварительные выборки могут вернуть инструкции или данные, которые могут быть помещены в иерархию процессорного кэша; это поведение зависит от реализации.
Если новый атрибуты памяти является не кэшируемым атрибутом, а старый атрибут был кэшируемым (или если в этой точке последовательности кода не известно какой был старый атрибут), то программа должна завершить любые текущие предварительные выборки и убедиться, что любые кэшированные данные со страницы, удалены из кэшей. Чтобы сделать это, программа должна выполнить шаги 4-10. Если новый атрибут памяти это кэшируемость, то программа может пропустить шаги 4-10 и сразу перейти к шагу 11.
4. Вызов процедуры PAL_PREFETCH_VISIBILITY
Вызов процедуры PAL_PREFETCH_VISIBILITYс входным аргументомtrans_typeравным нулю, чтобы показать, что замена производится для атрибута виртуальной памяти. Возвращаемый из этой процедуры аргумент информирует – необходим ли вызов этой процедуры для удаленного процессора или нет. Если вызов этой процедуры не необходим для удаленного процессора, то программа может пропуститьIPIв шаге 5 и сразу перейти к шагу 6.
5. Используя механизм IPI, описанный в разделе 5.8.4.1 «Сообщения межпроцессорных прерываний», для достижения всех процессоров в когерентном домене, выполните шаг 4 во всех процессорах в когерентном домене и прежде чем продолжать, дождитесь пока все вызовы процедурыPAL_PREFETCH_VISIBILITYзавершаться во всех процессорах в когерентном домене.
После шагов 4 и 5, никакая новая предварительная выборка инструкций или данных не будет сделана для страницы «Х», любым процессором в когерентном домене. Однако кэши процессора в когерентном домене могут все еще содержать старые данные или инструкции от предыдущих предварительных выборок или обращений к странице «Х».
6. Вставьте временную UCтрансляцию для страницы «Х».
7. fc [X] // Сливаем все процессорные кэши в когерентном домене
fc [X+32]
fc [X+64]
. . .// … для всех страниц «Х» (размер страницы равенps)
fc [X+ps-32] ;;
// Убедимся, что сливы кэша также видны процессорной инструкции fetch
sync.i ;;
После шага 7, все инструкции слива кэшей, инициализированные в шаге 7, являются видимыми для всех процессоров в когерентном домене, т.е. в когерентном домене нет процессора, который ответил бы кэш попаданием на обращение к памяти по адресу принадлежащему странице «Х».
8. Сбросить временные UCтрансляции изTLB
Вызвать процедуру PAL_MC_DRAIN
Используя механизм IPI, описанный в разделе 5.8.4.1 «Сообщения межпроцессорных прерываний», для достижения всех процессоров в когерентном домене, выполните шаг 9 во всех процессорах в когерентном домене и прежде чем продолжать, дождитесь пока все вызовы процедурыPAL_MC_DRAINзавершаться во всех процессорах в когерентном домене.
В дальнейшем это гарантирует, что любые строки кэша содержащие адреса, принадлежащие странице «Х», во всех кэшах в когерентном домене были принудительно сброшены на шину. Обратите внимание, что эта операция не гарантирует, что строки кэша были записаны назад в память.
Вставить новое отображение с новыми атрибутами памяти.
