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

6.3. Разделы стека регистров

Файл физических регистров процессора обеспечивает, по крайней мере, 96 стековых регистров. Фактическое число стековых регистров (RSE.N_STACKED_PHYS) зависит от реализации и должно быть кратно 16. Рис. 6.3 иллюстрирует циклический характер файла физических регистров и показывает соответствие регистров и вспомогательной памяти. Рис. 6.3 показывает также четыре раздела файла стековых регистров:

Чистый (clean) раздел (светло-серый оттенок): регистры, которые содержат значения из окон родительской процедуры. Регистры в этом разделе были успешно слиты во вспомогательную память с помощью RSE, и их содержимое не было изменено, с того момента, как они были записаны во вспомогательную память.

Грязный (dirty) раздел (просто серый оттенок): регистры, которые содержат значения из окон родительской процедуры. Регистры в этом разделе еще не были слиты во вспомогательную память с помощью RSE. Количество регистров, содержащихся в грязном разделе (расстояние между RSE.StoreReg и RSE.BOF) упоминается как RSE.ndirty.

Текущее (current) окно (темный оттенок): стековые регистры, выделенные для вычислений. Позиция текущего окна в файле физических стековых регистров определяется регистром нижнего края окна (RSE.BOF). Количество регистров в текущем окне определяется размером поля окна (CFM.sof) в маркере текущего окна.

Недействительный (invalid) раздел (диагональные полоски): регистры вне текущего окна, которые не содержат значений из окон родительских процедур. Они доступны для немедленного выделения в текущее окно, либо для операций RSE загрузки.

invalid

Physical Stacked Registers

RSE.LoadReg

RSE.StoreReg

RSE.BOF

C FM. sof

clean

d irty

C urrent

RSE load

RSE store

return, rfi

call, cover

return, rfi, alloc

H igher Addresses

RSE. BspLoad

AR[BSPSTORE]

AR[BSP]

Backing Store

Рис. 6.3. Четыре раздела стека регистров.

Границы между четырьмя разделами стека регистров определяются маркером текущего окна (CFM) и тремя номерами физических регистров: StoreReg, Loadreg и BOF. Как описано в табл. 6.1, каждый из этих номеров физических регистров имеет соответствующий 64-битный указатель вспомогательной памяти. (Например, AR[BSP] всегда содержит адрес, где будет запомнен GR[32] текущего окна).

Рис. 6.3 показывает также, влияние различных инструкций на границы разделов. Загрузки RSE используют недействительные регистры. Активные RSE загрузки и сохранения расширяют чистый раздел. Инструкции br.call, brl.call или cover, могут увеличить указатель нижнего края окна (RSE.BOF), который перемещает регистры из текущего окна в грязный раздел. Инструкция alloc, может сжать или расширить текущее окно путем обновления CFM.sof. Инструкции br.ret и rfi могут сжать или расширить текущее окно путем обновления и указателя нижнего края окна (RSE.BOF), и CFM.sof.