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

6.11.2. Возврат в прерванный контекст

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

  1. Выделяем окно нулевого размера.

  2. Вычитаем значение BSPSTORE, записанное в шаге 6 раздела 6.11.1, из значенияBSP, прочитанного в шаге 7 раздела 6.11.1, и помещаем разницу вRSC.loadrs, аRSC.modeпомещаем ноль (переводяRSEв режим ленивого слежения).

  3. Запускаем инструкцию loadrs, чтобы убедится, что любые регистры из прерванного контекста, которые были сохранены в новом стеке, загружены в стековые регистры.

  4. Восстанавливаем BSPSTOREиз прерванного контекста (сохраненный на шаге 5 раздела 6.11.1).

  5. Восстанавливаем RNATиз прерванного контекста (сохраненный на шаге 5 раздела 6.11.1).

  6. Восстанавливаем PSFиIFSиз прерванного контекста (сохраненные на шагах 1 и 3 раздела 6.11.1).

  7. Восстанавливаем RSCиз прерванного контекста (сохраненный на шаге 1 раздела 6.11.1). Это восстановление устанавливает биты режимаRSE, а также уровень привилегий и упорядочивание байтов.

  8. Запускаем инструкцию rfi(IFS.ifmперейдет вCFM).

6.11.3. Синхронное переключение вспомогательной памяти.

Не вытесненное, синхронное переключение вспомогательной памяти на любом уровне привилегий может быть достигнуто следующим образом:

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

  2. Запускаем инструкцию flushrs, чтобы смыть грязные регистры во внешнюю память.

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

  4. Читаем и сохраняем прикладной регистр RNAT.

  5. Аннулируем ALAT, используя инструкциюinvala, когда переключение из кода, который не восстанавливаетRSE.BOFк первоначальным установкам. ОтличиеRSE.BOFвынудит поместить программные значения в новом контексте в различные физические регистры. Детали см. в разделе 6.9 «ВзаимодействиеRSEиALAT».

  6. Записываем BSPSTOREнового контекста (былоBSPпослеflushrs, когда переключение кончилось).

  7. Записываем PFSиRNATнового контекста.

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

6.12. Инициализация rse

При сбросе процессора RSEустанавливается в режим ленивого слежения, т.е. оба битаRSC.modeустанавливаются в ноль. Уровень привилегийRSE(RSE.pl) устанавливается в ноль. ЗначениеRSE.BOFуказывает на физический регистр 32. ЗначенияAR[PFS].pfmиCR[IFS] являются не определенными. Маркер текущего окна (CFM) устанавливается так:sof=96,sol=0,sor=0,rrb.gr=0,rrb.fr=0 иrrb.pr=0. Это дает процессору доступ к 96 стековым регистрам.

Механизм RSEне выполняет операции сливания/заливания до тех пор, пока инструкцииalloc, br.ret, rfi, flushrsилиloadrsне потребуют принудительныхRSEопераций, либо пока программное обеспечение явно не позволит активныеRSEоперации. Программное обеспечение должно снабдитьRSEадресом правильной вспомогательной памяти в прикладном регистреBSPSTOREдо возникновения любыхRSEопераций сливания/заливания. Неверная инициализацияBSPSTOREприведет к неопределенному поведению.