Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
osnovy_vt / принципы управления.ppt
Скачиваний:
49
Добавлен:
21.03.2016
Размер:
307.2 Кб
Скачать

ПРОГРАММНЫЙ ПРИНЦИП УПРАВЛЕНИЯ

Суть принципа программного управления компьютером сводится к следующим трем положениям:

1.любая работа выполняется компьютером по программе;

2.исполняемая программа находится в оперативной памяти;

3.программа выполняется автоматически.

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

регистры УУ сведены в общую таблицу:

 

 

Название

Разр. (бит)

 

Назначение

CK Счетчик команд

 

12

Хранит адрес следующей команды

PK

Регистр команд

 

 

20 (18) Хранит исполняемую команду; 12 р. служат

 

 

 

 

адресом при чтении из ОЗУ

ДР Дополнительный регистр

20 (18)

 

Хранит вторую команду пары

РП Регистр памяти

 

40

Обеспечивает обмен данными с ОЗУ

СК

Важный в работе ЭВМ регистр, хранит адрес очередной исполняемой инструкции. Самое первое

значение должен занести оператор, а в дальнейшем машина автоматически обновляет значение данного регистра.

В современных компьютерах при включении питания или сбросе в счетчик аппаратным образом заносится значение стандартного начального адреса ПЗУ.

РК Исполняемая в данный момент команда хранится в этом регистре. Из 12 младших бит названного регистра берется адрес при считывании и записи информации в ОЗУ. Поскольку в одной ячейке упаковано две команды, то для хранения второй предусмотрен специальный регистр ДР. В большинстве других ЭВМ команды считываются из ОЗУ по одной, следовательно, последний регистр отсутствует. РП Его назначение - принимать из ОЗУ содержимое считываемой ячейки; через него же производится и запись в память.

В статье Д. фон Неймана ОЗУ предполагалось состоящим из 4096 слов (ячеек) по 40 двоичных разрядов. Любое число является 40-разрядным. Адреса ячеек представляют собой целые числа от 0 до 4095 = 2**12- 1, и для их записи требуется не менее 12 бит.

В предлагаемой конструкции система команд является одноадресной, так что в одну стандартную 40- разрядную ячейку помещалось две 20-битные команды. Каждая из них содержит 12-битный адрес информации и 6-битный код операции (возможно до 2**6 = 64 различных операций). Оставшиеся 2 бита не используются.

При выполнении каждой команды ЭВМ осуществляет стандартный набор действий: I. Выборка очередной команды из ОЗУ:

а) адрес очередной команды копируется из СК в РК, младшие 12 разрядов которого одновременно служат регистром считываемого из ОЗУ адреса; 6) стандартным образом производится считывание содержимого необходимой ячейки ОЗУ в РП.

Считывание происходит точно так же, как если бы требовалось прочитать число, а не пару команд программы.

в) считанный код копируется из РП в РК и ДР так, чтобы в РК оказалась первая команда пары, а в ДР - вторая.

II. Добавление единицы к содержимому счетчика СК, чтобы он показывал адрес следующей ячейки ОЗУ с командами.

III. Дешифрация и выполнение первой команды из РК.

IV. Копирование второй команды пары из ДР в РК; ее дешифрация и выполнение. V. Если вычисления не закончены, то перейти к пункту I.

Реализация этапа дешифрации и выполнения команды зависит от того, какая операция должна быть выполнена. Суть процесса декодирования (дешифрации) состоит в преобразовании внешнего представления команды в некоторый внутренний стандартный для процессора формат. Команда в последнем гораздо длиннее (в 80386 код может занимать до 112 бит), но существенно удобнее для исполнения. Теоретически можно было сразу писать программы во внутреннем коде, но он был бы

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

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

Считывание 40-разрядного числа и пары 20-разрядных команд происходит абсолютно одинаково, что является следствием принципа хранимой программы. Содержимое ОЗУ читается в регистр РП, и только затем машина делает различие между командами и данными: первые направляются в пару регистров РК и ДР, а последние - в специализированный регистр арифметического устройства аккумулятор. Такая схема считывания информации из ОЗУ дополнительно позволяет передавать содержимое РП в аккумулятор несколькими способами: просто копировать, копировать модуль числа, прибавлять к содержимому аккумулятора, вычитать из него.

Основной алгоритм выполнения программы обеспечивает реализацию последовательно расположенных в ОЗУ команд. На практике этого обычно недостаточно, поскольку требуется организовывать повторение вычислений: циклы или развилку. Для этого используют специальные инструкции - безусловный и условный переход.

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

Если выбранная команда, находящаяся в РК, является командой перехода, тогда ее младшие 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-конвейер простаивает.