Окно регистрации
![]() | В этой статье есть несколько проблем. Пожалуйста, помогите улучшить его или обсудите эти проблемы на странице обсуждения . ( Узнайте, как и когда удалять эти шаблонные сообщения )
|

В компьютерной технике окна регистров — это функция, которая выделяет регистры подпрограмме путем динамического присвоения подмножества внутренних регистров фиксированных, видимых программисту регистров. Окна регистров реализованы для повышения производительности процессора за счет уменьшения количества операций стека , необходимых для вызовов функций и возвратов. Это одна из наиболее влиятельных особенностей конструкции RISC Беркли , которая позже была реализована в таких архитектурах набора команд , как AMD Am29000 , Intel i960 , Sun Microsystems SPARC и Intel Itanium .
Общая операция
[ редактировать ]Для разных частей программы предусмотрено несколько наборов регистров. Регистры намеренно скрыты от программиста, чтобы заставить несколько подпрограмм совместно использовать ресурсы процессора.
Сделать регистры невидимыми можно эффективно; ЦП распознает переход от одной части программы к другой во время вызова процедуры. Это выполняется одной из небольшого количества инструкций ( пролог ) и заканчивается одной из такого же небольшого набора ( эпилог ) . В конструкции Беркли эти вызовы приведут к «замене» нового набора регистров в этот момент или пометке как «мертвые» (или «многоразовые») по завершении вызова.
Применение в процессорах
[ редактировать ]В конструкции RISC Беркли программам видны только восемь регистров из 64. Полный набор регистров называется файлом регистров , а любой конкретный набор из восьми регистров называется окном . Файл позволяет до восьми вызовов процедур иметь свои собственные наборы регистров. Пока программа не вызывает цепочки длиной более восьми вызовов, регистры никогда не придется очищать , то есть сохранять в основную память или кеш, что является медленным процессом по сравнению с доступом к регистрам.
Для сравнения, компании Sun Microsystems архитектура SPARC обеспечивает одновременный просмотр четырех наборов по восемь регистров в каждом. Три набора по восемь регистров в каждом являются «оконными». Восемь регистров (от i0 до i7) формируют входные регистры текущего уровня процедуры. Восемь регистров (от L0 до L7) являются локальными для текущего уровня процедуры, а восемь регистров (от o0 до o7) являются выходными данными с текущего уровня процедуры на следующий вызываемый уровень. При вызове процедуры окно регистров смещается на шестнадцать регистров, скрывая старые входные регистры и старые локальные регистры и превращая старые выходные регистры в новые входные регистры.Общие регистры (старые выходные регистры и новые входные регистры) используются для передачи параметров. Наконец, восемь регистров (от g0 до g7) глобально видны всем уровням процедур.
AMD 29000 улучшил конструкцию, позволив окнам иметь переменный размер, что помогает использовать его в обычном случае, когда для вызова требуется менее восьми регистров. Он также разделил регистры на глобальный набор из 64 и еще 128 для окон. Аналогично, в архитектуре IA-64 (Itanium) использовались окна переменного размера: 32 глобальных регистра и 96 окон.
В архитектуре Infineon C166 большинство регистров представляют собой просто области во внутренней оперативной памяти, которые обладают дополнительным свойством доступа как регистры. Из них адреса 16 регистров общего назначения (R0-R15) не фиксированы. Вместо этого регистр R0 расположен по адресу, указанному в регистре «Указатель контекста» (CP), а остальные 15 регистров следуют последовательно за ним. [1]
Окна регистрации также обеспечивают простой путь обновления. Поскольку дополнительные регистры невидимы для программ, дополнительные окна можно добавить в любой момент. Например, использование объектно-ориентированного программирования часто приводит к увеличению количества «меньших» вызовов, которые можно удовлетворить, например, увеличив количество окон с восьми до шестнадцати. Именно такой подход использовался в SPARC, который включил больше окон регистров в новые поколения архитектуры. Конечным результатом является меньшее количество медленных операций заполнения и заполнения окон регистров , поскольку окна регистров переполняются реже.
Критика
[ редактировать ]Окна регистрации – не единственный способ улучшить производительность реестра. Группа Стэнфордского университета, разрабатывавшая MIPS, ознакомилась с работой Беркли и решила, что проблема не в нехватке регистров, а в плохом использовании существующих. Вместо этого они потратили больше времени на компилятора своего распределение регистров , убедившись, что он разумно использует больший набор, доступный в MIPS. Это привело к снижению сложности чипа: общее количество регистров сократилось вдвое, но при этом обеспечило потенциально более высокую производительность в тех случаях, когда одна процедура могла использовать большее видимое пространство регистров. В конце концов, современные компиляторы MIPS позволяют лучше использовать пространство регистров даже во время вызовов процедур. [ нужна ссылка ]
Ссылки
[ редактировать ]- ^ «Руководство по набору инструкций для семейства Infineon C166» (PDF) . Кейл . Проверено 12 марта 2020 г.
- Францен, Майк; Шуи, Майк (2001). «StackGhost: аппаратная защита стека» . Материалы 10-го симпозиума по безопасности Usenix . УСЕНИКС . стр. 55–66 . Проверено 27 августа 2010 г.
- Магнуссон, Питер (апрель 1997 г.). «Понимание стеков и регистров в архитектуре Sparc» . Архивировано из оригинала 24 декабря 2012 года . Проверено 27 августа 2010 г.
- Мюллер, Франк. «setjmp/longjmp» . Обсуждение сложной реализации Sparc из-за оконного режима.