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

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, используемый переходом возврата».