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

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 приведет к неопределенному поведению.