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

6.7. Поведение rsEпри прерываниях

Когда процессор вызывает прерывание, окно текущего регистрового стека остается неизменным. Если PSR.ic=1, то очищается бит действительности регистра состояния функции прерывания (IFS.v). Когда битIFS.vочищен, содержимое поля маркера окна прерывания (IFS.ifm) не определено.

Пока выполняется обработчик прерывания и RSEнаходится в режиме интенсивной или активной загрузки/восстановления, механизмRSEпродолжает сливания/заливания регистров в/из внешней памяти от имени прерванного контекста, пока регистры не являются частью текущего окна определенногоCFM.

Последовательность принудительных RSEзагрузок или сохранений (изalloc, flushrs, loadrs, br.ret илиrfi) может быть прервана внешним прерыванием. ЕслиPSR.ic=0, то ошибки сделанные на принудительныхRSEоперациях, не могут быть исправлены.

6.8. Поведение rsEв неполном регистровом окне

Текущее регистровое окно полагается неполным(incomplete), когда одна из необходимыхRSEзагрузок после ошибокbr.ret илиrfi, оставляетBSPSTOREуказывающим на место выше, чемBSP(т.е.RSE.ndirty_wordsявляется отрицательным). Окно становится полным, когдаRSE.ndirty_wordsстановится не отрицательным, а также при выполнении инструкцииcover, либо при обработке ошибки и завершении первоначальной последовательности необходимыхRSEзагрузок.

Когда текущее окно неполное, следующие инструкции имеют неопределенное поведение: alloc, br.call, brl.call, br.ret, flushrs, loadrsи запись вBSPSTORE. Программное обеспечение должно гарантировать, что текущее окно является полным перед выполнением этих инструкций.

6.9. Взаимодействие rsEиAlat

Таблица ALAT(см. раздел первого тома 4.4.5 «Спекуляция по данным») использует адреса физических регистров для отслеживания предварительных загрузок. ЗначениеRSE.BOFможет измениться только в результате инструкцийbr.call(черезCFM.sol),cover(черезCFM.sof),br.ret(черезAR[PFM].sol) илиrfi(черезCR[IFS].ifm.sof, когдаCR[IFS].v=1). Это гарантирует для целей аннулированияALAT, что аппаратура не меняет схему отображения адресов регистров из виртуальных в физические, если программное обеспечение явно не потребовало сделать это.

Если программное обеспечение выполняет переключение вспомогательной памяти, которое заставило поместить программные значения в различные физические регистры, то ALATдолжна быть явно аннулирована инструкциейinvala. Обычно это случается, как часть процесса или нити (thread) переключения контекста, разворачивания стека вызовов и длинных переходов, когда программное обеспечение перезаписываетAR[BSPSTORE], но не может гарантировать, что сохраняетсяRSE.BOF.

Стековый регистр называются освобожденным (deallocated), когда инструкцияalloc, br.retилиrfiизменяет вершину текущего окна так, что регистр больше не является частью текущего окна. С момента освобождения стекового регистра, его значение, егоNaTбит и соответствующий емуALAT, не определены. Если этот регистр, впоследствии станет частью текущего окна (либо через другую инструкциюalloc, либо черезbr.retилиrfiдля предыдущего окна, которое содержит этот регистр), то значение, сохраненное в регистре,NaTбит регистра и соответствующийALATэлемент для регистра, окажутся неопределенными.

Сохранения RSEне аннулируют элементыALAT. Поэтому программное обеспечение не может использоватьALATдля трассировкиRSEсохранений во вспомогательной памяти.

Примечание. Хотя реализации позволено удалять элементы изALATв любое время, но соображения эффективности настоятельно рекомендуют не аннулировать элементыALATиз-заRSEсохранений.