WikiSort.ru - Не сортированное

ПОИСК ПО САЙТУ | о проекте
Регистровый файл с четырьмя регистровыми окнами

Реги́стровое окно́ — один из методов организации работы с регистрами процессора, применяемый для снижения накладных расходов на работу со стеком при вызовах подпрограмм.

История

Парадигма регистрового окна была разработана в процессе работы над проектом RISC-микропроцессора в Калифорнийском университете в Беркли в 1980—1984 годах.

Принципы работы

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

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

Пусть регистровый файл состоит из K регистров, расположенных по кругу. Каждой программе доступны лишь L = L1 + L2 + L3 регистров (L < K), составляющих текущее регистровое окно. Окно делится на три части:

  • L1 регистров параметров (для получения параметров от вызвавшей программы)
  • L2 локальных регистров (для хранения промежуточных данных)
  • L3 временных регистров (для передачи параметров в процедуру)

Перед вызовом подпрограммы текущая программа записывает в выходные регистры значения параметров, которые необходимо передать в подпрограмму. При передаче управления подпрограмме регистровое окно сдвигается, и выходные регистры предыдущей активной программы становятся для подпрограммы входными. Перед обратной передачей управления подпрограмма записывает результаты (возвращаемые значения) в свои входные регистры. Вызвавшая её программа после обратного смещения регистрового окна будет иметь к ним доступ.[1][2]

Указатель на начало текущего регистрового окна хранится в специальном регистре CWP (Current Window Pointer — указатель текущего окна) и изменяется аппаратно.[3]

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

В классической модели предполагается, что размер регистрового окна фиксирован. В некоторых реализациях (например, в AMD Am29000) используются регистровые окна переменного размера.

Реализации

Регистровые окна используются в процессорах SPARC, Эльбрус, Intel i960 и AMD Am29000.

Достоинства и недостатки

Главное достоинство регистровых окон — отсутствие работы со стеком при вызове подпрограмм. Кроме того, регистровые окна реализуют защиту памяти: подпрограмма не может изменить значения большинства регистров вызвавшей её программы. Среди минусов этого подхода можно отметить наличие максимальной глубины вложенности подпрограмм, при превышении которой накладные расходы при вызове подпрограмм резко возрастают. Джон Хеннеси, главный разработчик конкурирующей RISC-архитектуры MIPS, считал, что с задачей поиска свободных регистров для передачи параметров подпрограмме лучше справится компилятор. Выполнение этой работы на аппаратном уровне он считал неоправданным.

Примечания

  1. Архитектура процессоров. MIPS, Sparc, ARM и PowerPC - Сергей Озеров, 27.10.2005
  2. Организация регистровой памяти ЦП / страницы Wiki eSyr'а
  3. Е. А. ЕРЕМИН, Стек, часть 2 // Журнал «Информатика» - В мир информатики # 102 (16–31 января), №4/2008 "Окно можно аппаратно переключать на другие регистры с помощью специального регистра CWP (Current Window Pointer — указателя текущего окна)"

Данная страница на сайте WikiSort.ru содержит текст со страницы сайта "Википедия".

Если Вы хотите её отредактировать, то можете сделать это на странице редактирования в Википедии.

Если сделанные Вами правки не будут кем-нибудь удалены, то через несколько дней они появятся на сайте WikiSort.ru .




Текст в блоке "Читать" взят с сайта "Википедия" и доступен по лицензии Creative Commons Attribution-ShareAlike; в отдельных случаях могут действовать дополнительные условия.

Другой контент может иметь иную лицензию. Перед использованием материалов сайта WikiSort.ru внимательно изучите правила лицензирования конкретных элементов наполнения сайта.

2019-2024
WikiSort.ru - проект по пересортировке и дополнению контента Википедии