- •6. Механизм стека регистров (rse)
- •6.1. Обзор rsEи вспомогательной памяти
- •6.2. Внутреннее состояние rse
- •6.3. Разделы стека регистров
- •6.4. Работа rse
- •6.5. Управление rse
- •6.5.1. Регистр конфигурации стека регистров (rsc)
- •6.5.2. Регистр NaTсовокупности регистрового стека (rnat)
- •6.5.3. Прикладные регистры указатели вспомогательной памяти (bspstorEиBsp)
- •6.5.4. Инструкции управления rse
- •6.5.5 Плохой pfs, используемый переходом возврата
- •6.6. Прерывания rse
- •6.7. Поведение rsEпри прерываниях
- •6.8. Поведение rsEв неполном регистровом окне
- •6.9. Взаимодействие rsEиAlat
- •6.10. Когерентность вспомогательной памяти и упорядочивание памяти
- •6.11. Переключения внешней памяти rse
- •6.11.1 Переключение из прерванного контекста
- •6.11.2. Возврат в прерванный контекст
- •6.11.3. Синхронное переключение вспомогательной памяти.
- •6.12. Инициализация rse
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сохранений.