Глобальные переменные

 

Описанная выше схема регистровых окон обеспечивает эффективную работу с локальными скалярными переменными процедур. Однако она никак не учиты­вает необходимость обработки глобальных переменных, к которым обращаются не­сколько процедур.

Существует два подхода к обработке глобальных переменных. Первый подход, который совершенно очевиден, состоит в том, что для переменных, объявленных в исходном тексте программы на языке высокого уровня как глобаль­ные, компилятор резервирует определенные ячейки в оперативной памяти, и все команды обра­щения к глобальным переменным используют режимы адресации, работающие с оперативной па­мятью, а не с регистрами. Однако для обработки часто используемых в программе глобальных переменных такой подход не эффективен.

Альтернативный подход состоит в том, чтобы включить в состав процес­сора специальную группу регистров для размещения таких часто используе­мых глобальных переменных. Эти регистры должны иметь фиксированные номера, и доступ к ним должен быть открыт из любой процедуры. Для упрощения формата машинных команд при этом можно использовать унифицированную схему нумерации регистров. Например, номера от 0 до 7 при­сваиваются регистрам глобальных переменных, а номера от 8 до 31 — реги­страм в составе регистровых окон, т.е. фактически эти номера представляют собой смещение относительно значения указателя текущего окна. Конечно, использование регистров для хранения глобальных переменных несколько усложняет схему адресации регистров в процессоре, и, к тому же, компиля­тор должен решать, какие именно глобальные переменные имеет смысл раз­мещать в этих регистрах, а какие хранить в ячейках памяти.

 

Большой набор регистров или кэш-память?

Большой набор регистров в составе процессора, организованный по схе­ме регистровых окон, фактически функционирует как сверхбыстродейст­вующий буфер для хранения подмножества переменных, к которым чаще всего приходится обращаться в процессе выполнения текущего фрагмента программы. С этой точки зрения функции набора регистров во многом схожи с функциями кэш-памяти. Поэтому возникает естественный вопрос, а не проще ли будет использовать традиционную схему с кэш-памятью и небольшим на­бором регистров?

В табл.13.1 приведены сравнительные характеристики этих двух подходов.

Таблица 13.1.

Набор регистровых окон Кэш-память
Все локальные скалярные переменные текущих процедур Последние по времени обращения скалярные переменные
Отдельные переменные Блоки оперативной памяти
Глобальные переменные, определенные компилятором Последние по времени обращения глобальные переменные
Сохранение данных в памяти и их восстановление основано на глубине вложенности процедур Сохранение данных в памяти и их восстановление основано на алгоритме обновления кэш-памяти
Регистровая адресация Адресация ячеек памяти

 

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

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

Глобальные переменные хранятся в кэш-памяти точно так же, как и локальные. Обычно в программах имеется довольно много глобальных переменных, но дале­ко не ко всем из них программа обращается очень часто. Механизм работы с кэш-памятью отслеживает динамическую ситуацию, и в результате в кэш-памяти оказывают­ся именно те глобальные переменные, к которым чаще всего производится об­ращение. При использовании регистров для хранения глобальных перемен­ных вся ответственность за отбор именно тех из них, к которым программа бу­дет чаще всего обращаться, возлагается на компилятор.

Механизм сохранения/восстановления данных в регистровых окнах работа­ет на основе текущей глубины вложенности процедур. Поскольку глубина вложенности, как правило, изменяется в весьма узком диапазоне, к оперативной памяти этот механизм обращается довольно редко. В большинстве схем организации кэш-памяти используется секционированный ассоциативный метод отображения с малым размером секции. Поэтому существует опасность, что другие данные или ма­шинные команды вытеснят из кэш-памяти нужные переменные.

Из всего сказанного следует, что ни одному из обсуждаемых принципов организации процессора нельзя безоговорочно отдать предпочтение. Но существует одна характеристика, по которой схема с регистровыми окнами имеет неоспори­мое преимущество в быстродействии перед схемой с кэш-памятью. Речь идет о накладных расходах, связанных с определением адресов операндов.

Для обращения к локальной скалярной переменной в наборе регистров, организованном в виде множе­ства регистровых окон, достаточно передать "виртуальный" номер соответствующего регистра и номер используемого окна. Эти данные поступают на довольно простой дешифратор, который выбирает нужный регистр в наборе.

Для того чтобы обратить­ся к переменной в кэш-памяти, нужно сформировать полноразмерный виртуальный адрес оперативной памяти, который необходимо затем преобразовать в физический адрес оперативной памяти. Сложность этой операции зависит от способа адресации, структуры модуля преобразования виртуальных адресов в физические адреса, его объема. В кэш-памяти с секциони­рованным ассоциативным методом отображения часть кода адреса используется для считывания количества слов и тэгов, соответствующего размеру секции. Другая часть адреса сравнивается с тэгами, и выбирается одно из прочитанных слов. Совер­шенно очевидно, что каким бы быстродействующим не был блок кэш-памяти, время доступа к данным при таком способе поиска значительно больше, чем при работе с регистровыми окнами. Следовательно, с точки зрения производительности обработки локальных скалярных переменных схема с регистровыми окнами имеет несомненное преимущество. Но регистровые окна желательно сочетать с использованием кэш­-памяти для хранения команд.

 

 

Контрольные вопросы

1. Назовите основные подсистемы процессора

2. Какие регистры относят к программно доступным?

3. Какие функции выполняют регистры общего назначения?

4. Какая разрядность регистров общего назначения?

5. Сколько регистров общего назначения?

6. Какие функции выполняют регистры управления и состояния?

7. Какие методы используются для повышения эффективности использования регистров?

8. Что такое регистровые окна?

 








Дата добавления: 2015-09-29; просмотров: 1055;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.007 сек.