Операционные системы/Организация регистровой памяти ЦП
Материал из eSyr's wiki.
Nexor (Обсуждение | вклад)
(Новая: Рассмотрим модельную архитектуру, поддерживающую аппарат ''виртуальных регистров''. == Регистры == Бол...)
К следующему изменению →
Версия 20:19, 22 января 2010
Рассмотрим модельную архитектуру, поддерживающую аппарат виртуальных регистров.
Регистры
Большинство процессоров использует регистры – небольшие участки "быстрой" памяти, расположенные в процессоре. Регистры делятся на специальные и общего назначения. Регистры общего назначения могут использоваться программой непосредственно (например, для хранения значений переменных).
Регистры удобны для хранения временных переменных программы. Однако, при вызове функций возникает проблема: у функции есть свои собственные переменные, их тоже надо хранить в регистрах, а их мало. Решение: увеличить число регистров. Но возникает еще одна проблема: как назначить, какие функции какие регистры должны использовать? Одно из ее решений – использование регистровых окон.
Регистровые окна
Пусть имеется K физических регистров. В каждый момент времени программа "видит" не все K регистров сразу, а L виртуальных регистров, L<K. При этом, каждому виртуальному регистру соответствует физический регистр. Множество физических регистров, которое в данный момент соответствует набору виртуальных регистров, называется регистровым окном. Это соответствие можно программно менять (не произвольно, а некоторым специальным образом), т.е. регистровое окно можно "сдвигать". Виртуальные регистры (и, следовательно, физические регистры, находящиеся в данный момент в регистровом окне) разбиты на три категории:
- регистры для входных параметров (пусть их L1)
- регистры для локальных переменных (пусть их L2)
- регистры для выходных параметров (пусть их L3).
Регистров для входных параметров столько же, сколько и для выходных параметров (L1=L3). Имеются два специальных регистра: CWP – current window pointer (указатель на текущее окно) и SWP – saved window pointer (указатель на сохраненное окно). Здесь имеется ввиду не указатель в обычном смысле (на ячейку памяти), а некоторое значение, означающее положение регистрового окна среди физических регистров.
Пусть физические регистры образуют массив, элементы которого – структуры, состоящие из регистров для входных параметров и регистров для локальных переменных, а в окне сначала идут регистры для входных параметров, затем регистры для локальных переменных и потом регистры для выходных параметров. Таким образом, окно целиком содержит один элемент массива и часть (регистры для выходных параметров) следующего (если окно на последнем элементе, то регистрами для выходных параметров будут регистры для входных параметров первого элемента). Тогда "указателем на окно" может быть, например, индекс в этом массиве, соответствующий тому элементу, с которого "начинается" окно. Мы, естественно, считаем, что K делится на L1+L2. Пусть K/(L1+L2)=N, т.е. в массиве физических регистров может храниться N окон.
В CWP хранится указатель на текущее окно. В SWP хранится указатель на первое из используемых программой окон, которое еще не откачано в ОП (подробнее см. ниже).
- При вызове функции параметры записываются в регистры для выходных параметров. Затем CWP сдвикается циклически на 1 вперед, проверяется, совпадает ли он с SWP. Если да, то происходит прерывание, окно, на которое указывает SWP, откачивается в ОП и SWP также сдвикается циклически на 1 вперед. Текущим окном становится то, на которое указывает CWP, при этом получается, что входные параметры записаны
- При выходе из функции CWP сдвикается циклически на 1 назад, проверяется, равен ли ((CWP+1)mod N) SWP. Если да, то происходит прерывание, окно, на которое указывает SWP, восстанавливается из ОП и SWP также сдвикается циклически на 1 назад.
Пример (N=2):
Физические регистры имеют как бы кольцевую структуру:
Микропроцессоры SPARK используют такую архитектуру.
См. также Register windowангл
Процессоры Intel Itanium
Модель регистровых окон, используемая в Intel Itanium, более совершенная. Регистры, доступные для программы, представляют собой множество из 128 регистров. Первые 32 из них – статические регистры (общие для всех случаев, они никак не меняются). После статических регистров располагаются динамические регистры, которые располагаются с 32 регистра до 127 (всего 96 регистров). Есть возможность при обращении к подпрограммам изменять регистровые окна.
Отличие от предыдущей модели: размер окна при переключении окон может варьироваться от 96 до 1 регистра.