Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
MProc / M9 / Системная архитектура часть 6..doc
Скачиваний:
21
Добавлен:
16.04.2013
Размер:
270.85 Кб
Скачать

6.10. Когерентность вспомогательной памяти и упорядочивание памяти

Загрузки и сохранения RSE, всегда являются когерентными относительно кэна данных процессора. Вспомогательная память нижеBSPSTOREопределятся, как содержащая стек регистров (образ памяти содержит последовательные значения регистров иNaTсовокупностей). МеханизмRSEне изменяет адреса нижеBSPSTORE, до тех пор, покаbr.ret, rfiили запись вBSPSTORE, опуститься ниже первоначального значенияBSPSTORE. МеханизмRSEникогда не записывает по адресу памяти большему или равномуBSP.

Для того чтобы программа изменила значение вспомогательной памяти и гарантировала, что оно было загружено механизмом RSE, программа должна сначала перевестиRSEв режим ленивого слежения (RSC.mode=0), а затем прочитатьBSPиBSPSTOREдля того, чтобы определить положение указателяRSEсохранения. Если место, которое будет изменено, лежит междуBSPSTOREиBSP, то программа должна запуститьflushrs, обновить место во вспомогательной памяти и запустить инструкциюloadrsсRSC.loadrsустановленным в 0 (это аннулирует текущее содержимое физических стековых регистров, кроме текущего окна, что вынудитRSEперезагрузить регистры из вспомогательной памяти). Если место, которое будет изменено, лежит нижеBSPSTORE, то можно избежать ненужного движения памяти следующим образом: программа должна прочитать прикладной регистрRNAT, изменить место во вспомогательной памяти, перезаписатьBSPSTOREпервоначальным значением, а затем перезаписатьRNAT.

Загрузки и сохранения RSE, упорядочены слабо. Инструкцииflushrsи loadrsне включают в себя неявный забор (fence) памяти. Включение и выключениеRSEне влияет на упорядочивание памяти. Чтобы гарантировать упорядочиваниеRSEзагрузок и сохранений в мультипроцессорной системе, программному обеспечению требуется запустить инструкции явного забора памяти (mf).

6.11. Переключения внешней памяти rse

Реализация системных вызовов, переключений контекста операционной системы, упаковок нитей уровня пользователя, отладочных программ, а также некоторых типов обработки исключения (например, setjmp/longjmp, структурированной обработки исключения и развертывания стека вызова) требует явного управления уровня пользователя дляRSEи/или знаний формата вспомогательной памяти. Поэтому,RSEи вспомогательная память могут управляться на всех уровнях привилегий.

Здесь описаны три переключения вспомогательной памяти RSE:

  1. Переключение из прерванного контекста (как часть обработчика прерывания или кода всплывающего (bubble-up) прерывания).

  2. Возвращение к предыдущему прерванному контексту.

  3. Не вытесненное, синхронное переключение вспомогательной памяти (охватывает системные вызовы, переключения контекста нитей уровня пользователя и операционной системы).

Неудача при следовании этим последовательностям, может вызвать неопределенное поведение RSEили процессора.

6.11.1 Переключение из прерванного контекста

Для переключения от вспомогательной памяти прерванного контекста к новой вспомогательной памяти:

  1. Читаем и сохраняем прикладные регистры RSCиPFS.

  2. Запускаем инструкцию coverдля прерванного окна.

  3. Читаем и сохраняем управляющий регистр IFS.

  4. Переводим RSEв режим ленивого слежения, путем очистки битовRSC.mode.

  5. Читаем и сохраняем прикладные регистры BSPSTOREиRNAT.

  6. Записываем BSPSTOREс новым адресом вспомогательной памяти.

  7. Читаем и сохраняем новый BSPдля вычисления количества грязных регистров.

  8. Выбираем желаемые установки RSE(режим, уровень привилегий и порядок байт).