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

6.5.5 Плохой pfs, используемый переходом возврата

Если при выполнении br.ret, прикладной регистрPFSзадает выходную область, которая больше, чем количество реализованных стековых регистров минус размер грязного раздела ((AR[PFS].sof–AR[PFS].sol) > (RSE.N_STACKED_PHYS–RSE.ndirty)), то при возврате,CFMне восстановится изAR[PFS].pfm(нормальное поведение); вместо этого, все поляCFM(процедуры, в которую происходит возвращение) будут установлены в ноль.

Типичные последовательности вызова процедуры и возврата из нее, сохраняющие значения PFS, и которые не используют инструкцииcoverиloadrs,не будут сталкиваться с этой ситуацией.

Механизм RSEобнаружит вbr.retупомянутые выше условия, и изменит свое состояние следующим образом:

  • База переименования регистров (RSE.BOF),AR[BSP] иAR[BSPSTORE] изменятся так, как это требуется для возврата.

  • Регистр CFM(после возврата) принудительно установится в ноль; т.е. все поляCFM(включаяCFM.sofиCFM.sol) установится в ноль.

  • Регистры окна, из которого возвращаемся, и сохраненные регистры окна, в которое возвращаемся, добавляются в недействительный раздел регистрового стека.

  • Грязный раздел регистрового стека сокращается до AR[PFS].pfm.sol.

  • Чистый раздел регистрового стека остается без изменений. RSE.BspLoadиRSE.Loadregостаются без изменений.

  • Никаких других указаний, не дается программному обеспечению.

Поскольку размер текущего окна устанавливается в ноль, то содержимое некоторых (а возможно и всех) стековых регистров может быть перезаписано последующими активными RSEоперациями, либо последующими инструкциями выделения нового стекового окна и дальнейшего планирования стековых регистров. Поэтому, последовательности явного управления регистровым стеком, которые управляютPFS, используют инструкциюcoverили инструкциюloadrsдолжны избегать этой ситуации, путем выполнения одной или двух следующих кодовых последовательностей, перед инструкциейbr.ret:

  • Использовать инструкцию flushrsперед инструкциейbr.ret. Это сохранит все грязные регистры в памяти и установитRSE.ndirtyв ноль, тем самым мы обходим условие.

  • Использовать инструкцию loadrsсо значениемAR[RSC].loadrsв следующем диапазоне:

AR[RSC].loadrs <= 8 * (ndirty_max + ((62 – AR[BSP]{8:3} + ndirty_max) / 63)) ,

где ndirty_max = (RSE.N_STACKED_PHYS – (AR[PFS].sof – AR[PFS].sol))

Это корректирует размер грязного раздела так, чтобы избежать условия. Инструкция loadrsсRSC.loadrs=0, работает на всех моделях процессоров, не зависимо от количества реализованных физических стековых регистров. Обратите внимание, чтоloadrsможет привести к потере регистров в грязном разделе.

6.6. Прерывания rse

Хотя RSEработает асинхронно по отношению к работе процессора, но прерывания, связанные сRSE, вызываются синхронно с потоком инструкций. ЭтиRSEпрерывания являются прямым следствием инструкций, связанных со стеком регистров, таких как:alloc, br.ret, rfi, flushrs, loadrs, а такжеmovв/из BSP, BSPSTORE, RSC, PFS, IFS или RNAT. Сливания и заливания регистров, выполняемые механизмомRSEв фоновом режиме (активныеRSEзагрузки и сохранения), не вызывают прерываний. Если операция сливания или заливания регистра, вызывающая ошибку или ловушку, требуется программе для продвижения вперед (принудительнаяRSEзагрузка или сохранение), тоRSEвызовет прерывание.

Принудительные RSEсохранения происходят только в контексте инструкцийalloc иflushrs. Любые ошибки, вызванные этими инструкциями, возникают на запущенной инструкции. Ошибки, вызванные принудительнымиRSEзагрузками из-за инструкцииloadrs, возникают на запущенной инструкции. ПринудительныеRSEзагрузки, которые привели к ошибке в процессе восстановления окна инструкциямиbr.ret и rfi, возбуждают ошибку на целевой инструкции, при этом устанавливается битISR.ir(неполное регистровое окно). Если принудительнаяRSEзагрузка вызвала ошибку, то значениеAR[BSPSTORE] указывает на место во вспомогательной памяти выше ошибочного адреса сообщенного вCR[IFA]. Это позволяет обработчикам, обслуживающим ошибкиRSEзагрузки, использовать подпрограмму переключения вспомогательной памяти описанную в разделе 6.11.1 «Переключение из прерванного контекста».

Инструкции br.ret и rfiустанавливаютRSEбит разрешения загрузки текущего окна (RSE.CFLE–CurrentFrameLoadEnable) в 1, если окно регистрового стека было возвращено в файл регистрового стека, не полностью. Это позволяетRSEвосстановить регистры для текущего окна целевой инструкции. Если битRSE.CFLEустановлен, то выполнение инструкции останавливается до тех пор, покаRSEполностью не восстановит текущее окно или не произойдет прерывания. Это единственный момент, когдаRSEзапускает какой-то обмен памяти для текущего окна. Возникновение прерывания очищаетRSE.CFLE, который позволяет обработчику прерывания в неполном окне (например, обработать ошибку, вызванную принудительнойRSEзагрузкой). БитRSE.CFLEотносится к внутреннему состояниюRSEи не является архитектурно видимым.

Табл. 6.6 обобщает прерывания, вызванные RSE.

Табл. 6.6. Обобщение RSEпрерываний

Инстру­кция

Прерывание

Описание

alloc

Нелегальная операция

Плохое непосредственное значение alloc

alloc

Зарезервированный регистр/поле

Инструкция alloc, которая пыталась заменить размер ротируемого региона, когда одно или более значенийRRBвCFM, не равны нулю.

alloc, flushrs, loadrs

Нереализованный адрес данных

AR[BSPSTORE] содержит нереализов.адрес

Вложенные данные TLB

Альтернативные данные TLB

Данные VHPT

Данные TLB

Не представленная страница данных

Употребление страницы NaTданных

AR[BSPSTORE] на страницуNaTValданных

Промах ключа данных

Разрешение ключа данных

Права доступа к данным

Бит грязных данных

Бит доступа к данным

Отладка данных

br.call, brl.call

Нет прерываний, связанных с RSE

br.ret

Нет ошибок, связанных с RSEзагрузками

Ошибки, связанные с RSEзагрузками, возникают на целевой инструкции

rfi

Нет прерываний, связанных с RSE

Ошибки, связанные с RSEзагрузками, возникают на целевой инструкции

Адресат br.ret или rfi

IRНереализованный адрес данных

Принудительная RSEзагрузка нацелена на нереализованный адрес

IRВложенные данныеTLB

br.ret приPSR.ic=0 илиrfi,выполняемое, когдаIPSR.ic=0

IRАльтернативные данныеTLB

IRДанныеVHPT

IRДанныеTLB

IRОтсутствующая страница данных

IRУпотребление стр-цыNaTданных

RSE.BspLoadуказывает наNaTPage

IRПромах ключа данных

IRРазрешение ключа данных

IRПрава доступа к данным

IRБит грязных данных

IRБит доступа к данным

IRОтладка данных