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

6. Механизм стека регистров (rse)

Механизм стека регистров (RSE – Register stack Engine) перемещает регистры между стеком регистров и вспомогательной памятью, без явного программного вмешательства. Механизм RSE работает параллельно с процессором и может использовать для динамического запуска операций сливания и заливания регистров, недозагрузку пропускной способности памяти. В этом смысле, время ожидания операций сливания/заливания регистров, может перекрываться с полезной работой программы. Основные принципы стека регистров обсуждались в разделе 4.1. В этой главе представлены внутреннее состояние, модель программирования и поведение прерывания механизма стека регистров.

6.1. Обзор rse и вспомогательной памяти

Окна стека регистров отображаются в набор физических регистров, который работает как циклический буфер, содержащий самые последние созданные окна. Механизм RSE сливает и заливает эти физические регистры во вспомогательную память и из нее. Механизм RSE перемещает регистры между стеком физических регистров и вспомогательной памятью, без явного программного вмешательства. Как показано на рис. 6.1, RSE обрабатывает физические стековые регистры, вне текущего активного окна (как определено с помощью CFM). Эти регистры содержат окна родительских процедур текущей процедуры.

Как показано на рис. 6.1, вспомогательная память организована как стек памяти, который растет от более низких к более высоким адресам. Прикладной регистр BSP (Backing Store Pointer – указатель вспомогательной памяти) содержит адрес самого первого (низкого) места памяти, резервированного для текущего окна (т.е. места, в которое будет слит GR32 текущего окна). Действие RSE сливания/заливания, происходит от адреса содержащегося в BSP, т.к. RSE сливает/заливает окна родителей текущей процедуры. Прикладной регистр BSPSTORE содержит адрес, с которого произойдет следующее RSE сливание. Регистр адреса, который соответствует следующей операции RSE заливания, указатель загрузки BSP, не является архитектурно видимым. Адреса, содержащиеся в BSP и BSPSTORE, всегда выровнены на 8-байтовую границу. Вспомогательная память содержит локальную область каждого окна. Выходная область не сливается во вспомогательную память (если только позже она не становится частью локальной области вызванной процедуры). В каждом окне стека, регистры с меньшими адресами сохраняются в меньших адресах памяти. Сливания типа RSE, стековых регистров со значениями NaT, подчиняются тем же самым ограничениям модификации памяти, что и программные сливания (st8.still) статических регистров со значениями NaT (см. раздел 4.4.4.6 первого тома «Сливания и заливания регистров»).

Механизм RSE, также сливает/заливает NaT биты соответствующие стековым регистрам. Биты NaT, соответствующие статическому подмножеству, при необходимости, должны сливаться/заливаться программным обеспечением. Биты NaT являются 65-ми битами каждого основного регистра. Биты NaT для стекового подмножества, сливаются/заливаются группами по 63 бита, соответствующими 63-ём последовательным физическим стековым регистрам. Когда RSE сливает регистр во вспомогательную память, соответствующий NaT бит копируется в прикладной регистр RNAT (RSE NaT collection Application Register – прикладной регистр совокупности RSE NaT). Каждый раз, когда биты 8:3 регистра BSPSTORE устанавливаются все в 1, механизм RSE сохраняет регистр RNAT во вспомогательной памяти. Как показано на рис. 6.2, в результате, во внешней памяти отображаются значения 63-х регистров, а следом за ними совокупность NaT битов. Бит 0 совокупности NaT битов, соответствует первому (с наименьшим адресом) из 63-х значений регистров, а бит 62 соответствует 63-му значению регистра. В 63-ем бите совокупности NaT битов всегда записан ноль. Когда механизм RSE заливает стековые регистры из вспомогательной памяти, он также заливает и NaT биты регистров. Каждый раз, когда биты 8:3 указателя загрузки вспомогательной памяти RSE устанавливаются все в 1, механизм RSE перезагружает совокупность NaT битов из вспомогательной памяти. 63-ий бит совокупности NaT битов игнорируется при чтении из вспомогательной памяти.

Физические стековые регистры

Вспомогательная память

p rocA calls procB calls procC

c all

unallocated

т екущее активное окно

sofc

procC

A R[BSP]

solb

p rocB

RSE loads/stores

p rocB

AR[BSPSTOR]

sola

procA

procA

unallocated

Предшествен­ники procA

return

Б олее старшие адреса регистров

Более старшие адреса памяти

Рис. 6.1. Взаимоотношения между физическими регистрами и вспомогательной памятью

8 байтов

B SPSTORE{10:3}

11 000000

10 111111

NaT collection

10 111110

63 стековых

основных регистров

10 000000

01 111111

NaT collection

01 111110

63 стековых

основных регистров

01 000000

00 111111

NaT collection

Рис. 6.2. Формат вспомогательной памяти.

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

Работа RSE механизма, управляется прикладным регистром RSC (Register Stack Configuration – конфигурации стека регистров). Действия между процессором и механизмом RSE синхронизируются только тогда, когда инструкции flushrs, loadrs, br.ret или rfi реально требуют, чтобы регистры были слиты или залиты, либо когда программное обеспечение явно запрашивает синхронизацию RSE, путем выполнения инструкции mov в/из прикладных регистров RSC, BSPSTORE и RNAT.