Будь умным!


У вас вопросы?
У нас ответы:) SamZan.net

Лекция 3 Содержание лекции История создания МП Архитектура структура функциональная организа

Работа добавлена на сайт samzan.net:


Лекция №3

Содержание лекции

  1.  История  создания  МП
  2.  Архитектура, структура, функциональная организация МП, командный цикл.
  3.  Эволюция архитектур МП
  4.  Пути повышения быстродействия МП

В 1969 г. фирма Intel (год основания фирмы – 1968) объявила о создании микросхемы, содержащей 1 Кбит памяти типа RAM (на тот момент эта память была самой емкой). Тогда еще не существовало других микрокомпьютерных чипов, к которым можно было подключить эту микросхему памяти.

Создание микропроцессора началось с  малого: японская компания Busicom попросила Intel разработать микросхемы для мощных программируемых калькуляторов. Первоначально предполагалось, что будет создано двенадцать микросхем, но Тед Хофф из Intel предложил более интересное решение: одну универсальную микросхему, выбирающую команды из полупроводниковой памяти. Таким образом, полученное ядро могло справиться не только с требованиями Busicom, но и с множеством других задач.Эта разработка оказалась настолько интересна, что Хоффу удалось убедить руководство компании выкупить права на нее у Busicom за $ 60 тыс. и развить идею. В результате в конце 1971 года была представлена микросхема 4004 стоимостью $ 200, содержащая 2800 транзисторов и обладающая вычислительной мощностью праотца компьютеров – ENIAC, который занимал целый дом и состоял из 18 000 ламп.

Тед Хофф-один из создателей первого МП

Термин “микропроцессор” впервые был употреблен в 1972 году, хотя годом рождения этого прибора следует считать 1971 год, когда фирма Intel выпустила микросхему серии 4004 – “интегральное микропрограммируемое вычислительное устройство” ( см.рис.Х)

Рис.Х. Внешний вид первого МП

Последующие поколения МП от корпорации Intel, представляющие собой 8-, 16-, 32- и 64-разрядные приборы, появились соответственно в 1972, 1978, 1985, 2000 г.

Динамика развития и параметры первых МП от Intel представлена в таблице 1.

Таблица 1. Динамика развития и параметры первых МП от Intel

Процессор

Проектные нормы, мкм

Число транз. на крист., тыс.

Разрядность шины данных

Рабочая частота, МГц

Адресуемая память

Виртуальная память, ТБайт

I4004

10

2.3

4

0.75

4 Кбайт

-

I8008

10

3.5

8

0.8

16 Кбайт

-

I8080

6

6

8

2

64 Кбайт

-

I8086

3

29

16

5;8;10

1 Мбайт

-

I8088

3

29

8/16

5;8

1 Мбайт

-

I80286

1,5

135

16

8;10;12;16

16 Мбайт

0,001

I80386DX

1

275

32

20;25;33;40

4 Гбайт

64

I80386SX

1

275

16/32

20;25;33

4 Гбайт

64

I80486DX

0,8-1,0

1200

32

22;33;50;66;100

4 Гбайт

64

I80486SX

0,8

1185

32

16;20;25;33;50

4 Гбайт

64

Pentium

0,8-0,6

3100

32

60;66;75;90;100;120;133;166;200

4 Гбайт

64

      

Архитектура МП- Компонент  архитектуры МП.- Микроархитектура-Процесорное ядро – Процессор.

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

  1.  структурную схему МП;
  2.  число и имена программно-доступных регистров (регистровая модель);
  3.  разрядность машинного слова;
  4.  систему команд;
  5.  формат команд;
  6.  доступный размер памяти V (V=2n, где n – разрядность шины адреса);
  7.  режимы адресации памяти и внешних устройств;
  8.  организацию стека;
  9.  организацию прерываний (обработку нештатных ситуаций-исключений);
  10.  организацию интерфейса (interfaсe – сопрягать, согласовывать).

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

Микроархитектура микропроцессора - это аппаратная организация архитектуры (рис.Х)

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

Процессорное ядро это реализацию дизайна процессорной микроархитектуры для определённого рынка.

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

Процессоры – это реализация  процессорного ядра в конкретной продукции

Intel по сложившейся традиции даёт имена разработкам на базе интегральных схем по географическим названиям (так как они не могут быть зарегистрированы в качестве торговой марки кем-либо ещё) городов, рек или гор, находящихся недалеко от фабрик компании Intel, ответственных за соответствующую схему. Значительная часть этих мест находится на западе Америки, преимущественно в штате Орегон (где разрабатывается большинство проектов Intel, связанных с процессорами). При открытии лабораторий Intel зарубежом эта номенклатура была расширена для Израиля и Индии. Некоторые старые кодовые имена присваивались в честь небесных тел. Для моделей процессоров, предназначенных для домашних компьютеров («десктопов»), существуют некоторые правила наименования. Так, например, в серии Core 2 все четырехядерные «десктопные» процессоры имеют имена, оканчивающиеся на field (например, Kentsfield, Bloomfield и т. д.), а имена всех «десктопных» двухъядерных процессоров оканчиваются на dale (например, Wolfdale, Allendale, Arrandale).

Для их именования часто используется акроним из выражения Intel Architecture, IA (например, IA-32, IA-64).

  1.  Архитектура IA-32 предназначена для выполнения массовых 32-разрядных приложения на ПК начального уровня и реализована в следующих семействах процессоров:
  2.  Intel Celeron и Intel Pentium (в корпусе FC-PGA2);
  3.  процессорах Intel, использующих технологии ультранизкого напряжения питания;
  4.  Intel Core Duo.
  5.  Intel Xeon;
  6.  Intel Core 2 Duo.
  7.  Nehalem 
  8.  Sandy Breage
  9.  Архитектура набора команд IA-64 реализована в семействе процессоров Intel Itanium.

Начиная с микроархитектуры Sandy Bridge, Intel больше не дает различные названия процессорным ядрам в зависимости от количества ядер, типа сокета или области применения. Теперь они носят точно такое же название, как и микроархитектура.

Микропроцессор  в составе вычислительной cистемы выполняет следующие функции:

  1.  вычисление адресов команд и операндов;
  2.  выборку и дешифрацию команд из основной памяти (ОП);
  3.  выборку данных из ОП, регистров МП и регистров адаптеров внешних устройств (ВУ);
  4.  прием и обработку запросов и команд от адаптеров на обслуживание ВУ;
  5.  обработку данных и их запись в ОП, регистры МП и регистры адаптеров ВУ;
  6.  выработку управляющих сигналов для всех прочих узлов и блоков ПК;
  7.  переход к следующей команде

Основные параметры микропроцессора:

  1.  разрядность;
  2.  рабочая тактовая частота;
  3.  виды и размер кэш-памяти;
  4.  состав инструкций;
  5.  конструктив;
  6.  энергопотребление;
  7.  рабочее напряжение и т. д.
  8.  Разрядность шины данных микропроцессора определяет количество разрядов, над которыми одновременно могут выполняться операции;
  9.  Разрядность шины адреса МП определяет его адресное пространство. Адресное пространствоэто максимальное количество ячеек основной памяти, которое может быть непосредственно адресовано микропроцессором.
  10.  Внутренняя  тактовая частота МП во многом определяет его внутреннее быстродействие, поскольку каждая команда выполняется за определенное количество тактов.

Краткая запись разрядности МП

Краткая запись разрядности МП обозначается m/n/k/ и включает:

  1.  m - разрядность внутренних регистров, определяет принадлежность к тому или иному классу процессоров;
  2.  n - разрядность  внешней шины данных, определяет скорость передачи информации;
  3.  к - разрядность шины адреса, определяет размер адресного пространства.

Например:

МП I8086 характеризуется значениями m/n/k=16/16/20

МП I8088 характеризуется значениями m/n/k=16/8/20

МП I80286 характеризуется значениями m/n/k=16/16/24

МП I80386 характеризуется значениями m/n/k=32/32/32

МП I80486 характеризуется значениями m/n/k=32/32/32

МП Intel Pentium c микроархитектурой Р5  m/n/k=32/64/32

МП Intel Pentium c микроархитектурой Р6  m/n/k=32/63/36

Логическая структура МП

Функционально МП можно разделить на две части:

  1.  операционную, содержащую устройство управления (УУ), арифметико-логическое устройство (АЛУ) и микропроцессорную память (МПП) (за исключением нескольких адресных регистров);
  2.  интерфейсную, содержащую адресные регистры МПП; блок регистров команд — регистры памяти для хранения кодов команд, выполняемых в ближайшие такты; схемы управления шиной и портами.

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

Стандартные блоки микропроцессора с развитой архитектурой показаны на рисунке

I - Операционная часть

II-  Интерфейсная часть

РгСОЗУ -регистровое сверхоперативное запоминающее устройство;

АЛБ - арифметико-логический блок;

БДА - блок дополнительной арифметики;

БС - блок синхронизации.

БУПК - блок управления последовательностью команд;

БУВОп - блок управления выполнением операций;

БУФКА - блок управления формированием кодов адресов;

БУВП - блок управления виртуальной памятью;

БЗП - блок зашиты памяти;

БУПРПр - блок управления прерыванием работы процессора;

БУВВ - блок управления вводом/выводом;

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

Интерфейсная часть МП

Интерфейсная часть МП предназначена для связи и согласования МП с системной шиной ПК, а также для приема, предварительного анализа команд выполняемой программы и формирования полных адресов операндов и команд. Интерфейсная часть включает в свой состав:

  1.  адресные регистры МПП;
  2.  узел формирования адреса;
  3.  блок регистров команд, являющийся буфером команд в МП;
  4.  внутреннюю интерфейсную шину МП;
  5.  схемы управления шиной и портами ввода-вывода.

Некоторые из названных устройств, такие как узел формирования адреса и регистр команды, непосредственно выполняемой МП, функционально входят в состав устройства управления.

Процесс обработки данных  в МП состоит из нескольких характерных этапов. Прежде всего инструкции и данные забираются в современных МП из кэша L1 (который разделен на кэш инструкций и кэш данных). Эта процедура называется выборкой. После этого выбранные из кэша инструкции декодируются в понятные для данного процессора примитивы (машинные команды). Данная процедура называется декодированием. Далее декодированные команды поступают на исполнительные блоки процессора, выполняются, а результат записывается в оперативную память. Процессы выборки инструкций из кэша, их декодирование и продвижение к исполнительным блокам осуществляются в предпроцессоре, а процесс выполнения кодированных команд — в постпроцессоре. Таким образом, даже в самом простейшем случае команда проходит как минимум пять стадии обработки:

  1.  выборка из кэша;
  2.  декодирование;
  3.  выборка операнда
  4.  выполнение;
  5.  запись результатов.


В качестве примера рассмотрим схему МП I8086


Структура современных  МП

Физическая структура  современного микропроцессора достаточно сложна. В состав микропроцессора обычно входят следующие физические компоненты:

  1.  Core — ядро МП;
  2.  Execution Unit исполняющий модуль;
  3.  Integer ALUАЛУ для операций с целыми числами (с фиксированной запятой)
  4.  Registers — регистры;
  5.  Floatingpoint Unitблок для работы с числами с плавающей запятой;
  6.  Primary Cache — кэш первого уровня, в том числе кэш данных (Data Cache) и кэш команд (Code Cache);
  7.  Secondary Cache
  8.  Instruction Decode and Prefetch Unit и Branch Predictorблоки декодирования  иструкций, опережающего их исполнения и предсказания ветвлений;

Bus Interface — интерфейсные шины, в том числе 64- и 32-битовые шины, и выход на системную шину к  оперативной  памяти

Упрощенная структурная схема микропроцессора  показана   на рис.YY.

Рис. YY. Упрощенная структурная схема  современного МП

Кэш-память служит буфером между ОП и МП и позволяющая увеличить скорость выполнения операций. Регистры кэш-памяти недоступны для пользователя, отсюда и название «кэш» (cache), что в переводе с английского означает «тайник».

В современных материнских платах применяется конвейерный кэш с блочным доступом (Pipelined Burst Cache). В кэш-памяти хранятся копии блоков данных тех областей оперативной памяти, к которым выполнялись последние обращения и весьма вероятны обращения в ближайшие такты работы, — быстрый доступ к этим данным и позволяет сократить время выполнения очередных команд программы. При выполнении программы данные, считанные из ОП с небольшим опережением, записываются в кэшпамять. В кэш-память записываются и результаты операций, выполненных в МП.

По принципу записи результатов в оперативную память различают два типа кэшпамяти:

  1.  в кэш-памяти «с обратной записью» результаты операций прежде, чем быть записанными в ОП, фиксируются, а затем контроллер кэш-памяти самостоятельно перезаписывает эти данные в ОП;
  2.  в кэш-памяти «со сквозной записью» результаты операций одновременно, параллельно, записываются и в кэш-память, и в ОП.

Микропроцессоры, начиная с МП 80486, обладают встроенной в основное ядро МП кэш-памятью (или кэш-памятью 1-го уровня — L1), чем, в частности, и обусловливается их высокая производительность. МП Pentium имеют кэш-память отдельно для данных и отдельно для команд: у МП Pentium и Pentium Pro емкость этой памяти небольшая — по 8 Кбайт, у следующих версий МП Pentium по 16 Кбайт, а у МП серии Core по 32 Кбайт. У Pentium Pro и выше кроме кэш-памяти 1-го уровня (L1) есть и встроенная на микропроцессорную плату кэш-память 2-го уровня (L2) емкостью от 128 Кбайт до 2048 Кбайт. Эта встроенная кэш-память работает либо на полной тактовой частоте МП либо на его половинной тактовой частоте.  Следует иметь в виду, что для всех МП используется дополнительная кэш-память 2-го (L2) или 3-го ( L3) уровня, размещаемая на СП вне МП, емкость которой может достигать нескольких мегабайт (кэш на С П относится к уровню 3, если МП, установленный на этой плате, имеет кэш 2-го уровня). Время обращения к кэш-памяти зависит от тактовой частоты, на которой кэш работает, и составляет обычно 1 -2 такта. Так, для кэш-памяти L1 МП Pentium характерно время обращения 2-5нс, для кэш-памяти L2 и L3 это время доходит до 10 не. Пропускная способность кэш-памяти зависит и от времени обращения, и от пропускной способности интерфейса и лежит в широких пределах от300до 3000 Мбайт/с.

Использование кэш-памяти существенно увеличивает производительность системы. Чем больше размер кэш-памяти, тем выше быстродействие, но эта зависимость нелинейная. Имеет место постепенное уменьшение скорости роста общей производительности компьютера с ростом размера кэш-памяти. Для современных ПК рост производительности, как правило, практически прекращается после 1 Мбайт кэш-памяти L2. Создается кэш-память LI, L2, L3 на основе микросхем статической памяти.

Примечание-В современных ПК применяется и кэш-память между внешними запоминающими устройствами на дисках и оперативной памятью (емкостью 4-32 Мбайт), обычно относящаяся к 4-му уровню. Кэш-память для ВЗУ создается либо в поле оперативной памяти, либо непосредственно в модуле самого ВЗУ.


Основные блоки  современного МП

Устройство управления (УУ) является функционально наиболее сложным устройством  МП. Оно вырабатывает управляющие сигналы, поступающие по кодовым шинам инструкций во все блоки машины.

Укрупненная функциональная схема микропрграммного устройств управления показана на рис.ХХХ

На рисунке ХХХ представлены:

  1.  регистр команд — запоминающий регистр, в котором хранится код команды: код выполняемой операции (КОП) и адреса операндов, участвующих в операции. Регистр команд расположен в интерфейсной части МП, в блоке регистров команд (в МП с конвейерным выполнением команд имеется несколько регистров команд);
  2.  дешифратор операций — логический блок, выбирающий в соответствии с поступающим из регистра команд кодом операции (КОП) один из множества имеющихся v него выходов
  3.  постоянное запоминающее устройство (ПЗУ) микропрограмм хранит в своих ячейках управляющие сигналы (импульсы), необходимые для выполнения в блоках ПК процедур обработки информации. Импульс по выбранному де-i шифратором операций в соответствии с кодом операции проводу считывает из ПЗУ микропрограмм необходимую последовательность управляющих сигналов;
  4.  узел формирования адреса (находится в интерфейсной части МП) — устройство, вычисляющее полный адрес ячейки памяти (регистра) по реквизитам, поступающим из регистра команд и регистров МПП;
  5.  кодовые шины данных, адреса и инструкций — часть внутренней интерфейсной шины микропроцессора.
  6.  В общем случае УУ формирует управляющие сигналы для выполнения следующих основных процедур:
  7.  выборки из регистра-счетчика адреса команды МПП адреса ячейки ОЗУ, где хранится очередная команда программы;
  8.  выборки из ячеек ОЗУ кода очередной команды и приема считанной команды в регистр команд;
  9.  расшифровки кода операции и признаков выбранной команды;
  10.  считывания из соответствующих расшифрованному коду операции ячеек ПЗУ микропрограмм управляющих сигналов (импульсов), определяющих во всех блоках машины процедуры выполнения заданной операции, и пересылки управляющих сигналов в эти блоки;
  11.  считывания из регистра команд и регистров МПП отдельных составляющих адресов операндов (чисел), участвующих в вычислениях, и формирование полных адресов операндов;
  12.  выборки операндов (по сформированным адресам) и выполнения заданной операции обработки этих операндов;
  13.  записи результатов операции в память;
  14.  формирования адреса следующей команды программы

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

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

Устройство управления в строгой последовательности в рамках тактовых и цикловых временных интервалов работы микропроцессора (такт - минимальный рабочий интервал, в  течение которого совершается одно элементарное действие; цикл - интервал времени, в течение которого выполняется одна машинная операция) осуществляет:

  1.  выборку команды;
  2.  интерпретацию ее с целью анализа формата, служебных признаков и вычисления адреса операнда (операндов);
  3.  установление номенклатуры и временной последовательности всех функциональных управляющих сигналов;
  4.  генерацию управляющих импульсов и передачу их на управляющие шины функциональных частей микроЭВМ и вентили между ними; анализ результата операции и
  5.  изменение своего состояния так, чтобы определить месторасположение (адрес) следующей команды.

Арифметико-логическое устройство (АЛУ) предназначено для выполнения арифметических и логических операций преобразования информации.

Функционально простейшее АЛУ (см. рис.)  состоит из двух регистров, сумматора и схем управления (местного устройства управления).

  1.  Сумматор — вычислительная схема, выполняющая процедуру сложения поступающих на ее вход двоичных кодов; сумматор имеет разрядность двойного машинного слова.
  2.  Регистры — быстродействующие ячейки памяти различной длины: регистр 1 имеет разрядность двойного слова, а регистр 2 — разрядность слова. При выполнении операций в регистр 1 помещается первое число, участвующее в операции, а по завершении операции — результат; в регистр 2 — второе число, участвующее в операции (по завершению операции информация в нем не изменяется). Регистр 1 может и принимать информацию с кодовых шин данных, и выдавать информацию на них; регистр 2 только получает информацию с этих шин.
  3.  Схемы управления принимают по кодовым шинам инструкций управляющие сигналы от устройства управления и преобразуют их в сигналы для управления работой регистров и сумматора АЛУ.
  4.  АЛУ выполняет арифметические операции «+», «-», «х» и «:» только над двоичной информацией с запятой, фиксированной после последнего разряда, то есть только над целыми двоичными числами. Выполнение операций над двоичными числами с плавающей запятой и над двоично-кодированными десятичными числами осуществляется с привлечением математического сопроцессора или по специально составленным программам.

 

Рис.ZZ. Структурная схема  простейшего АЛУ


Командный цикл. Принцип конвейерной обработки.

Каждая команда МП выполняется в строго определенной последовательности, определяемой кодом команды, и ее выполнение синхронизируется во времени  сигналами генератора тактовых импульсов (ГТИ). При использовании любого микропроцессора необходимо ясно представлять динамику его работы, т.е. на каких магистралях и когда МП будет выдавать ту или иную информацию. Это в дальнейшем поможет понимать работу схем, позволяющих согласовывать МП с различными внешними устройствами. Определим следующие понятия: цикл команды, машинный цикл, машинный такт.

        Цикл команды (ЦК) - это время, необходимое МП для получения, декодирование и выполнение команды.

        Машинный цикл (МЦ) - это время, требуемое для извлечения (записи) одного байта информации из (в) памяти или порт ввода/вывода или выполнение команды длиной в один байт.

        Тактовым импульсом (ТИ) называется период синхросигналов Ф1, Ф2. Начало тактов определяется нарастающим фронтом сигнала Ф1, а большинство действий в системе привязано к нарастающему фронту сигнала Ф2.

        Между ЦК, МЦ, ТИ существуют следующие соотношения

                                  

                   ЦК = (1 + 5) МЦ

                                           ╚ =(35) ТИ

        Из него следует, что любая команда в зависимости от своего типа может состоять из 1 до 5 машинных циклов, а любой из 10 типов МЦ состоит из 35 ТИ (причем действия МП в первых трех тактах для всех МЦ одинаковы). Временная диаграмма обобщенного МЦ приведена на рис.

Временные деаграммы машиного цикла для МП i8086

Система команд процессора

Разнообразие типов данных, форм их представления и действий, которые необходимы для обработки информации и управления ходом вычислений, порождает необходимость использования различных команд — набора команд. Каждый процессор имеет собственный вполне определенный набор команд, называемый системой команд процессора. Система команд должна обладать двумя свойствами — функциональной полнотой и эффективностью. Функциональная полнота — это достаточность системы команд для описания любого алгоритма. Требование функциональной полноты не является слишком жестким. Доказано, что свойством функциональной полноты обладает система, включающая всего три команды (система Поста): присвоение 0, присвоение 1, проверка на 0. Однако составление программ в такой системе команд крайне неэффективно.

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

Система команд процессора характеризуется тремя аспектами: форматами, способами адресации и системой операций.

Форматы команд

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

Команда делится на две области: область кода операции и область адресов. Вначале идет код операции (КОП) который говорит, что вообще необходимо делать, а затем идет адрес операнда/операндов с которым/которыми это надо делать.

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

КОП

А1,

А2

А3

В двухадресных командах адресная область состоит из двух полей: поле адреса первого операнда и поле адреса второго операнда. Адрес результата действия над операндами будет записан в первое поле.

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

Под форматом команды следует понимать длину команды, количество, размер, положение, назначение и способ кодировки ее полей. Команды, как и любая информация в ЭВМ, кодируются двоичными словами, которые должны содержать в себе следующие виды информации:

  1.  тип операции, которую следует реализовать в данной команде-Код операции (КОП);
  2.  место в памяти, откуда следует взять первый операнд (А 1);
  3.  место в памяти, откуда следует взять второй операнд (А2);
  4.  место в памяти, куда следует поместить результат (A3).

Каждому из этих видов информации соответствует своя часть двоичного слова — поле, а совокупность полей (их длина, расположение в командном слове, способ кодирования информации) называется форматом команды. В свою очередь, некоторые поля команды могут делиться на подполя. Формат команды, поля которого перечислены выше, называется трехадресным ( см.рис. 2.1, а)

Рис. 2.1. Форматы команд: а — трехадресный; б — двухадресный; в — одноадресный; г — безадресный

Команды трехадресного формата занимают много места в памяти, в то же время далеко не всегда поля адресов используются в командах эффективно. Действительно, наряду с двухместными операциями (сложение, деление, конъюнкция и др.) встречаются и одноместные (инверсия, сдвиг, инкремент и др.), для которых третий адрес не нужен. При выполнении цепочки вычислений часто результат предыдущей операции используется в качестве операнда для следующей. Более того, нередко встречаются команды, для которых операнды не определены (STOP) или подразумеваются самим кодом операций (DAA, десятичная коррекция аккумулятора).

Поэтому в системах команд реальных ЭВМ трехадресные команды встречаются редко. Чаще используются двухадресные команды (рис. 2.1,6), в этом случае в бинарных операциях результат помещается на место одного из операндов.

Для реализации одноадресных форматов (рис. 2.1, в) в процессоре предусматривают специальную ячейку — аккумулятор. Первый операнд и результат всегда размещаются в аккумуляторе, а второй операнд адресуется полем А.

Реальная система команд обычно имеет команды нескольких форматов, причем тип формата определяется в поле КОП.

Способы адресации  (режимы адресации -методы адресации)

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

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

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

Существует несколько типов адресации.

Непосредственная — в поле адреса команды располагается не адрес операнда, а сам операнд. Такой способ удобно использовать в командах с константами.  Начнем с непосредственной адресации – это случай, когда вместо адреса операнда в команде указывается сам операнд (правда, если он представляет целое число). Выбрав из памяти код операции, процессору уже нет необходимости обращаться к  памяти за самим операндом, ведь он передается вместе с КОП.

Непосредственная адресация (рис. 3.1) предполагает, что операнд (входной) находится в памяти непосредственно за кодом команды. Операнд обычно представляет собой константу, которую надо куда-то переслать, к чему-то прибавить и т.д. Например, команда может состоять в том, чтобы прибавить число 6 к содержимому какого-то внутреннего регистра процессора. Это число 6 будет располагаться в памяти, внутри программы в адресе, следующем за кодом данной команды сложения.


Рис. 3.1.  Непосредственная адресация.

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


Рис. 3.2.  Прямая адресация.

Прямая — в этом случае в адресном поле располагается адрес операнда. ( Иногда этот метод называют  абсолютным  типом  адресации) 

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

Рис. 3.3.  Регистровая адресация.

. Поле адреса регистра имеет в команде значительно меньшую длину, чем поле адреса памяти.

Разновидность регистровой адресации является Безадресная поле адреса в команде отсутствует, а адрес операнда или не имеет смысла для данной команды, или подразумевается по умолчанию. Часто безадресные команды подразумевают действия над содержимым аккумулятора. Характерно, что безадресные команды нельзя применить к другим регистрам или ячейкам памяти.

Косвенная — в поле адреса команды располагается адрес ячейки памяти, в которой хранится адрес операнда ("адрес адреса"). 

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

Его основной недостаток— потеря времени на двойное обращение к памяти — сначала за адресом, потом — за операндом.

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

Косвенно-регистровая (она же косвенная) адресация предполагает, что во внутреннем регистре процессора находится не сам операнд, а его адрес в памяти (рис. 3.4). Например, команда может состоять в том, чтобы очистить ячейку памяти с адресом, находящимся в нулевом регистре. Номер этого регистра (0) будет определяться кодом команды очистки.


Рис. 3.4.  Косвенная адресация.

Одной из разновидностей регистрово-косвенной адресации является стековая  через указатель стека.

Обращение к такой памяти напоминает обращение с магазином стрелкового оружия. Имеется фиксированная ячейка, называемая верхушкой стека. При чтении слово извлекается из верхушки, а все остальное содержимое "поднимается вверх" подобно патронам в магазине, так что в верхушке оказывается следующее по порядку слово. При записи новое слово помещается в верхушку стека, а все остальное содержимое "опускается вниз" на одну позицию. Таким образом, слово, помещенное в стек первым, будет прочитано последним. Говорят, что стек поддерживает дисциплину LIFO — Last In First Out (последний пришел — первый ушел). Реже используется безадресная память типа очередь с дисциплиной FIFO — First In First Out (первый пришел — первый ушел).

Примечание: в современных ЭВМ как правило используется аппаратно-программный стек

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

Все выше приведенные типы адресации касались адресации одного операнда в команде. А как же быть в случае с несколькими операндами или говоря другим языком – массивами? В этом случае  в регистре лежит начальный адрес. В команде указан адрес этого регистра, а так же записано смещение относительно начального адреса. Все остальные адреса операндов будут получены из суммы адреса и смещения. Такой вот тип адресации называется относительным.

При относительной адресации можно еще и модифицировать адреса. В этом случае адрес будет равен сумме начального адреса плюс смещение плюс содержимое индексного регистра.

Если система использует несколько типов адресации, то в команде обязательно записывается, какой способ будет применен в данный момент. Т.е. в команде указывается признак адресации в поле признака операции.

Таким образом при относительной адресации адрес формируется как сумма двух слагаемых: базы, хранящейся в специальном регистре или в одном из РОН, и смещения, извлекаемого из поля адреса команды. Этот способ позволяет сократить длину команды (смещение может быть укороченным, правда в этом случае не вся память доступна в команде) и/или перемещать адресуемые массивы информации по памяти (изменяя базу). Разновидности— индексная и базово-индексная адресации. Индексная адресация предполагает наличие индексного регистра вместо базового. При каждом обращении содержимое индексного регистра мы модифицируем (обычно увеличиваем или уменьшается ). Базово-индексная адресация со смещением формирует адрес операнда как сумму трех слагаемых: базы, индекса и смещения.

Реже встречаются еще два метода адресации.

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

Автодекрементная адресация работает похоже на автоинкрементную, но только содержимое выбранного регистра уменьшается на единицу или на два перед выполнением команды. Эта адресация также удобна при обработке массивов данных. Совместное использование автоинкрементной и автодекрементной адресаций позволяет организовать память стекового типа (см. раздел 2.4.2).

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

Примеры методов адресации для МП 80х86

  1.  Непосредственный режим. Характеризуется тем, что данное длиной 8 или 16 бит является частью команды.Пример: MOV dest, 20h.
  2.  Прямому режиму свойственно то, что 16-битовый эффективный адрес является частью команды. Пример: MOV dest, [100h]. MOV dest,  PPPP
  3.  Регистровый режим обладает тем свойством, что данное содержится в определяемом командой регистре; 16-битовый операнд может находится в регистрах AX, BX, CX, DX, SI, DI, SP, BP, а 8-битовый – в регистрах AL, AH, BL, BH, CL, CH, DL, DH.Пример: MOV dest, AX.
  4.  В регистровом косвенном режиме эффективный адрес данного находится в базовом регистре BX, BP или индексном регистре (SI, DI)Пример: MOV dest, [SI].
  5.  В регистровом относительном (т. е. со смещением) режиме эффективный адрес равен сумме 8- или 16-битового смещения и содержимого базового или индексного регистров. Этот тип адресации удобен для доступа к элементам таблицы, когда сдвиг указывает на начало таблицы, а регистр – на ее элемент.Пример: MOV dest, [BX + 2]
  6.  Базовый индексный режим характеризуется тем, что эффективный адрес равен сумме содержимого базового и индексного регистров. .Пример: MOV dest, [BX + SI].
  7.  Относительный (т. е. со смещением) базовый индексный режим. Свойственно то, что эффективный адрес равен сумме 8- или 16-битового смещения и базового-индексного адреса. Этот режим удобен при адресации двумерных массивов, когда базовый регистр содержит начальный адрес массива, а значение смещения и индексного регистра задают сдвиг по строке и столбцу. Пример: MOV dest, [BX + SI + 4]

Сегментирование памяти

Адресация данных в ЭВМ

Основные способы адресации:

  1.  линейная
  2.   сегментная
  3.   страничная
  4.   смешанная

Сегментация позволяет:

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

Выделяют пять основных сегментов:

  1.  сегмент программ
  2.  стек
  3.  три сегмента пользователя данных

Говоря об адресации, нельзя обойти вопрос о сегментировании памяти, применяемой в некоторых процессорах, например в процессорах IBM PC-совместимых персональных компьютеров.

В процессоре Intel 8086 сегментирование памяти организовано следующим образом.

Вся память системы представляется не в виде непрерывного пространства, а в виде нескольких кусков — сегментов заданного размера (по 64 Кбайта), положение которых в пространстве памяти можно изменять программным путем.

Для хранения кодов адресов памяти используются не отдельные регистры, а пары регистров:

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

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

Сегмент может начинаться только на 16-байтной границе памяти (так как адрес начала сегмента, по сути, имеет четыре младших нулевых разряда, как видно из рис. 3.5), то есть с адреса, кратного 16. Эти допустимые границы сегментов называются границами параграфов.

Отметим, что введение сегментирования, прежде всего, связано с тем, что внутренние регистры процессора 16-разрядные, а физический адрес памяти 20-разрядный (16-разрядный адрес позволяет использовать память только в 64 Кбайт, что явно недостаточно). В появившемся в то же время процессоре MC68000 фирмы Motorola внутренние регистры 32-разрядные, поэтому там проблемы сегментирования памяти не возникает.


Рис. 3.5.  Формирование физического адреса памяти из адреса сегмента и смещения.


Рис. 3.6.  Физический адрес в сегменте (все коды — шестнадцатеричные).

Применяются и более сложные методы сегментирования памяти. Например, в процессоре Intel 80Х86 в так называемом защищенном режиме адрес памяти вычисляется в соответствии с рис. 3.7.

В сегментном регистре в данном случае хранится не базовый (начальный) адрес сегментов, а  селекторо, определяющие адреса в памяти, по которым хранятся дескрипторы (то есть описатели) сегментов. Область памяти с дескрипторами называется таблицей дескрипторов. Каждый дескриптор сегмента содержит базовый адрес сегмента, размер сегмента  и его атрибуты. Базовый адрес сегмента имеет разрядность 32 бит, что обеспечивает адресацию 4 Gбайт физической памяти.

Таким образом, на сумматор, вычисляющий физический адрес памяти, подается не содержимое сегментного регистра, как в предыдущем случае, а базовый адрес сегмента из таблицы дескрипторов. Этот метод иллюстрируется рис. 3.8.

Адрес памяти (физический адрес) вычисляется в три этапа. Сначала вычисляется так называемый эффективный адрес (32-разрядный) путем суммирования трех компонентов: базы, индекса и смещения (Base, Index, Displacement), причем возможно умножение индекса на масштаб (Scale). Эти компоненты имеют следующий смысл:


Рис. 3.8.  Формирование физического адреса памяти процессора 80386 в защищенном режиме.

  1.  смещение — это 8-, 16- или 32-разрядное число, включенное в команду.
  2.  база — это содержимое базового регистра процессора. Обычно оно используется для указания на начало некоторого массива.
  3.  индекс — это содержимое индексного регистра процессора. Обычно оно используется для выбора одного из элементов массива.
  4.  масштаб — это множитель (он может быть равен 1, 2, 4 или 8), указанный в коде команды, на который перед суммированием с другими компонентами умножается индекс. Он используется для указания размера элемента массива.

Затем специальный блок сегментации вычисляет 32-разрядный линейный адрес, который представляет собой сумму базового адреса сегмента из сегментного регистра с эффективным адресом. Наконец, физический 32-битный адрес памяти образуется путем преобразования линейного адреса блоком страничной переадресации, который осуществляет перевод линейного адреса в физический страницами по 4 Кбайта.

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

Адресация байтов и слов

Многие процессоры, имеющие разрядность 16 или 32, способны адресовать не только целое слово в памяти (16-разрядное или 32-разрядное), но и отдельные байты. Каждому байту в каждом слове при этом отводится свой адрес.

Так, в случае 16-разрядных процессоров все слова в памяти (16-разрядные) имеют четные адреса. А байты, входящие в эти слова, могут иметь как четные адреса, так и нечетные.

Например, пусть 16-разрядная ячейка памяти имеет адрес 23420, и в ней хранится код 2А5Е (рис. 3.9).


Рис. 3.9.  Адресация слов и байтов.

При обращении к целому слову (с содержимым 2А5Е) процессор выставляет адрес 23420. При обращении к младшему байту этой ячейки (с содержимым ) процессор выставляет тот же самый адрес 23420, но использует команду, адресующую байт, а не слово. При обращении к старшему байту этой же ячейки (с содержимым ) процессор выставляет адрес 23421 и использует команду, адресующую байт. Следующая по порядку 16-разрядная ячейка памяти с содержимым 487F будет иметь адрес 23422, то есть опять же четный. Ее байты будут иметь адреса 23422 и 23423.

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

Регистры процессора

Как уже упоминалось, внутренние регистры процессора представляют собой сверхоперативную память небольшого размера, которая предназначена для временного хранения служебной информации или данных. Количество регистров в разных процессорах может быть от 6—8 до нескольких десятков. Регистры могут быть универсальными и специализированными. Специализированные регистры, которые присутствуют в большинстве процессоров, — это регистр-счетчик команд, , регистр указателя стека. Остальные регистры процессора могут быть как универсальными, так и специализированными.

В 16-разрядном процессоре MC68000 фирмы Motorola было 19 регистров: 16-разрядный регистр состояния, 32-разрядный регистр счетчика команд, 9 регистров адреса (32-разрядных) и 8 регистров данных (32-разрядных). Два регистра адреса отведены под указатели стека. Максимально допустимый объем адресуемой памяти — 16 Мбайт (внешняя шина адреса 24-разрядная). Все 8 регистров данных взаимозаменяемы. 7 регистров адреса – тоже взаимозаменяемы.

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

Процессор 8086 имеет 14 регистров разрядностью по 16 бит. Из них четыре регистра (AX, BX, CX, DX) — это регистры данных, каждый из которых помимо хранения операндов и результатов операций имеет еще и свое специфическое назначение:

  1.  регистр AX — умножение, деление, обмен с устройствами ввода/вывода (команды ввода и вывода);
  2.  регистр BX — базовый регистр в вычислениях адреса;
  3.  регистр CX — счетчик циклов;
  4.  регистр DX — определение адреса ввода/вывода.

Для регистров данных существует возможность раздельного использования обоих байтов (например, для регистра AX они имеют обозначения AL – младший байт и AH — старший байт).

Следующие четыре внутренних регистра процессора — это сегментные регистры, каждый из которых определяет положение одного из рабочих сегментов (рис. 3.10):

  1.  регистр CS (Code Segment) соответствует сегменту команд, исполняемых в данный момент;
  2.  регистр DS (Data Segment) соответствует сегменту данных, с которыми работает процессор;
  3.  регистр ES (Extra Segment) соответствует дополнительному сегменту данных;
  4.  регистр SS (Stack Segment) соответствует сегменту стека.


Рис. 3.10.  Сегменты команд, данных и стека в памяти.

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

Следующие пять регистров процессора (SP — Stack Pointer, BP — Base Pointer, SI — Source Index, DI — Destination Index, IP —Instruction Pointer) служат указателями (то есть определяют смещение в пределах сегмента). Например, счетчик команд процессора образуется парой регистров CS и IP, а указатель стека — парой регистров SP и SS. Регистры SI, DI используются в строковых операциях, то есть при последовательной обработке нескольких ячеек памяти одной командой.

Последний регистр FLAGS — это регистр состояния процессора (PSW). Из его 16 разрядов используются только девять (рис. 3.11): CF (Carry Flag) — флаг переноса при арифметических операциях, PF (Parity Flag) — флаг четности результата, AF (Auxiliary Flag) — флаг дополнительного переноса, ZF (Zero Flag) — флаг нулевого результата, SF (Sign Flag) — флаг знака (совпадает со старшим битом результата), TF (Trap Flag) — флаг пошагового режима (используется при отладке), IF (Interrupt-enable Flag) — флаг разрешения аппаратных прерываний, DF (Direction Flag) — флаг направления при строковых операциях, OF (Overflow Flag) — флаг переполнения.


Рис. 3.11.  Регистр состояния процессора 8086.

Биты регистра состояния устанавливаются или очищаются в зависимости от результата исполнения предыдущей команды и используются некоторыми командами процессора. Биты регистра состояния могут также устанавливаться и очищаться специальными командами процессора (о системе команд процессора будет рассказано в следующем разделе).

Во многих процессорах выделяется специальный регистр, называемый аккумулятором (то есть накопителем). При этом, как правило, только этот регистр-аккумулятор может участвовать во всех операциях, только через него может производиться взаимодействие с устройствами ввода/вывода. Иногда в него же помещается результат любой выполненной команды (в этом случае говорят даже об "аккумуляторной" архитектуре процессора). Например, в процессоре 8086 регистр данных АХ можно считать своеобразным аккумулятором, так как именно он обязательно участвует в командах умножения и деления, а также только через него можно пересылать данные в устройство ввода/вывода и из устройства ввода/вывода. Выделение специального регистра-аккумулятора упрощает структуру процессора и ускоряет пересылки кодов внутри процессора, но в некоторых случаях замедляет работу системы в целом, так как весь поток информации должен пройти через один регистр-аккумулятор. В случае, когда несколько регистров процессора полностью взаимозаменяемы, таких проблем не возникает

Система команд

 Каждый МП характеризуется прежде всего своей системой команд. Система команд - это полный перечень элементарных действий, которые способен выполнять МП.

Все операции, выполняемые в командах ЭВМ, принято делить на пять классов.

Арифметико-логические — команды, в которых выполняется собственно преобразование информации. К ним относятся арифметические операции сложение, вычитание, умножение и деление (с фиксированной и плавающей занятой), команды десятичной арифметики, логические операции конъюнкции, дизъюнкции, инверсии и др., сдвиги, преобразование чисел из одной системы счисления в другую

Пересылки и загрузки — обеспечивают передачу информации между процессором и памятью или между различными уровнями памяти (СОЗУ «-» ОЗУ). Разновидность — загрузка регистров и ячеек константами.

Ввода/вывода — обеспечивают передачу информации между процессором и внешними устройствами. По структуре они очень похожи на команды предыдущего класса. В некоторых ЭВМ принципиально отсутствует различие между ячейками памяти и регистрами внешних устройств (единое адресное пространство) и класс команд ввода/вывода не выделяется, все обмены осуществляются в рамках команд пересылки и загрузки.

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

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

  1.  переходы;
  2.  вызовы подпрограмм;
  3.  возвраты из подпрограмм.

Команды переходов помещают в программный счетчик содержимое своего адресного поля — адрес перехода. При этом старое значение программного счетчика теряется. В микроЭВМ часто для экономии длины адресного поля команд условных переходов адрес перехода формируется как сумма текущего значения программного счетчика и относительно короткого знакового смещения, размещаемого в команде. В крайнем случае, в командах условных переходов можно и вовсе обойтись без адресной части— при выполнении условия команда "перепрыгивает" через следующую команду, которой обычно является безусловный переход.

Команда вызова подпрограммы работает подобно команде безусловного перехода, но старое значение программного счетчика предварительно сохраняется в специальном регистре или в стеке. Команда возврата передает содержимое верхушки стека или специального регистра в программный счетчик. Команды вызова и возврата работают "в паре". Подпрограмма, вызываемая командой вызова, должна заканчиваться командой возврата, что обеспечивает по окончании работы подпрограммы передачу управления в точку вызова. Хранение адресов возврата в стеке обеспечивает возможность реализации вложенных подпрограмм. □ Системные— команды, выполняющие управление процессом обработки информации и внутренними ресурсами процессора. К таким командам относятся команды управления подсистемой прерывания, команды установки и изменения параметров защиты памяти, команда останова программы и некоторые другие. В простых процессорах класс системных команд немногочисленный, а в сложных мультипрограммных системах предусматривается большое число системных команд.

Команды управления микропроцессором

Классификация команд  современного МП приведена на рис ХХХХ

Рис ХХХХ.  Классификация команд МП

Пример системы команд МП i80x86


Пути повышения производительности МП

Увеличение быстродействия процессора

Одним из самых распространенных способов определения производительности процессора является оценка времени Т решения некоторой (тестовой) задачи. Очевидно,

(1)

где N — количество выполненных при решении задачи машинных команд; S — среднее количество тактов, приходящихся на выполнение одной команды; f —тактовая частота процессора.

Если длительности различных команд (в тактах) существенно отличаются друг от друга, то более точно можно оценить значение Т по выражению

(2)

где Sj — число тактов i-й команды.

Используются и более точные (и, соответственно, более сложные) методы оценки производительности , однако и из выражений (1), (2) видны пути увеличения производительности процессора:

  1.  Увеличение тактовой частоты (решения лежат в области технологии СБИС);
  2.  сокращение числа тактов, приходящихся на выполнение одной команды.
  3.  Сокращение длины программы (совершенствование технологии программирования, разработка оптимизирующих компиляторов);

Но все же на наш взгляд магистральным путем увеличения производительности ЭВМ можно считать параллелизм на различных уровнях.

Существуют две основные формы параллелизма   для :

  1.  параллелизм на уровне команд.
  2.  параллелизм на уровне процессов;

Во первом случае параллелизм реализуется в пределах отдельных команд.

Обычно стремятся совмещать во времени процедуры обращения к памяти и обработки информации, параллельно выполнять арифметические операции сразу над несколькими (или даже всеми) разрядами операндов, одновременно выполнять несколько последовательных команд программы (разумеется, на разных стадиях) и т. п.

Уже в младшей модели семейства х86 — микропроцессоре 8086 предусматривалась одновременная работа двух основных устройств — обработки данных(EU) и связи с магистралью (BIU). Подобный механизм (с модификациями) сохранился и в старших моделях семейства.

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

Во втором случае над одной задачей могут одновременно работать несколько процессоров или других устройств ЭВМ.

Далее мы кратко рассмотрим некоторые из перечисленных методов увеличения производительности процессора. Более подробную информацию по этим вопросам можно найти, например, в [11, 12]


Первый путь повышения производительности

Первый путь реализуется несколькими способами

1.-Повышение частоты.

Одним из факторов, влияющих на частотные свойства транзисторов, является технологическая норма использованного технологического процесса — минимальные размеры элементов, сформированных на пластине, и расстояния между ними. Чем они меньше, тем тоньше можно изготовить рабочие области транзистора, а значит, уменьшить время пролета электронов через них и увеличить рабочую частоту. Кроме того, в этом случае более короткими и прямыми становятся соединительные межэлементные проводники: как известно, с повышением рабочей частоты увеличивается влияние индуктивности соединительных проводников (определяемой их искривлением), которая совместно с межпроводниковой емкостью образует LC-цепи, дополнительно удлиняющие длительности фронта и среза проходящих через них импульсов. Эти импульсы управляют работой транзистора, а значит, могут дополнительно увеличивать длительности переключения, ухудшая рассмотренные выше характеристики. Таким образом, чем меньше индекс технологического процесса, тем на более высоких частотах может работать МП и тем выше его производительность.

2. Использование RISC-  архитектуры

Анализ  кода  программ,  генерируемого  компиляторами  языков высокого уровня, показал, что чаще всего используется только ограниченный набор простых команд форматов “регистр, регистр → регистр” и “регистр ↔ память”. Компиляторы не в состоянии эффективно использовать сложные команды. Это наблюдение способствовало формированию концепции процессоров с сокращенным набором команд, так называемых RISC-процессоров (RISC – Reduced Instruction Set Computer).

Дейв Паттерсон и Карло Секуин сформулировали 4 основных принципа построения RISC-процессоров:

1. Любая операция должна выполняться за один такт, вне зависимости от ее типа.

2. Система команд должна содержать минимальное количество наиболее  часто  используемых  простейших  инструкций  одинаковой длины.

3. Операции обработки данных реализуются только в формате “регистр  регистр” (операнды выбираются из оперативных регистров процессора, и результат операции записывается также в регистр, а обмен между оперативными регистрами и памятью выполняется только с помощью команд загрузки/записи).

4. Состав системы команд должен быть “удобен” для компиляции операторов языков высокого уровня.

Таким образом, RISC-процессоры компьютеров с сокращенным набором команд имеют команды обработки типа “регистр ← регистр, регистр” и команды сохранения (store) и загрузки (load) типа “память ← регистр” и “регистр ← память” соответственно. Функциональные преобразования могут выполняться только над содержимым регистров, а результат помещается только в регистр.

После обособления RISC-процессоров в отдельный класс процессоры с традиционными наборами команд стали называться “CISC-процессорами” (CISC – Complicated Instruction Set Computer) с полным набором команд. Как правило, в этих процессорах команды имеют много разных форматов и требуют для своего представления различное число байтов памяти. Это обусловливает определение типа команды в ходе ее дешифрации при исполнении, что усложняет устройство управления процессора и препятствует повышению тактовой частоты до уровня, достижимого в RISC-процессорах на той же элементной базе.

Микропроцессоры с классической CISC-архитектурой реализуют на уровне машинного языка комплексные наборы команд различной сложности (от простых, характерных для микропроцессора первого поколения, до сложных, характерных для 32-разрядных микропроцессоров типа 80486, 68040 и др.). Лидером в этой области является фирма Intel и ее клонмейкеры, микропроцессорами которой комплектуется более 80 % выпускаемых персональных компьютеров. Микропроцессоры семейства М68ххх фирмы Motorola использовались в персональных компьютерах типа Macintosh. Микропроцессоры этого семейства широко применяются также в устройствах управления, встраиваемых в различные приборы и системы: контрольно-измерительную и связную аппаратуру, лазерные принтеры и контроллеры дисководов, роботы и системы промышленной автоматики.

Микропроцессоры с RISC-архитектурой применяются, в основном, в рабочих станциях и мощных серверах. Широкое применение находят RISC-микропроцессоры семейств SPARC фирмы Sun Microsystems и RxOOO фирмы MIPS Computer Systems (с 1992 года является самостоятельным отделением Silicon Graphics). За последние годы очень активно внедряются в различную аппаратуру RISC-микропроцессоры семейства PowerPC – совместная разработка фирм IBM, Motorola и Apple Computers (альянс IMA). Процессоры PowerPC 7ХХ (G3), PowerPC 74ХХ (G4), PowerPC 970 (G5) являются основой построения персональных компьютеров iMac от фирмы Apple Computers. Среди фирм, выпускающих RISC-микропроцессоры, находятся также Intel, Hewlett-Packard, Digital Equipment. Необходимо также отметить транспьютеры – оригинальные RISC-микропроцессоры, разработанные фирмой Inmos для построения мультипроцессорных систем.

Развитие микропроцессоров происходит при постоянном стремлении сохранения преемственности программного обеспечения (ПО) и повышения производительности за счет совершенствования архитектуры и увеличения тактовой частоты. Сохранение преемственности ПО и повышение производительности, вообще говоря, противоречат друг другу. Так, например, процессоры с системой команд х86, относящиеся к классу CISC-процессоров вплоть до Pentium Pro, имели более низкие тактовые частоты по сравнению с микропроцессорами ведущих компаний производителей RISC-процессоров, изготавливаемых по одним и тем же технологическим нормам. Для этих процессоров существовали приложения, на которых производительность х86 микропроцессоров была значительно ниже, чем у RISC-процессоров, реализованных на той же элементной базе. Однако возможность использования совместимого программного обеспечения для различных поколений х86 процессоров обеспечивала им устойчивое доминирующее положение на рынке.

Затем на основе “пионерских” разработок компаний NexGen и AMD, позднее подхваченных компанией Intel, была реализована успешная попытка решения проблемы повышения производительности в рамках архитектуры х86. Эти компании, сохраняя преемственность по системе команд с CISC-микропроцессорами семейства х86, создали новые устройства с использованием элементов RISC-архитектуры. Первыми примерами такого подхода могут служить микропроцессоры Nx586 (NexGen), K5, К6 (AMD), использующие концепцию RISC-ядра. В микропроцессор встраивается аппаратный транслятор, превращающий команды х86 в команды внутреннего RISC-процессора. Компания Intel впервые использовала этот подход в своих микропроцессорах с архитектурой Р6.

Таким образом, современные микропрцессоры только имитируют работу  с CISC  командами  х86 микропроцессоров

В поисках способов достижения максимальной производительности разработчики микропроцессоров с RISC-архитектурой все чаще позволяют себе отходить от ее канонических принципов. В то же время в микропроцессорах CISC-архитектуры, яркими представителями которых является семейство х86, внедряются решения, наработанные при создании RISC-процессоров


  1.  Производительность МП также можно повысить, применяя различные способы организации его работы.

Одним из наиболее ранних было введение возможности работы МП не только в реальном, но и в защищенном (Protected Mode), а также в виртуальном режиме.

Реальным называется режим, при котором микропроцессором выполняется одна задача, при этом величина доступной ему оперативной памяти составляет до 1 Мбайт.

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

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


  1. Использование Саche

Еще одним способом ускорения работы МП является включение в его состав кэш-памяти (от слова «Сасhе» — «запас»). При работе МП периодически обращается к оперативной памяти, загружая данные из ее ячеек в свои регистры и перенося в память результаты вычислений. Такие операции — одни из наиболее продолжительных. Возникающие в них задержки связаны как с ограниченными скоростными характеристиками памяти и соединительной шины (которые значительно ниже, чем у МП), так и с необходимостью определения местонахождения требуемых ячеек. Для уменьшения потерь времени внутри МП размещают ячейки дополнительной памяти, называемые кэш-памятью первого уровня (L1). Они предназначены для подготовки данных и инструкций, используемых МП при выполнении команд, и заполняются заранее, в процессе выполнения предыдущих команд. Эти ячейки находятся в непосредственной близости от РОН и могут работать с тактовой частотой МП; их адреса сосредоточены в небольшом диапазоне, поэтому время обра щения МП к ним уменьшается, а скорость выполнения команд повышается. Использованные данные после выполнения команд продолжают сохраняться в кэш-памяти, поэтому при подготовке очередной команды сначала проверяется наличие в кэш-памяти требуемых данных. Если эти данные там имеются, то МП берет их оттуда, экономя время на доступ к ячейкам основной памяти. При отсутствии необходимых данных они помещаются в кэш-память взамен других, редко используемых. Так использование кэш-памяти позволяет ускорить доставку данных для работы МП, а значит, повысить его производительность. Как правило, размер кэш-памяти первого уровня составляет 16 кбайт, распределяемых поровну (по 8 кбайт) для хранения данных и команд.

Кроме кэш-памяти первого уровня (L1) в настоящее время компьютеры также оснащаются кэш-памятью второго уровня (-L2), а иногда — и третьего уровня (L3). Такая дополнительная кэш-память имеет больший объем (для второго уровня — от 512 кбайт до 1 Мбайт; для третьего — несколько Мбайт) и служит промежуточным звеном между L1 и оперативной памятью. Добавление в МП кэш-памяти обеспечивает возможность сохранения данных, однажды загруженных из оперативной памяти, в непосредственной близости от МП, пока в них существует необходимость. В кэш-памяти этих уровней используется, как правило, совместное хранение данных и команд, а между собой они соединяются с помощью высокоскоростных шин.

Построение кэш памяти МП

Рассмотрим подробнее принцип действия кэш-памяти. Кэш-память (или просто кэш, от англ. Cache — склад, тайник) предназначена для промежуточного хранения информации из системной памяти с целью ускорения доступа к ней. Ускорение достигается за счет использования более быстрой памяти и более быстрого доступа к ней. При этом в кэш-памяти хранится постоянно обновляемая копия некоторой области основной памяти.

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

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

В принципе кэш-память может быть как внутренней (входить в состав процессора), так и внешней. Внутренний кэш называется кэшем первого уровня, внешний — кэшем второго уровня. Объем внутреннего кэша обычно невелик — типовое значение до 128 Кбайт. Объем внешнего кэша может достигать нескольких мегабайт. Но принцип функционирования у них один и тот же.

Кэш первого уровня процессора 486 имеет четырехканальную структуру (рис.9). Каждый канал состоит из 128 строк по 16 байт в каждой. Одноименные строки всех четырех каналов образуют 128 наборов из четырех строк, каждый из которых обслуживает свои адреса памяти. Каждой строке соответствует 21-разрядная информация об адресе скопированного в нее блока системной памяти. Эта информация называется тегом (Tag) строки.

Рис. 9.  Структура внутреннего кэша процессора 486.

Кроме того, в состав кэша входит так называемый диспетчер, то есть область памяти с организацией 128 х 7, в которой хранятся 4-битные теги действительности (достоверности) для каждого из 128 наборов и 3-битные коды LRU (Least Recently Used) для каждого из 128 наборов. Тег действительности набора включает в себя 4 бита достоверности каждой из 4 строк, входящих в данный набор. Бит достоверности, установленный в единицу, говорит о том, что соответствующая строка заполнена; если он сброшен в нуль, то строка пуста. Биты LRU говорят о том, как давно было обращение к данному набору. Это нужно для того, чтобы обновлять наименее используемые наборы.

Адресация кэш-памяти осуществляется с помощью 28 разрядов адреса. Из них 7 младших разрядов выбирают один из 128 наборов, а 21 старший разряд сравнивается с тегами всех 4 строк выбранного набора. Если теги совпадают с разрядами адреса, то получается ситуация кэш-попадания, а если нет, то ситуация кэш-промаха.

В случае цикла чтения при кэш-попадании байт или слово читаются из кэш-памяти. При кэш-промахе происходит обновление (перезагрузка) одной из строк кэш-памяти.

В случае цикла записи при кэш-попадании производится запись как в кэш-память, так и в основную системную память. При кэш-промахе запись производится только в системную память, а обновление строки кэш-памяти не производится. Эта строка становится недостоверной (ее бит достоверности сбрасывается в нуль).

Такая политика записи называется сквозной или прямой записью (Write Through). В более поздних моделях процессоров применяется и обратная запись (Write Back), которая является более быстрой, так как требует гораздо меньшего числа обращений по внешней шине.

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

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

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

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

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

Режим пакетной передачи (Burst Mode), впервые появившийся в процессоре 486, предназначен для быстрых операций со строками кэша. Пакетный цикл обмена (Burst Cycle) отличается тем, что для пересылки всего пакета адрес по внешней шине адреса передается только один раз — в начале пакета, а затем в каждом следующем такте передаются только данные. Адрес для каждого следующего кода данных вычисляется из начального адреса по правилам, установленным как передатчиком данных, так и их приемником. Например, адрес каждого следующего слова данных вычисляется как инкрементированный адрес предыдущего. В результате время передачи одного слова данных значительно сокращается. Понятно, что обмен пакетными циклами возможен только с устройствами, изначально способными обслуживать такой цикл. Допустимая длина пакета не слишком велика, например, при чтении размер пакета ограничен одной строкой кэша.


  1.  Использовать Конвейер

Обычно стремятся совмещать во времени процедуры обращения к памяти и обработки информации, параллельно выполнять арифметические операции сразу над несколькими (или даже всеми) разрядами операндов, одновременно выполнять несколько последовательных команд программы (разумеется, на разных стадиях) и т. п.

Уже в младшей модели семейства х86 — микропроцессоре 8086 предусматривалась одновременная работа двух основных устройств — обработки данных и связи с магистралью. Подобный механизм (с модификациями) сохранился и в старших моделях семейства.

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

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

Рис. 1.4. Пример конвейерного выполнения команд

  

Шинный интерфейс инициирует выборку следующего командного слова автоматически, как только в очереди освободятся два байта. Как правило, в очереди находится минимум один байт потока команд, так что операционное устройство не ожидает выборки команды. Ясно, что опережающая выборка команд позволяет экономить время только при естественном порядке выполнения команд. Когда операционное устройство выполняет команду передачи управления (перехода) в программе, шинный интерфейс сбрасывает очередь, выбирает команду по новому адресу, передает ее в операционное устройство, а затем начинает заполнение (реинициализацию) очереди из следующих ячеек памяти. Эти действия предпринимаются в условных и безусловных переходах, вызовах подпрограмм, возвратах из подпрограмм и при обработке прерываний.

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

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

В этом случае вся последовательность исполнения команды разделяется на определенное количество стадий (например, на пять: выделение номеров ячеек оперативной или кэш-памяти, где хранятся код очередной команды и операнды; выборка и декодирование команды; перемещение операндов в РОН; выполнение операции в АЛУ; запись результата). Все эти стадии объединены в конвейер, в котором каждая из них выполняется автономно в своем блоке, освобождаемом после ее завершения и используемом для выполнения аналогичной стадии другой команды. Таким образом, на конвейере в различных этапах выполнения могут одновременно находиться пять различных команд. Если же количество стадий для разделения команд увеличить, то увеличится и количество одновременно выполняемых строк (каждый раз при переходе к очередной стадии на первую из них подается следующая очередная команда).

При линейной структуре программы, когда все команды выполняются по очереди, конвейерный режим пропорционально увеличивает количество одновременно выполняемых строк, повышая производительность работы МП. Кроме того, при увеличении количества стадий входящие в них операции разделяются на более мелкие, требующие для своего выполнения меньшего времени. Это позволяет уменьшить необходимую длительность машинного такта (в течение которого исполняется каждая из них), а значит, увеличить тактовую частоту работы МП и его производительность. Микропроцессоры, имеющие в своем составе конвейер, называются скалярными.

Важным элементом архитектуры, появившимся в МП i80486 фирмы Intel, стал конвейер – специальное устройство, реализующее такой метод обработки команд внутри микропроцессора, при котором исполнение команды разбивается на несколько этапов, i80486 имеет пятиступенчатый конвейер.

На рис. ХХХ  изображен конвейер из пяти блоков, которые называются ступенями:

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

Процесс обработки команды может быть разбит, например, на следующие шаги (стадии):

  1.  F — выборка (от англ. fetch) — чтение команды из памяти;
  2.  D — декодирование (от англ. decode) — декодирование команды;
  3.  А — формирование адресов (от англ. address generate) и выборка операндов;
  4.  Е— выполнение (от англ. execute)— выполнение заданной в команде операции;
  5.  W — запись (от англ. write) — сохранение результата по целевому адресу.

Конвейер содержит следующие ступени:

  1.  ступень предвыборки F (Fetch)  вызывает команду из памяти и помещает ее в буфер, где она хранится до тех пор, пока не потребуется;
  2.  ступень декодирования полей команды D (Decoder ); декодирует эту команду, определяя ее тип и тип ее операндов.
  3.  ступень формирование адресов и выборка операндов А (address generate), на которой производится вычисление абсолютного адреса операнда, если операнд расположен в памяти (определяет местонахождение операндов и вызывает их из регистров или из памяти).
  4.  на  четвертой ступени исполнения Е (Execution) производится выборка операндов из РОН или памяти и выполнение операции в АЛУ;
  5.  наконец, на  пятой ступени записи результата W (Write Back) производится передача полученного результата.

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

Рис. Схема конвейера команд.

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

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

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

Для реализации каждой из стадий командного цикла в процессоре предусмотрено соответствующее оборудование (регистры, дешифраторы, сумматоры, управляющие автоматы или их фрагменты), причем операционные элементы разных стадий обычно слабо пересекаются между собой. Поэтому когда очередная команда завершает действия на одной стадии, например F, и переходит на следующую— D, то оборудование стадии F "простаивает" и может быть использовано для чтения следующей команды. Таким образом, очередная команда может начинать выполнение, не дожидаясь окончания командного цикла предыдущей команды.

При рассмотрении пятистадийного командного цикла одновременно на разных стадиях может выполняться до пяти команд. Организация пятистадийного конвейера потребует дублирования некоторых операционных элементов на разных стадиях (например, регистра команд PC) и усложнение схемы управления, однако игра стоит свеч.

Очевидно, очередная команда может перейти с одной стадии командного цикла на другую при выполнении двух условий:

  1.  действия команды на текущей стадии завершены;
  2.  предыдущая команда освободила оборудование следующей стадии.

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

Для большинства процессоров т. н. CISC'-архитектуры (к ним относятся, в частности, процессоры семейства х86) такая идеальная ситуация складывается далеко не всегда.

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

В зависимости от заданного в команде способа адресации операндов время выполнения стадии А может быть существенно различным (сравните непосредственную адресацию и косвенно-автоинкрементную). Расположение адресуемых операндов (и размещение результата) в памяти разного уровня так же существенно влияет на время реализации стадии А (и стадии W).

Наконец, на стадии Е время выполнения операции зависит не только от типа операции (короткие— сложение, конъюнкция,..., длинные— умножение, деление), но даже иногда и от значений операндов.

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

Желание увеличить производительность конвейеров привело к появлению процессоров  т. н. RISC-архитектуры, из систем команд которых были исключены все факторы, тормозящие реализацию командного цикла — длинные команды, сложные способы адресации, размещение операндов в ОЗУ. К особенностям RISC-архитектуры можно отнести:

  1.  форматы всех команд имеют одинаковую длину, в крайнем случае, разнообразие длин форматов ограничивается двумя вариантами;
  2.  все операции выполняются за одинаковый промежуток времени (обычно I или 2 такта);
  3.  операнды всех арифметических и логических операций располагаются только в регистрах, к оперативной памяти обращаются только команды загрузки и сохранения;
  4.  сверхоперативная память представлена большим числом регистров (32—256).

Реализация этих особенностей, с одной стороны, позволяет приблизить работу конвейера к идеальной, с другой стороны — существенно ограничивает возможности системы команд процессора. Действительно, из системы операций исключаются "длинные" операции — умножение, деление, операции над числами с плавающей запятой и др. Исключаются сложные (и эффективные) способы адресации, например, автоиндексные. Это приводит к значительному увеличению длины программ, увеличению времени на выборку команд из памяти, при этом среднее число команд, выполняемых в единицу времени, в RISC-процессорах значительно больше, чем в CISC-процессорах.

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

В настоящее время понятия "RISC-" и "CISC-архитектура" скорее являю обозначением некоторых принципов проектирования, но не характеристиками конкретных процессоров. Современные процессоры, как правило, реализованы по "гибридному" принципу: содержат ядро RISC, которое выполняет простые и самые распространенные команды за один такт на стадию конвейера, а сложные команды интерпретируются как некая последовательность простых (на уровне микрокоманд). Пользователь же в этом случае имеет дело с системой команд привычной CISC-архитектуры, а внутренние вопросы peaлизации командного цикла его, как правило, не интересуют.

При реализации конвейеров возникает еще одна проблема, связанная с eго оптимальной загрузкой — команды условной передачи управления (в сред нем каждая 5—6-я команда программы). Действительно, когда такая команда передается со стадии F на стадию D, на стадию F надо ставить следующую  команду, но какую?

Условие перехода будет проверено лишь на стадии I тогда же определится адрес следующей команды. Здесь возможны два  пути решения:

  1.  приостановить загрузку конвейера до завершения командой перехода стадии Е;
  2.  загрузить конвейер "наугад" командой по одному из двух возможных адресов, а на стадии Е проверить правильность выбора и, если он оказала неверным — очистить весь конвейер и начать загрузку заново по правильному адресу.

Второй путь представляется предпочтительным, т. к. конвейер не останавли вается, и (в среднем) в половине случаев мы избежим потери времени на перезагрузку. Результаты работы конвейера будут еще лучше, если мы научимся правильно предсказывать адрес перехода, чтобы вероятность угадывания адреса приближалась к 1.

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

Проведенный выше анализ работы конвейера показывает, что продолжительность каждой из стадий неодинакова и наибольшее время занимает выполнение операций в АЛУ, в ожидании завершения которых остальные стадии простаивают.

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

Микропроцессоры, имеющие один конвейер, называются скалярными, а два и более – суперскалярными.

Процессоры четвертого поколения  (I80486) располагали единственным конвейером и назывались скалярными. Одновременно на ступень декодирования этого процессора может поступить только одна команда.

Микропроцессор Pentium имеет два конвейера, то есть использует суперскалярную архитектуру, и поэтому может выполнять две команды за машинный такт. Внутренняя структура конвейера такая же, как и у i486. Микропроцессоры семейства  Р6 (Pentium Pro/II/III) имеют другую структуру конвейера. Собственно, длина конвейера является одной из наиболее значимых характеристик любого процессора.

Для примера рассмотрим конвейер команд известного микропроцессора Pentium.

Процессоры Pentium первых версий содержали 32-разрядный регистровый файл РОН и 32-разрядную шину адреса. Внешняя шина данных 64-разрядна и образуется внутренним мультеплексированием шин данных процессора. Процессор поддерживает обращение до 4 Гбайт физического адресного пространства. Он содержит встроенный блок сопроцессора с плавающей точкой (FPU), блок управления и стабилизации напряжения питания (SMM, system management mode). Блок FPU доработан для выполнения операций с плавающей точкой за один такт синхронизации и располагает умножителем, делителем и сумматором. Блок SMM позволил CPU работать на пониженном напряжении питания 2,9 и 2,5В.  

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

В базовой модели Pentium задействована иная методика обработки команд. Он содержит два конвейера, называемых U-piре и V-pipe.

В первом из них (первичном) выполняются целочисленные операции и команды с плавающей точкой, а во вторичном — простые целочисленные операции и определенный тип команд с плавающей точкой. Процессы в этих двух конвейерах протекают независимо друг от друга одновременно с двумя инструкциями. Такие процессоры, содержащие несколько независимо работающих конвейеров, называются суперскалярными  (superscalar).

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

Однако возможность одновременной постановки на два разных конвейера пары последовательных команд программы ограничивается рядом условий. Очевидно, что нельзя ставить на разные конвейеры две последовательные команды, если вторая использует в качестве операнда результат работы первой или, во всяком случае, необходимо гарантировать, что к началу стадии выборки операндов второй команды первая (на другом конвейере) уже завершит стадию размещения результата. Существуют и другие ограничения, которые определяют т. н. условия "спаривания" последовательных команд (pairing), позволяющие размещать их одновременно на разных конвейерах.

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

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

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

Следующим шагом на пути увеличения производительности было решение, которое принято называть динамическим параллелизмом,

На одновременное выполнение двух команд наложены некоторые ограничения, связанные с комбинациями команд и взаимозависимостью результатов. Все команды, поступающие в конвейеры на обработку, должны покидать их точно в таком же порядке, в каком они на них и поступили. Такой метод обработки называется упорядоченным поступлением (in-order issue), обработкой и упорядоченным завершением (in-order completion). Если команда не может быть завершена в одном конвейере, то останавливается и другой, что несколько снижало эффективность работы процессора с точки зрения производительности.

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


Предсказание переходов

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

Существуют различные алгоритмы прогнозирования ветвления. Например, при выполнении алгоритмической структуры «цикл» возможны два варианта его завершения: повторное выполнение тела цикла либо выход из него. Первый вариант является более вероятным, так как цикличность обычно применяется при проведении большого числа однотипных операций. Следовательно, на конвейер можно заранее загрузить необходимые данные, чтобы выполнять очередные операции цикла без задержки. Если же окажется, что вместо очередного выполнения цикла необходимо выйти из него, то работа конвейера останавливается, он полностью очищается (удаляются все введенные в него данные и команды), и в конвейер помещаются новые значения в соответствии с требуемым адресом перехода. Поскольку повторное выполнение цикла осуществляется значительно чаще, чем выход из него, относительный проигрыш по времени из-за перезагрузки конвейера мало сказывается на общей производительности МП. Недостатком такого способа является первоначальный возврат в начало цикла при любых вычислениях по этому алгоритму.

В другом способе, называемом динамическим прогнозированием ветвлений, для дальнейшего предсказания пути продолжения выполнения программы все выполняемые переходы регистрируются в специальной таблице (ВТВ — Branch Target Buffer). В ней при каждом выполнении перехода запоминается команда перехода, его адрес и индикация, обеспечивающая либо повторение цикла, либо выход из него.

Рассмотрим работу индикатора, считая, что под него отводится два разряда. Предположим, что выполняется циклическая операция, управление в которой каждый раз передается на начало цикла; при этом в индикаторе записано значение 0 0. Если в результате очередного вычисления оказалось, что предсказание неправильно, и происходит выход из цикла, то в индикаторе появится запись 0 1. Сохранившийся «О» при этом показывает, что, несмотря на переход по новому адресу, в следующий раз при вычислении

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

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

Динамического выполнения команд (dynamic execution)

Суперскалярная архитектура процессора предполагает, что команды (на некотором ограниченном участке программы) могут выполняться не только в порядке их размещения в программе, но и по мере возможности их выполнения независимо от порядка следования. Возможность выполнения определяется,

  1.  во-первых, отсутствием зависимостей от ранее расположенных, но еще не завершенных команд,
  2.  во-вторых, наличием свободных ресурсов процессора, необходимых для выполнения команды.

Одним из первых микропроцессоров, реализующих механизм динамического параллелизма, был процессор Pentium Pro (Pentium II) фирмы Intel (рис. 7.15).

Основная отличительная черта микроархитектуры процессоров семейства P6 – использование алгоритмики динамического выполнения команд (dynamic execution), которая построена на основе трех базовых концепций:

  1.  предсказании переходов (branch prediction),
  2.  динамическом анализе потока данных (dynamic data flow analysis)
  3.  спекулятивном выполнении инструкций (speculative execution).

На кристалле процессора размещаются два блока кэш-памяти первого уровня, в одном из которых (кэш-С) размещается программа, а в другом (кэш-D) — данные.

Устройство выборки/декодирования выбирает очередную команду из кэш-С (в порядке их размещения в программе), при необходимости заменяет сложные команды на последовательность микрокоманд, снабжает каждую команду полем признаков (тегом) и помещает в специальным образом организованную память — пул команд.

Устройство диспетчирования постоянно анализирует, с одной стороны, содержимое пула команд и выявляет команды, готовые к выполнению на какой-нибудь стадии, с другой стороны — свободные в данный момент операционные устройства. При совпадении "желания" (команда завершила предыдущую стадию и готова к выполнению следующей) и "возможностей" (свободны соответствующие ресурсы) устройство диспетчирования отправляет команду на выполнение независимо от порядка поступления команд в пул. После завершения обработки на очередной стадии команда возвращается в пул с соответствующей пометкой в поле тега.

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

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

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

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

Микропроцессор Pentium Pro (professional) был анонсирован в 1995. Это процессор  и положил начало микропроцессорам шестого поколения Р6 (Pentium Pro, Pentium 2, Pentium 3,Celeron, Xeon) семейства Intel 8x86, которые имеют ряд отличий.

В процессорах семейства Р6 предпринята попытка приблизиться к RISC-технологии.  Сложная CISC-команда разбивается в процессоре на множество команд коротких форматов, напоминающих RISC-команды. Эти команды отправляются на выполнение каждая в своей очереди в конвейерах, которых в Р6 три. Таким образом, одновременно за такт синхронизации может обрабатываться не две команды (инструкции), как в классическом Pentium, а три..

После стадии обработки все составные части команды объединяются воедино и следуют на дальнейшее выполнение. Такие действия над командами называются динамическим выполнением dynamic execution. В отличие от классического Pentium, P6 выполняет инструкции с неупорядоченным завершением (out of order), глубина конвейера команд 12 ступеней.

В Р6 имеется динамический буфер предсказаний ветвлений и задействована система предположений возможных переходов между микропрограммами.

Введение новых команд

По мере развития компьютеров все больший объем в их работе занимает цифровая обработка мультимедийного (звукового и видео) материала. Его определенная структурированность позволила оптимизировать работу МП путем добавления специальных команд, упрощающих программирование и обработку этих данных. Используемая технология получила название SIMD — Single Instruction Multiple Data («одна инструкция для многих данных»), а применяющие ее МП обозначаются как ММХ — MultiMedia eXtention («мультимедийное расширение»). Первоначально в МП было введено 57 новых команд для обработки изображения и звука; в дальнейшем их количество увеличилось еще на 70 команд, совокупность которых получила название SSE — Streaming SIMD Extension («потоковое расширение инструкций SIMD»). Они позволили повысить качество воспроизведения потоковых (передаваемых в реальном масштабе времени) видео- и звуковых данных, улучшить полноэкранное воспроизведение видео и высококачественной графики, увеличить глубину цвета, обеспечить воспроизведение изображения со сложными эффектами визуализации и анимации, что повысило уровень реалистичности и интерактивности создаваемых программ. В последующих моделях процессоров количество таких команд продолжало увеличиваться: в SSE2 — на 144, а в SSE3 — еще на 13 команд, обеспечивающих дальнейшее повышение производительности работы МП с мультимедийными данными.

Несмотря на такую пестроту мультимедийных инструкций, все современные программы поддерживают вес варианты как от Intel, тик и от AMD.

Интересна эволюция внедрения инструкций SSE. например, на сайте корпорации Intel представлена картинка, которую можно привести в следующем виде:

SSE

1999 г.

70 инструкций

SSE1

2000 г.

144 инструкции

SSE2

2004 г.

13 инструкций

SSE3

2006 г.

32 инструкции

SSE4.I

2007 г.

47 инструкций

SSE4.2

2008 г.

7 инструкций

Среди структурных улучшений микроархитектуры Nechalem следует отметить новое расширение набора инструкций Intel AVX рядом новых аппаратных алгоритмов, позволяющих более чем в три раза ускорить процессы шифрования и дешифровки по протоколу AES.


Hyper-Threading (гиперпоточность).

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

Суперскалярные микропроцессоры и микропроцессоры с длинным командным словом имеют один счетчик команд и в силу этого могут быть названы однотредовыми. В этих микропроцессорах команды, исследуемые на предмет возможности их параллельного совместного исполнения, привязаны к счетчику команд процессора либо окном исполнения как в суперскалярных микропроцессорах, либо длинной командой как в микропроцессорах с длинным командным словом. Для того чтобы более агрессивно выбирать для параллельного исполнения команды одной или нескольких программ, в микропроцессор вводится несколько счетчиков команд. Микропроцессоры с несколькими счетчиками команд получили название мультитредовых. Уже появился первый мультитредовый микропроцессор фирмы Intel (старшие представители семейства Pentium 4 и процессоры Xeon). Мультитредовость в терминологии Intel получила название Hyper-Threading (гиперпоточность). Процессоры, в полной мере использующие все преимущества, предоставляемые мультитредовой архитектурой, разрабатываются фирмами IBM и SUN.

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

Технология Hyper-Threading помогает сократить периоды простоя процессора путем задействования ресурсов, не занятых одной задачей, исполнением инструкций другой задачи, например, в случае:

  1.  задержек при доступе к памяти;
  2.  выполнения последовательности взаимозависимых инструкций;
  3.  ошибок предсказания ветвлений;
  4.  одновременных вычислений в целочисленном и экспоненциальном форматах.

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


VLIW-архитектура

Всякий процессор в конечном счете должен быть сконструирован таким образом, чтобы за минимальное время выполнять максимальное количество инструкций. Именно количество выполняемых за единицу времени инструкций и определяет производительность процессора.

Эффективная загрузка параллельно функционирующих конвейеров обеспечивается:

  1.  либо аппаратурой процессора (аппаратура микропроцессоров ориентирована на выделение более простых форм параллелизма, в том числе естественного Суперскалярные процессоры способны за один тактовый цикл вызывать несколько команд. Число фактически вызываемых команд зависит как от конструкции процессора, так и от текущей ситуации. Аппаратные ограничения диктуют максимальное число одновременно вызываемых команд — обычно от двух до шести. К тому же, если для выполнения команды нужен недоступный функциональный блок или еще не полученный результат выполнения другой команды, такая команда не будет вызвана даже при наличии физической возможности
  2.  либо компилятором, на входе которого поступают программы на традиционном последовательном языке программирования, либо совместно аппаратурой и компилятором. В компиляторах используется особая техника извлечения параллелизма из последовательных программ.  VLIW. Те и другие уже упоминались в предыдущих главах, но сейчас этот материал нелишне повторить.

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

Второй подход, напротив, полностью открывает пользователю все возможности параллельной обработки. В специально отведенных полях команды каждому из параллельно работающих обрабатывающих устройств предписывается действие, которое устройство должно совершить. Такие процессоры называются процессорами с длинным командным словом (VLIW  Very Long Instruction Word). Предполагается, что существуют компиляторы с языков высокого уровня, которые готовят программы для загрузки их в микропроцессоры. Представители этой архитектуры: Crusoe от Transmeta, Itanium от Intel и российский Эльбрус 2000 (архитектура Е2К).

Для реализации динамического параллелизма в процессорах с традиционной  системой команд и способами компиляции программного кода требуется весьма сложные схемы организации пула, планировщики, схемы "откат" и др. Процессоры такой архитектуры имеют несколько операционных блоков различного, а иногда и одинакового назначения, которые могут работа параллельно, например, 1—2 блока вычисления адресов, 2—3 блока AJIY  для чисел с фиксированной запятой, блок обработки чисел с плавающей запятой,  блок размещения результата, блок предсказания переходов и др.

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

Один из путей дальнейшего повышения эффективности подобных ,:т лежит в области разработки специальных компиляторов, которые \ п.н.-ом i

вают несколько простых команд в "очень длинное командное слово" (VLIW — аббревиатура от Very Long Instruction Word) таким образом, чтобы в одной "очень длинной команде" можно было использовать все существующие в процессоре операционные блоки. В этом случае командное слово соответствует набору функциональных устройств.

VLIW-архитектуру можно рассматривать как статическую суперскалярную, поскольку распараллеливание кода производится на этапе компиляции, а не динамически во время исполнения, т. е. в машинном коде VLIW присутствует явный параллелизм.

Одним из примеров воплощения идей VL1W может служить предложенная Intel в содружестве с HP концепция 64-разрядной архитектуры микропроцессора IA-64 (Intel 64-bit Architecture, 64-разрядная архитектура Intel). Для ее обозначения использована аббревиатура EPIC (Explicitly Parallel Instruction Computing, вычисления с явным параллелизмом команд).

Процессор, разработанный на базе этой концепции, отличающийся следующими особенностями:

  1.  большое количество регистров: 128 регистров  по  64-разрядных общего назначения (целочисленных), плюс 128 регистров  по80-разрядных  для арифметики плавающей запятой, плюс 64 предикатных регистра по 1-разрядну каждый
  2.  масштабируемость архитектуры до большого количества функциональных устройств. Это свойство представители фирм Intel и HP называют "наследственно масштабируемым набором команд" (inherently scaleable instruction set);
  3.  явный параллелизм в машинном коде: поиск зависимостей между командами производит не процессор, а компилятор;
  4.  предикация (predication): команды из разных ветвей условного ветвления снабжаются предикатными полями (полями условий) и запускаются на выполнение параллельно;
  5.  загрузка по предположению (speculative loading): данные из медленной основной памяти загружаются заранее.

Формат команды IA-64 включает код операции, три 7-разрядных поля операндов — один  приемник и два  источника (операндами могут быть только регистры), особые поля для вещественной и целой арифметики, 6-разрядное предикатное поле.

Команды IA-64 упаковываются (группируются) компилятором в "связку" длиною в 128 разрядов. Связка содержит 3 команды и шаблон, в котором указаны зависимости между командами в связке (можно ли с командой к1, запустить параллельно к2, или же к2 должна выполниться только после k1), а также между другими связками (можно ли с командой к3 из связки с1 запустить параллельно команду к4 из связки с2 ).

Одна такая связка, состоящая из трех команд, соответствует набору из трех функциональных устройств процессора. Процессоры IA-64 могут содержать разное количество таких блоков, оставаясь при этом совместимыми по коду. Ведь благодаря тому, что в шаблоне указана зависимость и между связками, процессору с N одинаковыми блоками из трех функциональных устройств будет соответствовать командное слово из Nх3 команд (N связок). Таким образом, обеспечивается масштабируемость IА-64.

Предикация — способ обработки условных ветвлений. Суть этого способа — компилятор указывает, что обе ветви выполняются на процессоре параллельно. Если в исходной программе встречается условное ветвление, то команды из разных ветвей помечаются различными предикатными регистрами (команды имеют для этого предикатные поля), далее они выполняются совместно, но их результаты не записываются, пока значения предикатных регистров не определены. Когда, наконец, вычисляется значение условия ветвления, предикатный регистр, соответствующий "правильной" ветви, устанавливается в 1, а другой— в 0. Перед записью результатов процессор будет проверять предикатное поле и записывать результаты только тех команд, предикатное поле которых содержит предикатный регистр, установленный в 1.

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

Архитектура микропроцессора IA-64 реализует концепцию ЕРIC (Explicitly Parallel Instruction Computing – явное параллельное выполнение команд) и существенно отличается от архитектуры предыдущих, 32-разрядных микропроцессоров компании Intel.

Основными особенностями EPIC являются: большое количество регистров; масштабируемость по количеству функциональных устройств (возможность увеличения числа функциональных устройств в последующих моделях микропроцессора); явное задание параллелизма в машинном коде; предикатное исполнение инструкций; упреждающая загрузка данных по предположению.

Основные отличия архитектуры процессора IA-64 от архитектуры процессора х86 (IA-32) приведены ниже в табл. 2.

Таблица 2

Отличия архитектур процессоров х86 и IA-64

Процессор х86 (IA-32)

Процессор IA-64

Использование сложных инструкций переменной длины, обрабатываемых по одной

Использование простых инструкций, сгруппированных по три, одинаковой длины

Переупорядочивание и оптимизация инструкций во время выполнения

Переупорядочивание и оптимизация инструкций во время компиляции

Попытки предсказания переходов

Исполнение нескольких последовательностей команд одновременно без предсказания переходов

Загрузка данных из памяти по мере необходимости

Загрузка данных до того, как они потребуются

Архитектура IA-64 объединяет в себе лучшие качества суперскалярных микропроцессоров и микропроцессоров с длинным командным словом (VLIW-Very Long Instruction Words). Микропроцессор Itanium является первым представителем 64-разрядных микропроцессоров Intel. В микропроцессоре Itanium, как и в других микропроцессорах VLIW-архитектуры, последовательность команд и план загрузки исполнительных устройств формируются на этапе компиляции. В ходе выполнения программы последовательность команд не изменяется. В микропроцессоре используются: динамическое предсказание переходов, спекулятивное (по предположению) исполнение команд, аппаратная поддержка конвейерного выполнения циклов, отложенные операции обращения к памяти, предварительная загрузка данных в кэш.

Выводы

Основная особенность EPIC — распараллеливанием потока команд занимается компилятор, а не процессор.

Достоинства данного подхода:

  1.  упрощается архитектура процессора; вместо распараллеливающей логики на EPIC-процессоре можно разместить больше регистров, функционал!, ных устройств;
  2.  процессор не тратит время на анализ потока команд на предмет возможности их параллельного выполнения — эту работу уже выполнил компилятор;
  3.  возможности процессора по анализу программы во время выполнения ограничены сравнительно небольшим участком программы, тогда как компилятор способен произвести анализ по всей программе;
  4.  если некоторая программа должна запускаться многократно, выгоднее распараллелить ее один раз (при компиляции), а не каждый раз, когда она исполняется на процессоре.

Недостатки:

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

  1.  серьезно увеличивается сложность компиляторов. Значит, увеличится число ошибок в них, время компиляции;
  2.  еще более увеличивается сложность отладки, т. к. отлаживать придется оптимизированный параллельный код;
  3.  производительность EPIC будет всецело зависеть от качества компилятора;
  4.  проблематичным пока видится преемственность программного обеспечения при переходе на новые поколения микропроцессоров (скомпилированный код очень сильно "привязан" к конкретной архитектуре процессора).

Тем не менее, представители Intel и HP называют EPIC концепцией следующего поколения и противопоставляют ее CISC и RISC. По мнению Intel, традиционные архитектуры имеют фундаментальные свойства, ограничивающие производительность.

Производители RISC-процессоров не разделяют подобного пессимизма. Кстати, в 1980-х годах, когда возникла концепция RISC, прозвучало много заявлений, что концепция CISC устарела, имеет фундаментальные свойства, ограничивающие производительность. Но процессоры, причисляемые к CISC (например, семейство .г86), широко используются до сих пор, их производительность растет.

В действительности же, все эти аббревиатуры — CISC, RISC, VLIW, EPIC — обозначают только идеализированные концепции. Реальные современные микропроцессоры трудно подвести исключительно под какой-либо из перечисленных выше классов. Просто в наиболее совершенных современных


Промежуточные выводы!!!!!!

Итак, какими же способами добиться увеличения их быстродействия?

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

Наращивание ресурсов процессора -- например, наращивание объема кэша, добавление новых блоков (Execution Units).

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

Многопроцессорность. Установка нескольких CPU и распределение работы между ними часто оказываются достаточно эффективными. Но такой подход не очень дешев -- каждый дополнительный процессор увеличивает стоимость системы, да и дуальная материнская плата намного дороже обычной (не говоря уже о платах с поддержкой четырех и более CPU). Кроме того, далеко не все приложения получают от многопроцессорности выигрыш в производительности, достаточный для оправдания затрат.

Кроме "чистой" многопроцессорности, существует несколько "промежуточных" вариантов, позволяющих ускорить выполнение приложений:

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

Switch-on-Event Multithreading. Переключение задач при возникновении длительных пауз, например "непопаданий в кэш" (cache misses), большое число которых характерно для серверных приложений. В этом случае процесс, ожидающий загрузки данных из сравнительно медленной памяти в кэш, приостанавливается, высвобождая ресурсы CPU для других процессов. Однако Switch-on-Event Multithreading, как и Time-Slice Multithreading, не всегда позволяет достичь оптимального использования ресурсов процессора, -- в частности из-за ошибок в предсказании ветвлений, зависимости инструкций и т. д.

Simultaneous Multithreading. В этом случае программные потоки выполняются на одном процессоре "одновременно", т. е. без переключения между ними. Ресурсы CPU распределяются динамически, по принципу "не используешь -- отдай другому". Именно такой подход положен в основу технологии Intel Hyper-Threading.

Chip Multiprocessing (CMP) – два и более процессорных ядра физически располагаются на одном кристалле, используя общий или раздельный кэш. Естественно, размер кристалла получается достаточно большим, и на стоимости это не может не сказаться. Заметим, что несколько таких "сдвоенных" CPU также могут работать в многопроцессорной системе.

К рассмотрению  многопроцессорности мы и переходим.


Переход к чистой многопроцессорности и многоядерности

Попробуем ответить на вопрос: зачем понадобилось умножать количество процессоров в системе, и какого эффекта, в том числе долгосрочного, следует ожидать от нового витка эволюции ПК?

Прошедших годы можно назвать революционными на рынке микропроцессоров архитектуры х86. В результате того, что основные производители (Intel и AMD) столкнулись со значительными трудностями на пути увеличения тактовых частот как процессорных ядер, так и шин передачи данных, а пользователи и разработчики программного обеспечения по-прежнему требовали увеличения мощности систем, пришлось искать другие выходы из сложившегося положения.

Наиболее перспективным решением стало увеличение количества ядер микропроцессора. Следует сказать, что подобная идея впервые пришла на ум «голубому гиганту» (IBM) еще в далеком 1999 году, когда он представил опытный образец двухъядерного Power4, а в 2001 году совместно с Apple уже вовсю торговал готовыми решениями.

Производители процессоров для платформы х86 спустя год после этого события (2002) заявили о своих намерениях развивать многоядерную архитектуру микропроцессоров. Стремясь подтвердить свой статус лидера отрасли, компания Intel первой выпустила подобный чип в марте 2005 года. Ее главный конкурент, AMD, отстав всего на три дня, представил полную линейку серверных двухъядер-ных процессоров Opteron, анонсировал двухъядерные процессоры Athlon 64 Х2 для настольных систем и начал поставки Opteron 8хх.

Два вычислительных ядра в одном процессора – это значимый этап развития программно-аппаратной архитектуры ПК. Ранее принцип симметричной многопроцессорной обработки (SMP) применялся лишь в рабочих станциях и серверах.

Представленные летом 2006 года х86-процессоры Intel с новой микроархитектурой  Intel Сore впервые за последние годы резко опередили процессоры AMD по производительности, обладая при этом более низким энергопотреблением.

Основные вехи в истории создания двухъядерных процессоров таковы:

1999 год – анонс первого двухъядерного процессора в мире (IBM Power4 для серверов)

2001 год – начало продаж двухъядерного IBM Power4

2002 год – почти одновременно AMD и Intel объявляют о перспективах создания своих двухъядерных процессоров

2002 год – выход процессоров Intel Xeon и Intel Pentium 4 с технологией Hyper-Threading, обеспечивающей виртуальную двухпроцессорность на одном кристалле

2004 год – свой двухъядерный процессор выпустила Sun (UltraSPARC IV)

2004 год – IBM выпустила второе поколение своих двухъядерных процессоров (IBM Power5). Каждое процессорное ядро Power5 поддерживает аналог технологии Hyper-Threading

2005 год, 18 марта – Intel выпустила первый в мире двухъядерный процессор архитектуры x86

2005 год, 21 марта – AMD анонсировала полную линейку серверных двухъядерных процессоров Opteron, анонсировала десктопные двухъядерные процессоры Athlon 64 X2 и начала поставки двухъядерных Opteron 8xx

2005 год, 20-25 мая – AMD начинает поставки двухядерных Opteron 2xx

2005 год, 26 мая – Intel выпускает двухъядерные Pentium D для массовых ПК

2005 год, 31 мая – AMD начинает поставки Athlon 64 X2

2006-й год в процессорной отрасли, по-видимому, так навсегда и останется «годом, в который вышел  Conroe»-Меrоm-

Апофеозом противостояния двух ведущих компаний  Intel b AMD стал момент выхода на рынок продуктов Intel Core 2. Это событие датируется 27 июля 2006 года, что не только изменило расстановку сил на рынке, но и коренным образом повлияло на критерии оценки производительности.

Параллелизм можно вводить на разных уровнях.

На самом низком уровне он может быть реализован в процессоре за счет конвейеризации и суперскалярной архитектуры с несколькими функциональными блоками.

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

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

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

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

Когда два процессора или обрабатывающих элемента находятся рядом и обмениваются большими объемами данных с небольшими задержками, они называются сильно связанными (tightly coupled). Соответственно, когда два процессора или обрабатывающих элемента располагаются далеко друг от друга и обмениваются небольшими объемами данных с большими задержками, они называются слабо связанными (loosely coupled). Примерный спектр рассматриваемых тем иллюстрирует рис. 8.1.

Параллелизм на уровне команд в определенной степени помогает, но конвейеры и суперскалярная архитектура обычно повышают скорость работы всего лишь в 5-10 раз. Чтобы увеличить производительность в 50, 100 и более раз, нужно создавать компьютеры с несколькими процессорами. Ознакомимся с устройством таких компьютеров.

Мультипроцессоры

Система из нескольких параллельных процессоров, имеющих общую память, называется мультипроцессором. Поскольку каждый процессор может записывать информацию в любую часть памяти и считывать информацию из любой части памяти, чтобы не допустить каких-либо нестыковок, их работа должна согласовываться программным обеспечением. В ситуации, когда два или несколько процессоров имеют возможность тесного взаимодействия, а именно так происходит в случае с мультипроцессорами, эти процессоры называют сильно связанными (tightly coupled).

Возможны разные способы воплощения этой идеи. Самый простой из них — соединение единственной шиной нескольких процессоров и общей памяти. Схема такого мультипроцессора показана на рис. Х а. Подобные системы производят многие компании.

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

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

 

Структура ЭВМ с разделяемой (а) и индивидуальной (б) памятью.

Здесь:  П – процессор, ИП - индивидуальная память.

Мультикомпьютеры

Мультипроцессоры с небольшим числом процессоров (< 256) разрабатывать достаточно просто, а вот создание больших мультипроцессоров представляет определенные трудности. Сложность заключается в том, чтобы связать все процессоры с общей памятью. Поэтому многие разработчики просто отказались от идеи разделения памяти и стали создавать системы без общей памяти, состоящие из большого числа взаимосвязанных компьютеров, у каждого из которых имеется собственная память. Такие системы называются мультикомпьютерами. В них процессоры являются слабо связанными, в противоположность сильно связанным процессорам в мультипроцессорных системах.

Процессоры мультикомпьютера отправляют друг другу сообщения (это несколько похоже на электронную почту, но гораздо быстрее). Каждый компьютер не обязательно соединять со всеми другими, поэтому обычно в качестве топологий используются двух- и трехмерные решетки, а также деревья и кольца. Хотя на пути до места назначения сообщения проходят через один или несколько промежуточных компьютеров, время передачи занимает всего несколько микросекунд. Уже работают мультикомпьютеры, содержащие до 10000 процессоров.

Поскольку мультипроцессоры легче программировать, а мультикомпьютеры — конструировать, появилась идея создания гибридных систем, сочетающих в себе достоинства обеих топологий. Такие компьютеры представляют иллюзию общей памяти, при этом в действительности она не существует. Мы рассмотрим мультипроцессоры и мультикомпьютеры подробнее в следующих лекциях





1.  Характеристика здания
2. тематичних наук Суми 2000 Дисертацією є рукопис
3. реферату- Африка Опис материкаРозділ- Географія Африка
4. Потребители и предприниматели Права потребителей и организация их защиты
5. Средняя общеобразовательная школа 49 план ~ конспект праздника Земля
6. Разработка системы теплоснабжени
7. РЕФЕРАТ РАНЫ ЛИЦА Группа 644
8. Пресноводный родственник артемии
9. Мезоэкономические проблемы российской экономики
10. за обманчивых речей отрицающих Атмана изза ложных примеров и доводовБлуждает мир не постигая разницы меж
11. Понятие о морфемике
12. Принципы охраны воздушного пространства
13. Рынок и закон спроса
14. 1. Элементарные преобразования матрицы Элементарными преобразованиями матрицы являются- 1
15. Волны, фотоны, кванты
16. записка 3 Организационнометодические указания 4 Содержа
17. . Первые универсальные языки Обратимся к истокам развития вычислительной техники.
18. Реферат- Храм Грааля в романе Альбрехта фон Шарфенберга «Младший Титурель»- готическая реализация кельтского мотива
19. тема не приняла духовную программу учителей и ушла с планеты земля
20. ЛЕКЦИЯ 35 Гражданство РФ