Реализация аппаратной поддержки структурного программирования. Окна Питерсона.


Обычно стек реализован путем взаимодействия процессора и основной памяти, то есть процессор в процессе выполнения команды вызова и возврата из процедуры обращается к основной памяти для записи или считывания сохраняемых или восстанавливаемых адресов. Но для RISC процессора это не подходит, потому что в этом случае увеличивается нагрузка на системный интерфейс.

Для повышения эффективности вызова и возврата из подпрограмм используется стек, который реализуется внутри процессора, ограниченного объема. В RISC – архитектурах используются регистровые окна Питерсона, когда регистровый файл разбивается на банки. В каждом банке содержится полный комплект регистров, каждая процедура имеет свой собственный банк.

Регистровые окна имеют кольцевую структуру и перекрываются.

Окна Питерсона

Рис. 2.16. Окна Питерсона

Аппаратная реализация кольцевой памяти

Рис. 2.17. Аппаратная реализация кольцевой памяти

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

Таким образом, обеспечивается связь подпрограмм с различной глубиной вложенности. То есть, если у нас есть K комплектов регистров, то процессор может реализовать вызов подпрограмм с глубиной вложенности не более чем K.

Возможна такая ситуация, когда происходит переполнение регистрового файла при глубине вложенности процедур ? K. Если не предпринять никаких мер, то регистры в одной из вызываемых процедур могут быть запорчены. Счетчик глубины вложенности СТ фиксирует ситуацию, когда остался один свободный банк в регистровом файле и выдает сигнал Р в управляющий блок. По этому сигналу запускается процедура с фиксированным жестким адресом, который имеет доступ к регистрам произвольного банка и выполняет сохранение этих регистров во внешней памяти. Таким образом обеспечивается глубина вложенности процедур более K.

Если регистровый файл исчерпан и произошел возврат из очередной процедуры, счетчик глубины вложенности выдает сигнал G, сигнализирующий об этом, по которому управляющий блок выполняет процедуру восстановления ранее сохраненного содержимого регистрового файла.

Это решение эффективно, т.к. колебания глубины вложенности процедур за достаточно длительный интервал времени Dt не превосходит объема регистрового файла K.

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

Т.к. необходимо где-то хранить адрес возврата из процедуры, определяющий точку, куда необходимо передать управление по команде return, используется специальный регистр, например R0, доступный командам процессора. При вызове туда записывается адрес процедуры, после вызова – адрес возврата из процедуры.

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

Аппаратная реализация кольцевой памяти с плавающей границей регистрового файла

Рис. 2.18. Аппаратная реализация кольцевой памяти с плавающей границей регистрового файла

Загрузка...