Большой набор регистров в составе процессора, организованный по схеме регистровых окон, фактически функционирует как сверхбыстродействующий буфер для хранения подмножества переменных, к которым чаще всего приходится обращаться в процессе выполнения текущего фрагмента программы. С этой точки зрения функции набора регистров во многом схожи с функциями кэш-памяти. Поэтому возникает естественный вопрос, а не проще ли будет использовать традиционную схему с кэш-памятью и небольшим набором регистров?
В табл.13.1 приведены сравнительные характеристики этих двух подходов.
Таблица 13.1.
Набор регистровых окон | Кэш-память |
Все локальные скалярные переменные текущих процедур | Последние по времени обращения скалярные переменные |
Отдельные переменные | Блоки оперативной памяти |
Глобальные переменные, определенные компилятором | Последние по времени обращения глобальные переменные |
Сохранение данных в памяти и их восстановление основано на глубине вложенности процедур | Сохранение данных в памяти и их восстановление основано на алгоритме обновления кэш-памяти |
Регистровая адресация | Адресация ячеек памяти |
Набор регистровых окон позволяет хранить все локальные скалярные переменные (N-1) текущих процедур (или, по крайней мере, подавляющее большинство таких переменных) в регистрах процессора. В кэш-памяти хранятся последние по времени обращения скалярные переменные. Поэтому регистровые окна обеспечивают более быстрый доступ к переменным — все необходимые переменные постоянно находятся "под рукой". Тем не менее, кэш-память обеспечивает более эффективное использование пространства памяти, поскольку при его заполнении учитывается динамически изменяющаяся ситуация.
|
|
При работе с набором регистровых окон вполне вероятно, что не все регистры окна будут использованы, поскольку отдельным процедурам не нужно столько локальных переменных. Но информация, хранящаяся к кэш-памяти, также обладает определенной избыточностью, поскольку считывание данных в кэш из оперативной памяти производится блоками, и отнюдь не все ячейки в составе блока могут понадобиться при выполнении текущего фрагмента программы.
Глобальные переменные хранятся в кэш-памяти точно так же, как и локальные. Обычно в программах имеется довольно много глобальных переменных, но далеко не ко всем из них программа обращается очень часто. Механизм работы с кэш-памятью отслеживает динамическую ситуацию, и в результате в кэш-памяти оказываются именно те глобальные переменные, к которым чаще всего производится обращение. При использовании регистров для хранения глобальных переменных вся ответственность за отбор именно тех из них, к которым программа будет чаще всего обращаться, возлагается на компилятор.
|
|
Механизм сохранения/восстановления данных в регистровых окнах работает на основе текущей глубины вложенности процедур. Поскольку глубина вложенности, как правило, изменяется в весьма узком диапазоне, к оперативной памяти этот механизм обращается довольно редко. В большинстве схем организации кэш-памяти используется секционированный ассоциативный метод отображения с малым размером секции. Поэтому существует опасность, что другие данные или машинные команды вытеснят из кэш-памяти нужные переменные.
Из всего сказанного следует, что ни одному из обсуждаемых принципов организации процессора нельзя безоговорочно отдать предпочтение. Но существует одна характеристика, по которой схема с регистровыми окнами имеет неоспоримое преимущество в быстродействии перед схемой с кэш-памятью. Речь идет о накладных расходах, связанных с определением адресов операндов.
Для обращения к локальной скалярной переменной в наборе регистров, организованном в виде множества регистровых окон, достаточно передать "виртуальный" номер соответствующего регистра и номер используемого окна. Эти данные поступают на довольно простой дешифратор, который выбирает нужный регистр в наборе.
Для того чтобы обратиться к переменной в кэш-памяти, нужно сформировать полноразмерный виртуальный адрес оперативной памяти, который необходимо затем преобразовать в физический адрес оперативной памяти. Сложность этой операции зависит от способа адресации, структуры модуля преобразования виртуальных адресов в физические адреса, его объема. В кэш-памяти с секционированным ассоциативным методом отображения часть кода адреса используется для считывания количества слов и тэгов, соответствующего размеру секции. Другая часть адреса сравнивается с тэгами, и выбирается одно из прочитанных слов. Совершенно очевидно, что каким бы быстродействующим не был блок кэш-памяти, время доступа к данным при таком способе поиска значительно больше, чем при работе с регистровыми окнами. Следовательно, с точки зрения производительности обработки локальных скалярных переменных схема с регистровыми окнами имеет несомненное преимущество. Но регистровые окна желательно сочетать с использованием кэш-памяти для хранения команд.
Контрольные вопросы
1. Назовите основные подсистемы процессора
2. Какие регистры относят к программно доступным?
3. Какие функции выполняют регистры общего назначения?
4. Какая разрядность регистров общего назначения?
5. Сколько регистров общего назначения?
6. Какие функции выполняют регистры управления и состояния?
7. Какие методы используются для повышения эффективности использования регистров?
8. Что такое регистровые окна?