В связи с тем что аппаратная реализация стека которая делается в тех процессорах, что мы изучали путем взаимодействи процессора и основной памяти, то есть процессор в процессе выполнения команды вызова и возврата из процедуры обращается к основной памяти для записи или считывания сохраняемых или восстанавливаемых адресов, то для RISC процессора такое не годится, потому что в этом случае еще раз увеличивается нагрузка на системный интерфейс, когда он еще должен дополнительные данные через системный интерфейс передавать. Для повышения эффективности вызова и возврата из подпрограмм используется стек, который реализуется внутри процессора, ограниченного объема. В известных системах программирования через стек также передаются подпрограммам параметры, возвращается результат. В RISC архитектурах используют кольцевую память, разбитую на сегменты, называемые окна Питерсона, которые перекрываются.
Каждое регстровое окно содержит комплект регистров общего назначения доступных подпрограмме. В области перекрытия размещаются регистры, которые служат для передачи параметров между подпрограммами и возврата результатов из подпрограмм. Таким образом обеспечивается связь подпрограмм с различной глубиной вложенности. То есть оказывается, если у нас есть m комплектов регистров, то значит наш процессор может реализовать вызов подпрограмм с глубиной вложенности не более чем m. Когда происходит переполнение кольцевой памяти, возникает ситуация, называемая переполнение, освобождаются один или несколько банков в основную память и процесс вычисления продолжается, но тестирование различных кодов написанных для различных задач привели к установлению интересной закономерности: если мы возьмем некий конкретный уровень заполнения этой кольцевой памяти, то окажется что внешний вид объема памяти который необходим для хранения адресов возврата параметров, которые передаются в функции и возвращаемого, результата за произвольно взятый какой-то длительный интервал времени умещается в кольцевой памяти и только редко происходит переполнение этой памяти. То есть оказывается полная глубина вложенности испльзуется редко, а в основном глубина вложенности такая, что выбрав объем кольцевой памяти равным 8 банкам мы обеспечиваем 90% вызовов подпрограмм, то есть 90% вызовов подпрограмм обеспечивается без сохранения части этой кольцевой памяти в основной.
