Реализация механизма перехода. 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Реализация механизма перехода.



Если выбранная команда, находящаяся в РК, является командой перехода, тогда ее младшие 12 бит служат адресом ячейки ОЗУ для следующей команды. Для осуществления перехода достаточно перенести код из этих разрядов в регистр СК, и тогда следующие команды будут выбраны из другого места программы.

Примечание. Если команды хранятся парами (по две в одной ячейке ОЗУ), то ситуация сложнее. Здесь возможно два пути: первый - разрешить переход только на первую инструкцию пары. Второй - предусмотреть инструкции, позволяющие реализовать переход на первую и на вторую часть команды, что сложнее. В большинстве машин инструкции выбираются по одной и обсуждаемой проблемы просто не существует.

 

Развитие

Как отмечалось, в каждой ячейке ОЗУ хранится по две команды. Причиной появления такой схемы является одноадресная структура команды, при которой в нее входят короткий код операции и один адрес памяти. В итоге общая длина команды оказывается небольшой и для ее сохранения достаточно половины ячейки. Если, же включить в состав машинной инструкции два или даже три адреса, то необходимое для записи такой команды число разрядов существенно возрастет. С практической точки зрения удобно так подобрать структуру команды, чтобы ее общая длина оказалась равной длине обрабатываемых в ЭВМ чисел. Большинство машин первого и второго поколений конструировались именно по такой схеме.

БЭСМ-6 имела слово разрядностью 48 бит и команды длиной 24 бита, состоявшие из 15-разрядного адресного поля (возможна адресация 215 К слов) и 9-разрядного кода операции.

Как только между длиной машинной команды и размером ячейки ОЗУ устанавливается равенство, основной алгоритм исполнения программы заметно упрощается.

При переходе к третьему поколению происходит очень существенное изменение в структуре ОЗУ. Возникшая потребность обрабатывать данные различной длины - числа различной точности, символы текстов - приводит к возникновению байтовой организации памяти. Минимальной порцией считываемой информации становится 1 байт и адресация от целостных ячеек ОЗУ переходит к отдельным байтам. В результате адреса памяти двух соседних чисел уже отличаются не на единицу, как раньше, а на большую величину (стандартное значение для ЕС ЭВМ составляло 4 байта).

Если стандартное число хранится в четырех соседних байтах, а данные с двойной точностью занимают по восемь, для их эффективной обработки количество считываемых за один раз байт должно быть не менее четырех.

Байтовая структура памяти отразится на обсуждаемом основном алгоритме исполнения машинных команд.

В пункте II основного алгоритма значение счетчика команд возрастало каждый раз на единицу. Теперь величина приращения, равная длине команды в байтах, будет больше единицы. В ЕС ЭВМ и многих компьютерах четвертого поколения, в том числе и на базе всех Intel-совместимых процессоров, команды имеют неодинаковую длину. В результате процессор должен по виду операции определить ее длину в байтах и прибавить к счетчику.

Для примера, что в процессорах фирмы Intel наиболее простые команды, такие, как увеличение регистра на единицу (INC) или запись/чтение из стека(PUSH/POP), занимают всего один байт, типовые арифметические, логические операции и пересылки данных - 2 байта, а некоторые более сложные команды требуют больше.

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

 

Конвейер команд.

 

В отечественной литературе утверждается, что идея использования совмещения операций в машине была впервые высказана известным советским конструктором ЭВМ академиком С.А. Лебедевым (1957 год).

В наиболее общем виде идеи конвейеризации выполнения последовательности команд программы состоят в следующем. Все операции разбиваются на ряд стандартных шагов, для выполнения каждого из которых проектируется отдельное устройство. Благодаря узкой специализации указанных устройств они способны быстро выполнять какую-либо одну часть машинной инструкции, а затем результат передавать следующему устройству. Пока следующие устройства заканчивают операцию, первое из рассмотренных устройств уже освободилось и способно начать выполнение второй инструкции и т.д. Теоретически цепочка из 5 устройств способна при удачном стечении обстоятельств одновременно выполнять до 5 инструкций, причем первая будет уже завершаться, обработка пятой только начнется, а выполнение 2-4 команд будет находиться в различных промежуточных состояниях.

Рассмотрим простейший пример организации конвейерного выполнения команд программы. Предположим, что все этапы выполнения команды абсолютно независимы и выполняются за одинаковое время (реально это не всегда так). Разобьем команду на 5 этапов:

• ВК - выборка команды из памяти;

• ДК - декодирование команды;

• ВО - выборка операндов;

• РО - реализация операции;

• ЗР - запоминание результата.

Выполнение 5 последовательных команд, первая из которых имеет некоторый условный номер n, можно проиллюстрировать с помощью следующей таблицы:

КОМАНДА

Номер такта

1 2 3 4 5 6 7 8 9
Команда n ВК ДК ВО РО ЗР        
Команда n + 1   ВК ДК ВО РО ЗР      
Команда n + 2     ВК ДК ВО РО ЗР    
Команда n + 3       ВК ДК ВО РО ЗР  
Команда n + 4         ВК ДК ВО РО ЗР

Из таблицы видно, что конвейер начинает работать не сразу: первые 4 такта имеется хотя бы одно устройство, которое простаивает. Только начиная с пятого такта конвейер начинает функционировать на полную мощность и каждый такт сопровождается завершением одной инструкции. Если исполнять команды программы строго последовательно, то на каждую уйдет 5 тактов, т.е. конвейер ускоряет выполнение программы в 5 раз.

На практике трудности процесса могут быть вызваны следующими причинами:

1. Не все команды строго одинаковы (например, некоторые берут данные из памяти, а некоторые из регистров, что значительно быстрее; разные команды требуют для исполнения неодинаковое число тактов); по этой причине некоторые устройства конвейера в некоторых тактах вынуждены будут простаивать.

2. Наиболее критичной операцией конвейера является обращение к ОЗУ. Две команды не могут одновременно обращаться к ОЗУ (в частности, этапы ВК и ВО не должны находиться в одном столбце).

3. Последующим командам могут требоваться результаты предыдущих.

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

5. Отдельная команда даже при благоприятном стечении обстоятельств в конвейере выполняется дольше, чем если бы она выполнялась отдельно: в работе конвейера имеются "накладные временные расходы".

 

Отметим еще одну важную с теоретической точки зрения деталь. Вычислительные системы классифицируются по двум принципам: является ли поток команд и поток данных в этой системе одиночным или множественным. Классическая модель, предложенная Д. фон Нейманом, выполняет команды программы последовательно одна за другой, причем каждая команда обрабатывает только одно число. Такой способ обработки называется Одиночный поток Команд и Одиночный поток Данных. Конвейерные вычислительные системы, способные одновременно выполнять несколько команд, уже используют множественный поток команд и соответственно обозначаются аббревиатурой МКОД.

Идея совмещения операций при выполнении программы с целью повышения производительности ЭВМ в современных микропроцессорах получила дальнейшее развитие. Рассмотрим наиболее распространенные направления модификации исполнения инструкций в современных процессорах.

Наиболее "узким" местом производительности процессора является обращение к ОЗУ. В отличие от регистров процессора, входящих в его состав, ОЗУ является отдельным устройством и "диалог" с ним требует значительных затрат времени.

Уже в процессоре Intel 8086 применена конвейерная архитектура, позволяющая выполнять выборку кодов инструкций из памяти и их декодирование во время исполнения внутренних операций. Конвейер процессора 8086 имеет 6-байтовую внутреннюю очередь инструкций. Блок предварительной выборки при наличии двух свободных байт в очереди старается ее заполнить в то время, когда внешняя шина процессора не занята операциями обмена.

Описанный процесс "досрочного" считывания последовательно расположенных байт памяти в процессорах Intel называют опережающей выборкой. Размер очереди команд имеет тенденцию к увеличению. Так, в 80386 он равнялся 16 байтам, что соответствовало 3-7 машинным инструкциям, а в 80486 - 32 байтам.

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

Входная часть конвейера общая, а затем он разделяется на две ветви, они называются U- и V-конвейеры, последний имеет некоторую ограниченность по сравнению с первым.

При исполнении программы процессор проверяет две очередные инструкции программы на совместимость и, если они таковые, запускает оба конвейера. В противном случае первая инструкция запускается в U-конвейер, а V-конвейер простаивает.

В процессоре Pentium существует специальный блок предсказания ветвлений, направленный на уменьшение эффекта потерь времени при очистке конвейера из-за переходов. Опираясь на некоторую встроенную в процессор вероятность переходов и статистику данной команды перехода в предыдущих случаях, он принимает решение о том, насколько вероятно, что переход состоится. Если получается, что перехода скорее всего не будет, то выборка продолжается обычным образом; в противном случае дальнейшая выборка производится начиная с адреса перехода. В случаях, когда переход удалось "угадать" (а их заметно более половины!), предварительная выборка оказывается правильной. В противном случае конвейер сбрасывается.

Pentium не просто пытается предсказать переходы, но и способен выполнять следующие после перехода инструкции. Подобное явление имеет техническое название исполнение по предположению.

Процессору "разрешено" при некоторых благоприятных условиях исполнять инструкции программы не в том порядке, в каком они следуют в программе! Процессор Pentium Pro при анализе программного кода и планировании порядка вычислений может просматривать программу на 20-30 шагов вперед! Результаты опережающего исполнения команд записываются в специальные временные регистры, и когда процессор доходит до выполненной досрочно инструкции, не обнаружив каких-либо оснований для аннулирования ее результата, то просто копирует подготовленное ранее содержимое соответствующего регистра.

Выводы

1. Важным элементом устройства управления в машине фоннеймановской архитектуры является счетчик команд. Его назначение состоит в постоянном хранении адреса команды программы, которую необходимо выполнять.

2. Каждая команда программы реализуется согласно стандартному алгоритму: выборка команды из памяти, модификация значения счетчика, выполнение команды и повторение сначала.

3. Выборка команд и данных из памяти производится одинаковым образом.

4. Для реализации переходов в разветвляющихся и циклических программах в ходе выполнения команд данного типа содержимое счетчика команд изменяется.

5. При переходе к байтовой структуре памяти счетчик стал увеличиваться не на единицу, а на количество байт в очередной команде. Длины команд не во всех машинах являются постоянными.

6. Одно из наиболее существенных усовершенствований основного алгоритма выполнения команд программы состоит в организации конвейерного способа их выполнения. Благодаря данному способу удается существенно повысить эффективность работы процессора.

7. Ради повышения производительности в современных моделях процессоров при выполнении команд программы используются все усложняющиеся алгоритмы. Совершенствование технологий производства также позволяет модифицировать этот процесс (например, использовать несколько конвейеров и т.д.).

 

Многоуровневая память.

 

Многоуровневая память (англ. multilevel memory) — организация памяти, состоящая из нескольких уровней запоминающих устройств с различными характеристиками и рассматриваемая со стороны пользователей как единое целое. Для многоуровневой памяти характерна страничная организация, обеспечивающая «прозрачность» обмена данными между ЗУ разных уровней.

 



Поделиться:


Читайте также:




Последнее изменение этой страницы: 2021-05-11; просмотров: 75; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.22.100.180 (0.022 с.)