Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПиП МПС(Ассемблер Левицкий экт 4) / MProc / M9 / Системная архитектура часть 4..doc
Скачиваний:
69
Добавлен:
16.04.2013
Размер:
751.1 Кб
Скачать

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

  1. Вызвать процедуру PAL_MC_DRAIN

  2. Используя механизм IPI, описанный в разделе 5.8.4.1 «Сообщения межпроцессорных прерываний», для достижения всех процессоров в когерентном домене, выполните шаг 9 во всех процессорах в когерентном домене и прежде чем продолжать, дождитесь пока все вызовы процедурыPAL_MC_DRAINзавершаться во всех процессорах в когерентном домене.

В дальнейшем это гарантирует, что любые строки кэша содержащие адреса, принадлежащие странице «Х», во всех кэшах в когерентном домене были принудительно сброшены на шину. Обратите внимание, что эта операция не гарантирует, что строки кэша были записаны назад в память.

  1. Вставить новое отображение с новыми атрибутами памяти.