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

6.4. Работа rse

Вспомогательная память стека регистров организована как стек памяти, который расширяется от младших адресов к старшим адресам. Верхушка стека вспомогательной памяти задается прикладным регистром указателя вспомогательной памяти (BSP), который указывает на первое место памяти, зарезервированное для текущего окна. Загрузки и сохраненияRSE, проявляя активность в адресах ниже указателяBSP, меняют размеры чистого и грязного разделов. Хотя стек концептуально бесконечен в обоих направлениях, но ожидается, что эффективная база стека, будет первой областью памяти первой страницы, распределенной для вспомогательной памяти.

Для обеспечения наиболее полного параллельного выполнения, процессор и RSEработают не зависимо друг от друга в течение нормального выполнения программы. Механизм различаетпринудительные(mandatory) иактивные(eager) операции загрузки/сохранения. Принудительные операции загрузки/сохранения происходят в результате инструкцийalloc, flushrs, loadrs, br.ret илиrfi. Активные операции происходят, когда механизмRSEработает спекулятивно, опережая выполнение программы, и не известно, потребуется ли программе фактически сливание/заливание этого регистра.

Когда RSEработает в фоновом режиме, он запускает активныеRSEоперации сливания/заливания для расширения размера чистого раздела в обоих направлениях – путем уменьшения указателя загрузкиRSE, загружая значения из вспомогательной памяти в недействительные регистры (активнаяRSEзагрузка), а также путем сохранения грязных регистров во вспомогательной памяти и увеличения указателя сохраненияRSE(активноеRSEсохранение). Выделение достаточно большого окна (используяalloc) или выполнение инструкцииflushrs, может заставитьRSEприостановить выполнение программы, и запускать принудительныеRSEсохранения до тех пор, пока требуемое количество регистров не будет слито во вспомогательную память. Аналогично, инструкцииbr.retилиrfi, возвращающие к достаточно большому окну или выполнение инструкцииloadrs, может заставитьRSEприостановить выполнение программы, и запускать принудительныеRSEзагрузки до тех пор, пока требуемое количество регистров не будет восстановлено из вспомогательной памяти. МеханизмRSEработает в активном режиме и приостанавливает выполнение программы всякий раз, когда продвижение программы фактически требует, чтобы регистры были слиты или залиты.

Табл. 6.2 описывает инструкции RSEопераций и модификации состоянийRSE.

Табл. 6.2. Инструкции RSEопераций и модификация состояния

Инструкция

Воздействует

на состояние

alloc r1=ar.psf, i,l,o,rA

br.callA, brl.callA

br.retA

rfi,

при CR[IFS].v=1

AR[BSP]{63:3}

Не меняется

AR[BSP]{63:3} + CFM.sol + (AR[BSP]{8:3} + CFM.sol)/63

AR[BSP]{63:3}- AR[PFS].pfm.sol- (62- AR[BSP]{8:3}+ AR[PFS].pfm.sol)/63

AR[BSP]{63:3}- CR[IFS].ifm.sof- (62-AR[BSP]{8:3}+ CR[IFS].ifm.sof)/63

AR[PFS]

Не меняется

AR[PFS].pfm=CFM

AR[PFS].pec=AR[EC]

AR[PFS].ppl=PSR.cpl

Не меняется

Не меняется

GR[r1]

AR[PFS]

Нет

Нет

Нет

CFM

CFM.sof=i+l+o

CFM.sol=i+l

CFM.sor=r>>3

CFM.sof – = CFM.sol

CFM.sol = 0

CFM.sor = 0

CFM.rrb.gr = 0

CFM.rrb.fr = 0

CFM.rrb.pr = 0

AR[PFS].pfm

либоB

CFM.sof = 0

CFM.sol = 0

CFM.sor = 0

CFM.rrb.gr = 0

CFM.rrb.fr = 0

CFM.rrb.pr = 0

CR[IFS].ifm

  1. Эти инструкции имеют неопределенное поведение в неполном окне. См. раздел 6.8 «Поведение RSEв неполном регистровом окне».

  2. Обычные инструкции br.retвосстанавливаютCFMизAR[PFS].pfm. Однако, если инструкциейbr.retчитается плохое значениеPFS, то все поляCFMустанавливаются в ноль. См. раздел 6.5.5 «ПлохойPFS, используемый переходом возврата».