информатика_1 / лекции / 2-3
.pdfКоманды считываются из оперативной памяти по одной в специальный регистр команд (РК). В основном алгоритме работы вычислительного ядра машины фон Неймана для современных компьютеров величина приращения значения СК будет равна не единице, а длине команды в байтах. В компьютерах на базе всех Intelсовместимых процессоров, команды имеют неодинаковую длину. В результате процессор должен по виду операции определить её длину в байтах и прибавить к СК.
Основной алгоритм обеспечивает реализацию последовательно расположенных в ОЗУ команд. На практике требуется организовывать повторение действий (циклы) или выбор различных действий в зависимости от полученного результата (ветвление). Для того чтобы можно было нарушить естественный последовательный порядок выполнения программы, используются специальные команды — команды безусловного и условного перехода.
В первом случае переход происходит всегда, а во втором — только при выполнении определённого условия. Пусть, например, выбранная команда, находящаяся в РК, является командой безусловного перехода. Тогда её несколько младших разрядов служат адресом ячейки ОЗУ для следующей команды. Для осуществления перехода достаточно перенести код из этих разрядов в регистр СК, и тогда следующие команды будут выбраны уже из другого места программы.
Кроме того, в современных компьютерах применяется т.н. конвейеризация. При выполнении каждой команды
компьютер проделывает определённые стандартные
действия (см. основной алгоритм). В современных
компьютерах для каждого отдельного выделенного действия в процессоре предусмотрено отдельное
устройство. Благодаря узкой специализации таких устройств они способны очень быстро выполнять
отдельное действие, а затем передавать результат следующему устройству. Пока следующие устройства заканчивают действие, первое из устройств
освободилось и способно начать выполнение другой
команды и т.д. Теоретически цепочка из пяти устройств способна выполнять до пяти команд, при этом первая
будет уже завершаться, обработка пятой только
начнется, а выполнение 2-й – 4-й команд будет
находиться в различных промежуточных состояниях.
Рассмотрим простейший пример организации конвейерного выполнения команд программы. Предположим, что все этапы выполнения команды абсолютно независимы и выполняются за одинаковое время (реально это не всегда так). Разобьем выполнение команды на следующие 5 этапов:
•ВК — выборка команды из памяти;
•ДК — декодирование команды;
•ВО — выборка операндов;
•РО — реализация операции;
•ЗР — запоминание результата.
При сделанных допущениях выполнение пяти последовательных команд, первая из которых имеет условный номер n, можно показать так:
Из таблицы видно, что преимущества конвейера проявляются не сразу: первые 4 такта имеется хотя бы одно устройство, которое простаивает. Только начиная с 5-го такта конвейер начинает функционировать на полную мощность, и каждый такт сопровождается завершением выполнения одной команды.
На практике возникают следующие трудности:
1.Не все команды требуют одинакового времени (например, некоторые берут данные из ОП, а некоторые — из регистров, что значительно быстрее); разные команды требуют для исполнения разное число тактов; поэтому некоторые устройства конвейера в некоторых тактах будут простаивать.
2.Наиболее критичной операцией конвейера является обращение к ОП. Две команды не могут одновременно обращаться к ОП (в частности, этапы ВК и ВО в примере не должны находиться в одном столбце).
3.Последующим командам могут потребоваться
результаты предыдущих.
4.Для выхода на режим «полной загрузки» конвейера требуется некоторое время, причём не только с
момента включения процессора: некоторые команды
(например, команды переходов) изменяют адрес исполняемой команды, нарушая тем самым
нормальный процесс конвейеризации, что вынуждает заново перезапускать конвейер.
5.Отдельно взятая команда даже при полностью
благоприятном стечении обстоятельств в конвейере будет выполняться несколько дольше, чем если бы она выполнялась отдельно: в организации работы конвейера имеют место некоторые «накладные временные расходы».
Вычислительные системы принято классифицировать
по двум принципам: является ли поток команд и поток данных одиночным или множественным. Классическая
модель фон Неймана выполняет команды программы
последовательно одну за другой, причём каждая команда обрабатывает только одно число (в крайнем
случае, производя действие между ним и последним результатом). Такой способ обработки называется
ОКОД — Одиночный поток Команд и Одиночный поток
данных. Конвейерные вычислительные системы, способные одновременно выполнять несколько команд, обозначаются МКОД — Множественный поток Команд и Одиночный поток данных.
