Вы находитесь на странице: 1из 323

1

ФИНАНСОВЫЙ УНИВЕРСИТЕТ
ПРИ ПРАВИТЕЛЬСТВЕ РФ

Кафедра “Информатика и программирования”

Синицын И.В.

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


систем» , «Архитектура компьютеров » для студентов, обучающихся по
направлению 230700.62 «Прикладная информатика»

Москва
2016
УДК 681.306
2
ББК 32.073

Т34

Синицын И.В.

Т34 Курс лекций по дисциплинам «Организация вычислительных систем»


и «Архитектура компьютеров» для студентов, обучающихся по
направлению 230700.62 «Прикладная информатика»

В курсе раскрываются архитектура и организация вычислительных


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

УДК 681.306

ББК 32.073

Т34

© Финансовый университет при


правительстве РФ

© Синицын Иван Васильевич

Оглавление
3
Способы организации и типы вычислительных систем…………………4
Классификация вычислительных систем………………………………..16
Вычислительные системы класса MIMD………………………………..27
Архитектурные принципы организации обработки данных…………...37
Внутренние связи в вычислительных системах………………………...45
Классификация внутренних связей вычислительных систем………….53
Распределенная обработка данных………………………………………60
Алгоритмы согласования распределенных систем……………………..72
Основы метрической теории вычислительных систем………………....79
Методы и средства измерений и оценки функционирования ВС……...89
Концепция оценки производительности вычислительных систем…….97
Процессоры ЭВМ………………………………………………………...106
Проблемно – ориентированные процессоры ЭВМ.……………………125
Арифметические расширители. Сопроцессоры………………………..135
Состояние системы, процесса, программы……………………………..141
Запоминающие устройства ЭВМ………………………………………..152
Работа АЗУ………………………………………………………………..172
Устройства управления ЭВМ……………………………………………178
Определение понятия "архитектура"……………………………………189
Конвейерная обработка…………………………………………………..203
Классификация конфликтов по данным………………………………...219
Компьютерные сети……………………………………………………....275
Многоуровневое взаимодействие в ИВС……………………………….279
Топология сетей …………………………………………………………290
Стек коммуникационных протоколов ТСР/IP………………………….300
Протоколы TCP и IP……………………………………………………...302
Организация процесса передачи данных……………………………......309
Методы доступа к сети ЛВС……………………………………………..312
Архитектура современных ЛВС…………………………………………314

Лекция 1

Способы организации и типы вычислительных систем

Вопросы:
4
1. Определение понятия архитектура вычислительных систем
2. Фон-неймановская архитектура

3. Архитектура процессоров вычислительных систем

При рассмотрении данного вопроса следует первоначально определить


понятия вычислительная машина (ВМ) и вычислительная система (ВС).
Существуют различные подходы. Так, согласно одному из них [7], к ВС
относятся вычислительные средства, имеющие в своем составе
специализированные аппаратные модули и/или специализированное
программное обеспечение.
Воспользуемся наиболее общими из существующих определений [5], в
основе которых лежит различие между ВМ и ВС по признаку
множественности вычислительных модулей и, соответственно, параллельной
обработки.
Вычислительная машина – комплекс технических и программных средств,
предназначенный для автоматизации подготовки и решения задач
пользователей.
Вычислительная система – совокупность взаимосвязанных и
взаимодействующих процессоров или вычислительных машин,
периферийного оборудования и программного обеспечения, предназначенная
для подготовки и решения задач пользователя.
Таким образом, основной отличительной чертой вычислительных систем
является наличие в них средств, реализующих параллельную обработку за
счет построения параллельных ветвей в вычислениях, что не
предусматривается классической структурой вычислительной машины.
Очевидно, что различия между ВМ и ВС не могут быть точно определены.
Так, современные вычислительные машины с одним процессором обладают
развитыми средствами распараллеливания вычислительного процесса
(например, средствами параллельного выполнения итераций вложенных
циклов).
5
С другой стороны, вычислительные системы могут состоять из
традиционных ВМ и процессоров.
Принято разделять понятия архитектуры вычислительных систем и
архитектуры вычислительных машин.
Под архитектурой вычислительных машин, как правило, понимается
логическое построение ВМ, то есть то, какой представляется машина
программисту, разрабатывающему программу на машинноориентированном
языке. Это определение архитектуры в “узком” смысле. Оно охватывает
следующее: перечень и формат команд, формы представления данных,
механизмы ввода-вывода, способы адресации памяти, назначение и состав
регистров общего назначения, а также других адресуемых регистров. Однако
при таком подходе из рассмотрения выпадают такие важные вопросы как
состав устройств, сложность процессора, емкость памяти, тактовая частота.
Круг этих вопросов принято определять понятием организация или
структурная организация.
Более часто применительно к ВМ используется понятие архитектуры в
“широком“ смысле или просто архитектуры, объединяющее в себе как
архитектуру в “узком” смысле, так и организацию ВМ.
Термин “архитектура” применительно к вычислительным системам
дополнительно включает в себя вопросы выделения составляющих ВС
(иерархии ВС), распределения функций между ними и определение
взаимодействия между составляющими.

1.2. Фон-неймановская архитектура

Устройство
Для современных ВМ исходной является концепция Дж. фон Неймана,
управления
согласно которой определяется автономно работающая универсальная
машина, объединяющая устройство управления, двоичное арифметическое
устройство, память, устройства Арифметико-
Устройство
ввода и вывода (рис. 1.1).
Устройство

ввода логическое вывода

устройство

Память
6

Рис. 1.1. Структура фон-неймановской вычислительной машины

Вычисления осуществляются последовательно под централизованным


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

1.3. Архитектура процессоров вычислительных систем

1.3.1. Конвейеризация вычислений


7
Рассмотрим использование конвейерной обработки на примере конвейера
команд. Как известно, цикл выполнения команды представляет собой
последовательность этапов. Возложив реализацию каждого из них на
самостоятельное устройство и последовательно соединив такие устройства,
можно получить классическую схему конвейера команд.
Выделим в цикле выполнения команд шесть этапов.
Выборка команды (ВК). Чтение очередной команды из памяти и
занесение ее в регистр команды.
Декодирование (ДК). Определение кода операции и способов адресации
операндов.
Вычисление адресов операндов (ВА). Вычисление исполнительных
адресов операндов в соответствии с указанным в команде способом их
адресации.
Выборка операндов (ВО). Извлечение операндов из памяти. Эта
операция не нужна для операндов, находящихся в регистрах.
Исполнение команды (ИК). Исполнение указанной операции.
Запись результата (ЗР). Занесение результата в память.

Пусть команды выполняются на конвейерной системе с шестью


ступенями, соответствующими шести этапам цикла команды.
Предполагается, что каждая команда обязательно проходит все шесть
ступеней, все этапы имеют одинаковую длительность, равную одной единице
времени, и могут выполняться одновременно. Тогда выполнение девяти
команд заняло бы 9  6 = 54 единицы времени, А использование конвейера
позволяет снизить это время до 14 единиц.
На практике в силу возникающих в конвейере конфликтных ситуаций
достичь предельно возможной производительности не удается.
Конфликтные ситуации в конвейере обусловлены следующими причинами:
попыткой нескольких команд одновременно обратиться к одному и тому же
ресурсу (структурный риск);
8
взаимосвязью команд по данным (риск по данным);
неоднозначностью при выборке следующей команды в случае команд
перехода (риск по управлению).
Суперконвейерные процессоры. Эффективность конвейера находится в
прямой зависимости от того, с какой частотой на его вход подаются объекты
обработки. Добиться n-кратного увеличения темпа работы конвейера можно
двумя путями:
разбиением каждой ступени конвейера на n «подступеней» при
одновременном повышении тактовой частоты внутри конвейера также в n
раз;
включением в состав процессора n конвейеров, работающих с
перекрытием.
В сущности, суперконвейеризация сводится к увеличению количества
ступеней конвейера как за счет добавления новых ступеней, так и путем
дробления имеющихся ступеней на несколько простых подступеней. Главное
требование — возможность реализации операции в каждой подступени
наиболее простыми техническими средствами, а значит, с минимальными
затратами. Вторым, не менее важным, условием является одинаковость
задержки на всех подступенях.
Критерием для причисления процессора к суперконвейерным служит число
ступеней в конвейере команд. К суперконвейерным относят процессоры, где
таких ступеней больше шести. Первым серийным суперконвейерным
процессором считается MIPS R4000, конвейер команд которого включает в
себя восемь ступеней.

1.3.2. Архитектуры с полным и сокращенным набором команд

Современная технология программирования ориентирована на языки


высокого уровня (ЯВУ), главная задача которых — облегчить процесс
написания программ. Операции, характерные для ЯВУ, отличаются от
операций, реализуемых машинными командами. Эта проблема получила
9
название семантического разрыва и ведет она к недостаточно эффективному
выполнению программ. Пытаясь преодолеть семантический разрыв,
разработчики ВМ расширяют систему команд, дополняя ее командами,
реализующими сложные операторы ЯВУ на аппаратурном уровне, вводят
дополнительные виды адресации и т. п. Вычислительные машины, где
реализованы эти средства, принято называть ВМ с полным набором команд
(CISC — Complex Instruction Set Computer). К типу CISC можно отнести
значительную часть ВМ, выпускаемых в настоящее время.
Характерные для CISC способы решения проблемы семантического разрыва,
вместе с тем ведут к усложнению архитектуры ВМ, главным образом
устройства управления, что, в свою очередь, негативно сказывается на
производительности в целом. Кроме того, в CISC очень сложно организовать
эффективный конвейер команд, который является одним из наиболее
перспективных путей повышения производительности ВМ. Анализ
программы, получаемые после компиляции с ЯВУ, позволил обнаружить
следующие закономерности.
Реализация сложных команд, эквивалентных операторам ЯВУ, требует
увеличения емкости управляющей памяти в микропрограммном устройстве
управления. Микропрограммы сложных команд могут занимать до 60%
управляющей памяти, в то время, как их доля в общем объеме программы
зачастую не превышает 0,2%.
В откомпилированной программе операторы ЯВУ реализуются в виде
процедур (подпрограмм), поэтому на операции вызова процедуры и возврата
из нее приходится от 15 до 45% вычислительной нагрузки.
При вызове процедуры вызывающая программа передает этой
процедуре некоторое количество аргументов. Выяснилось, что в 98% случаев
число передаваемых аргументов не превышает шести. Примерно такое же
положение сложилось с параметрами, которые процедура возвращает
вызывающей программе. Более 80% переменных, используемых программой,
10
являются локальными, то есть создаются при входе в процедуру и
уничтожаются при выходе из нее.
Почти половину операций в ходе вычислений составляет операция
присваивания, сводящаяся к данных между регистрами и памятью.
Детальный анализ результатов исследований привел к пересмотру
традиционных архитектурных решений, следствием чего стало появление
архитектуры с сокращенным набором команд (RISC – Reduced Instruction
Set Computer).
Главные усилия в архитектуре RISC направлены на построение
эффективного конвейера команд, то есть такого конвейера, в котором все
команды извлекаются из памяти и поступают в ЦП на обработку в виде
равномерного потока. При этом ни одна команда не должна находиться в
состоянии ожидания, а ЦП должен оставаться загруженным на протяжении
всего времени. Кроме того, идеальным считается вариант, при котором
любой этап цикла команды выполняется в течение одного тактового периода.
Последнее условие относительно просто можно реализовать для этапа
выборки. Необходимо лишь, чтобы все команды имели стандартную длину,
равную ширине шины данных, соединяющей ЦП и память. Унификация
времени исполнения для различных команд — значительно более сложная
задача, поскольку наряду с регистровыми командами существуют также
команды с обращением к памяти.
Помимо одинаковой длины команд, важно иметь относительно подсистему
декодирования и управления: сложное устройство управления (УУ) будет
вносить дополнительные задержки в формирование сигналов управления.
Очевидный путь существенного упрощения УУ — сокращение числа
выполняемых команд, форматов команд и данных, а также видов адресации.
В сокращенном списке команд должны оставаться те, которые используются
наиболее часто. Исследования показали, что 80-90% времени выполнения
типовых программ приходится на относительно малую часть команд (10-
20%).
11
К наиболее часто используемым действиям относятся пересылка данных,
арифметические и логические операции. Основная причина, препятствующая
сведению всех этапов цикла команды к одному тактовому периоду -
потенциальная необходимость доступа к памяти для выборки операндов
и/или записи результатов. Следует максимально сократить число команд,
имеющих доступ к памяти. Это положение отображается в следующих двух
принципах, которые должны быть добавлены к описанию архитектуры RISC:
доступ к памяти во время исполнения осуществляется только командами
“Чтение“ и “Запись”;
все операции, кроме “Чтение“ и “Запись”, имеют тип “регистр- регистр“.
Для упрощения выполнения большинства команд и приведения их к типу
“регистр- регистр“ требуется снабдить ЦП значительным числом регистров
общего назначения. Большое число регистров в регистровом файле ЦП
позволяет обеспечить временное хранение промежуточных результатов,
используемых как операнды в последующих операциях, и ведет к
уменьшению числа обращений к памяти, ускоряя выполнение операций.
Минимальное число регистров, равное 32, принято как стандарт де-факто
большинством производителей RISC-компьютеров.
Концепция RISC-компьютера сводится к следующим положениям.
Выполнение всех (или, по крайней мере, 75% команд) за один цикл.
Стандартная однословная длина всех команд, равная естественной длине
слова и ширине шины данных и допускающая унифицированную поточную
обработку всех команд.
Малое количество команд (не более 128).
Малое количество форматов команд (не более 4).
Малое число способов адресации (не более 4).
Доступ к памяти только посредством команд “Чтение“ и “Запись”
Все команды, за исключением команд “Чтение“ и “Запись”, используют
внутрипроцессорные межрегистровые пересылки.
Устройство управления с “жесткой” логикой.
12
Большой ( не менее 32, до 500 и более) процессорный файл регистров общего
назначения.
Сравнивая достоинства и недостатки CISC и RISC, невозможно сделать
однозначный вывод о неоспоримом преимуществе одной архитектуры над
другой.
Достоинствами RISC-архитектуры являются:
сравнительно простая структура устройства управления, которое занимает в
RISC II не более 10% площади кристалла. При этом остается больше места
для других узлов ЦП и для дополнительных устройств: кэш-памяти, блока
арифметики с плавающей точкой, части основной памяти, блока управления
памятью, портов ввода/вывода.
высокое быстродействие, связанное с унификацией набора команд,
ориентацией на потоковую конвейерную обработку, унификацией размера
команд и длительности их выполнения.
К недостаткам RISC-архитектуры следует отнести:
принципиальный недостаток — сокращенное число команд: на выполнение
ряда функций приходится тратить несколько команд вместо одной в CISC.
Это удлиняет код программы, увеличивает загрузку памяти и трафик команд
между памятью и ЦП. Исследования показывают, что RISC-программа в
среднем на 30% длиннее CISC-программы, реализующей те же функции;
хотя большое число регистров дает существенные преимущества, само по
себе оно усложняет схему декодирования номера регистра, тем самым
увеличивается время доступа к регистрам;
устройство управления с «жесткой» логикой, реализованное в большинстве
RISC-систем, менее гибко, более склонно к ошибкам, затрудняет поиск и
исправление ошибок, уступает устройству управления с «гибкой» логикой
при выполнении сложных команд.

1.3.3. Суперскалярные процессоры


13
Поскольку возможности по совершенствованию элементной базы уже
практически исчерпаны, дальнейшее повышение производительности ВМ
лежит в плоскости архитектурных решений. Как уже отмечалось, один из
наиболее эффективных подходов в этом плане — введение в
вычислительный процесс различных уровней параллелизма. Ранее
рассмотренный конвейер команд — типичный пример такого подхода. Тем
же целям служат и арифметические конвейеры, где конвейеризации
подвергается процесс выполнения арифметических операций.
Дополнительный уровень параллелизма реализуется в векторных и
матричных процессорах, но только при обработке многокомпонентных
операндов типа векторов и массивов. Здесь высокое быстродействие
достигается за счет одновременной обработки всех компонентов вектора или
массива, однако подобные операнды характерны лишь для достаточно узкого
круга решаемых задач. Основной объем вычислительной нагрузки обычно
приходится на скалярные вычисления, то есть на обработку одиночных
операндов, таких, например, как целые числа. Для подобных вычислений
дополнительный параллелизм реализуется значительно сложнее, но, тем не
менее, возможен и примером могут служить суперскалярные процессоры.
Суперскалярным называется центральный процессор (ЦП), который
одновременно выполняет более чем одну скалярную команду. Это
достигается за счет включения в состав ЦП нескольких самостоятельных
функциональных (исполнительных) блоков, каждый из которых отвечает за
свой класс операций и может присутствовать в процессоре в нескольких
экземплярах. Так, в микропроцессоре Pentium III блоки целочисленной
арифметики и операций с плавающей точкой дублированы, а в
микропроцессорах Pentium 4 и Athlon — троированы. Структура типичного
суперскалярного процессора включает в себя шесть блоков (рис. 1.2.):
выборки команд, декодирования команд, диспетчеризации команд,
распределения команд по функциональным модулям, блок исполнения и
блок обновления состояния.
14
Блок выборки команд извлекает команды из основной памяти через кэш-
память команд. Этот блок хранит несколько значений счетчика команд и
обрабатывает команды условного перехода.
Блок декодирования расшифровывает код операции, содержащийся в
извлеченных из кэш-памяти командах. В некоторых суперскалярных
процессорах, например, в микропроцессорах фирмы Intel, блоки выборки и
декодирования совмещены.
Блоки диспетчеризации и распределения взаимодействуют между собой и
реализуют в суперскалярном процессоре управление трафиком. В обоих
блоках находятся очереди декодированных команд.
Очередь блока распределения часто рассредоточивается по нескольким
самостоятельным буферам (накопителям команд), предназначенным для
хранения команд, которые уже декодированы, но еще не выполнены. Каждый
такой накопитель связан со своим функциональным модулем (ФМ), поэтому
число накопителей обычно равно числу ФМ. Если в процессоре используется
несколько однотипных ФМ, то им придается один общий накопитель. Блок
Блок выборки
распределения в каждом цикле своей работы проверяет каждую команду в
команд
своих очередях на наличие всех необходимых для ее выполнения операндов
и после этого начинает выполнение команд в соответствующем
Блок декодирования
функциональном модуле. команд
Блок диспетчеризации кроме очереди команд хранит также список
свободных функциональных модулей, который используется для
Блок диспетчеризации
отслеживания состояния очереди распределения.
команд Такое отслеживание
состоит в извлечении блоком диспетчеризации команд из очереди и
считывании из памяти или регистров операндов этих команд. Далее, в
Блок распределения
зависимости от состояния спискакоманд по функциональных модулей,
свободных
функциональным модулям
команды и значения операндов могут быть помещены в очередь
распределения.
Блок исполнения команд

Блок обновления
состояния
15

Рис. 1.2. Организация параллельного выполнения команд


в суперскалярном процессоре

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


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

Классификация вычислительных систем

Вопросы:

1. Классификация вычислительных систем по Флинну

2. Вычислительные системы класса SIMD

Наиболее перспективным и динамичным направлением увеличения скорости


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

Память Команды
УУ
команд

Память Данные а)
АЛУ
данных

Память Команды УУ
Команды УУ
команд
Команды
Команды УУ б)

Память
Данные АЛУ АЛУ АЛУ
Команды
данных
17

Память Команды
УУ
команд
Данные
Память АЛУ

данных
Данные
АЛУ в)

Данные
АЛУ

Память Команды УУ
Команды УУ
команд г)
Команды УУ

Данные
Память АЛУ
Данные
данных АЛУ
Данные
АЛУ

Рис. 1.3. Классификация вычислительных систем по Флинну: а - SISD; б -


MISD; в - SIMD; г - MIMD

Основной вопрос - что заложить в основу классификации- может решаться


по-разному, в зависимости от того, на решение какой задачи данная
классификация направлена. Так, часто используемое разделение
компьютеров на персональные ЭВМ, рабочие станции, мини-ЭВМ, большие
универсальные ЭВМ, минисупер-ЭВМ и супер-ЭВМ, позволяет примерно
оценить стоимость компьютера.
Общепринятой является классическая систематика Флинна.
18
Классификация базируется на понятии потока, под которым понимается
последовательность команд или данных, обрабатываемая процессором. На
основе числа потоков команд и потоков данных Флинн выделяет четыре
класса архитектур: SISD,MISD,SIMD,MIMD (рис. 1.3).
SISD (single instruction stream / single data stream) - одиночный поток команд
и одиночный поток данных. К этому классу относятся, прежде всего,
классические последовательные машины или, иначе, машины фон-
неймановского типа. В таких машинах есть только один поток команд, все
команды обрабатываются последовательно друг за другом и каждая команда
инициирует одну операцию с одним потоком данных.
Увеличение скорости вычислений в системах достигается следующим
образом.
1. Совмещением во времени различных этапов решения различных
задач, при котором в системе одновременно работают различные
устройства: ввода, вывода и собственно обработки информации.
2. Введением конвейера команд.
3. Использованием конвейера арифметических и логических операций,
в котором команды разбиваются на некоторое число микроопераций,
образуя, таким образом, несколько потоков микрокоманд.
MISD (multiple instruction stream / single data stream) - множественный
поток команд и одиночный поток данных. Определение подразумевает
наличие в архитектуре многих процессоров, обрабатывающих один и тот же
поток данных. Однако не существует такого класса задач, в которых одна и
та же последовательность данных подвергалась бы обработке по нескольким
разным программам. По этой причине в чистом виде такая схема до
настоящего времени не реализована.
SIMD (single instruction stream / multiple data stream) - одиночный поток
команд и множественный поток данных. В архитектурах подобного рода
сохраняется один поток команд, включающий векторные команды. Это
позволяет выполнять одну арифметическую операцию сразу над многими
19
данными - элементами вектора. Способ выполнения векторных операций не
оговаривается, поэтому обработка элементов вектора может производиться
либо процессорной матрицей, либо с помощью конвейера.
MIMD (multiple instruction stream / multiple data stream) - множественный
поток команд и множественный поток данных. Этот класс предполагает, что
в вычислительной системе есть несколько устройств обработки команд,
объединенных в единый комплекс и работающих каждое со своим потоком
команд и данных.
Укажем типичных представителей каждого из этих классов.
В SISD, как уже отмечалось, входят однопроцессорные последовательные
компьютеры типа VAX 11/780. Однако, следует отметить, что в этот класс
можно включить и векторно-конвейерные машины, если рассматривать
вектор как одно неделимое данное для соответствующей команды. В таком
случае в этот класс попадут и такие системы, как CRAY-1, CYBER 205,
машины семейства FACOM VP и многие другие.
Представителями класса SIMD считаются матрицы процессоров: ILLIAC IV,
ICL DAP, Goodyear Aerospace MPP, Connection Machine 1. В таких системах
единое управляющее устройство контролирует множество процессорных
элементов. Каждый процессорный элемент получает от устройства
управления в каждый фиксированный момент времени одинаковую команду
и выполняет ее над своими локальными данными. В этот же класс можно
включить классические процессорные матрицы и векторно-конвейерные
машины, например, CRAY-1. В этом случае каждый элемент вектора надо
рассматривать как отдельный элемент потока данных.
Класс MIMD чрезвычайно широк, поскольку включает в себя всевозможные
мультипроцессорные системы: Cm*, C.mmp, Denelcor HEP, BBN Butterfly,
Intel Paragon, CRAY T3D и многие другие. Интересно то, что если
конвейерную обработку рассматривать как выполнение множества команд
(операций ступеней конвейера) не над одиночным векторным потоком
данных, а над множественным скалярным потоком, то все рассмотренные
20
выше векторно-конвейерные компьютеры можно расположить и в данном
классе.
Предложенная схема классификации является наиболее применяемой при
начальной характеристике той или иной вычислительной системы, она
позволяет определить базовый принцип ее работы.
Однако такой классификации присущи некоторые недостатки. В частности,
некоторые архитектуры, например dataflow и векторно-конвейерные
машины, четко не вписываются в данную классификацию.
Другой недостаток - это чрезмерная заполненность класса MIMD.
Необходимо средство, более избирательно систематизирующее архитектуры,
которые по Флинну попадают в один класс, но совершенно различны по
числу процессоров, природе и топологии связи между ними, по способу
организации памяти и, конечно же, по технологии программирования.
Недостатком можно считать также наличие пустого класса (MISD).
Интересно упомянуть о принципиально ином направлении в развитии
компьютерных архитектур - машинах потоков данных. В машинах потоков
данных могут одновременно выполняться сразу много команд, для которых
готовы операнды. Некоторые элементы этого подхода нашли свое отражение
в современных суперскалярных микропроцессорах, имеющих много
параллельно работающих функциональных устройств и буфер команд,
ожидающих готовности операндов. В качестве примеров таких
микропроцессоров можно привести HP РА-8000 и Intel Pentium Pro.
Укажем на другую возможную классификацию вычислительных систем.
Рассмотрим в качестве примера компьютер Advanced Scientific Computer
фирмы Texas Instruments (TI ASC). В основном режиме он работает с 64-х
разрядным словом, причем все разряды обрабатываются параллельно.
Арифметико-логическое устройство имеет четыре одновременно
работающих конвейера, содержащих по восемь ступеней. Такая организация
дает 4x8=32 бита в каждом битовом слое, и, значит, компьютер TI ASC
может быть представлен в виде (64,32).
21
На основе введенных понятий все вычислительные системы в зависимости от
способа обработки информации, заложенного в их архитектуру, можно
разделить на четыре класса.
Разрядно-последовательные пословно-последовательные (n=m=1). В каждый
момент времени такие компьютеры обрабатывают только один двоичный
разряд. Представителем данного класса служит давняя система MINIMA с
естественным описанием (1,1).
Разрядно-параллельные пословно-последовательные (n > 1 , m = 1).
Большинство классических последовательных компьютеров, принадлежит к
данному классу: IBM 701 с описанием (36,1), PDP-11 (16,1), IBM 360/50 и
VAX 11/780 - с описанием (32,1).
Разрядно-последовательные пословно-параллельные (n = 1 , m > 1). Как
правило, вычислительные системы данного класса состоят из большого числа
одноразрядных процессорных элементов, каждый из которых может
независимо от остальных обрабатывать свои данные. Типичными примерами
служат STARAN (1, 256) и MPP (1,16384) фирмы Goodyear Aerospace,
прототип известной системы ILLIAC IV компьютер SOLOMON (1, 1024) и
ICL DAP (1, 4096).
Разрядно-параллельные пословно-параллельные (n > 1, m > 1). Большая часть
существующих параллельных вычислительных систем, обрабатывая
одновременно mn двоичных разрядов, принадлежит именно к этому классу:
ILLIAC IV (64, 64), TI ASC (64, 32), C.mmp (16, 16), CDC 6600 (60, 10), BBN
Butterfly GP1000 (32, 256).
Недостатки предложенной классификации достаточно очевидны и связаны со
способом вычисления ширины битового слоя m.
По существу, не обозначается никакого различия между совершенно
разными вычислительными системами (процессорными матрицами,
векторно-конвейерными и многопроцессорными системами).
Не определяется важное обстоятельство - за счет чего компьютер может
одновременно обрабатывать более одного слова: множественности
22
функциональных устройств, реализации в них конвейеров или же какого-то
числа независимых процессоров. Если в системе N независимых процессоров
имеют каждый по F конвейерных функциональных устройств с длиной
конвейера L, то для вычисления ширины битового слоя надо просто найти
произведение данных характеристик.
Однако достоинством такой классификации является введение единой
числовой метрики для всех типов вычислительных систем, которая вместе с
другими характеристиками позволяет сравнить любые две системы между
собой.

2.2. Вычислительные системы класса SIMD

SIMD-системы были первыми вычислительными системами, состоящими из


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

2.2.1. Векторные и векторно-конвейерные вычислительные системы.

Хотя производительность ВС общего назначения неуклонно возрастает,


по-прежнему остаются задачи, требующие существенно большей
вычислительной мощности. К таким, прежде всего, следует отнести задачи
23
моделирования реальных процессов и объектов, для которых характерна
обработка больших регулярных массивов чисел в форме с плавающей
запятой. Указанные массивы представляются матрицами и векторами, а
алгоритмы их обработки описываются в терминах матричных операций. Как
известно, основные матричные операции сводятся к однотипным действиям
над парами элементов исходных матриц, которые чаще всего можно
производить параллельно.
В универсальных ВС, ориентированных на скалярные операции,
обработка матриц выполняется поэлементно и последовательно. При
большой размерности массивов последовательная обработка элементов
матриц занимает слишком много времени, что и приводит к
неэффективности универсальных ВС для рассматриваемого класса задач. Для
обработки массивов требуются вычислительные средства, позволяющие с
помощью единой команды производить действие сразу над всеми
элементами массивов — средства векторной обработки.
Под вектором понимается одномерный массив однотипных данных
(обычно в форме с плавающей точкой), регулярным образом расположенный
в памяти вычислительной системы.
Если обработке подвергаются многомерные массивы, их также
рассматривают как векторы.
Векторный процессор – процессор, в котором операндами некоторых команд
могут выступать упорядоченные массивы данных – векторы.
Векторный процессор может быть реализован в двух вариантах. В
первом он представляет собой дополнительный блок к универсальной
вычислительной машине (системе). Во втором – векторный процессор
является как основой самостоятельной ВС.
Наиболее распространенными подходами к архитектуре средств
векторной обработки являются:
конвейерное АЛУ;
массив АЛУ;
24
массив процессорных элементов (матричная ВС).
Понятие векторного процессора имеет отношение к первым двум
подходам, которые представлены на рис. 1.4.

АЛУ
Конвейерное АЛУ
Данные Результаты Данные Результаты
АЛУ

АЛУ

Память Память

а) б)
Рис. 1.4. Варианты векторной обработки: а – конвейерное АЛУ; б – массив
АЛУ

В варианте с конвейерным АЛУ предполагается, что операции над


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

1.5.2. Матричные вычислительные системы.

Назначение матричных вычислительных систем во многом схоже с


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

Контроллер массива Интерфейс

процессоров ввода/

вывода
Шина Шина
широковещатель-
результата ной рассылки

Массив

процессоров

Рис. 1.5. Структура матричной вычислительной системы

Именно характер связей между ПЭ и определяет разные свойства


системы. Ранее уже отмечалось, что подобная схема применима и для
векторных вычислений.
Между матричными и векторными системами есть существенная
разница. Матричный процессор интегрирует множество идентичных
функциональных блоков (ФБ), логически объединенных в матрицу и
работающих в SIMD-стиле.
Не столь существенно, как конструктивно реализована матрица
процессорных элементов — на едином кристалле или на нескольких. Важен
сам принцип — ФБ логически скомпонованы в матрицу и работают
синхронно, то есть присутствует только один поток команд для всех блоков.
26
Векторный процессор имеет встроенные команды для обработки
векторов данных, что позволяет эффективно загрузить конвейер из
функциональных блоков. В свою очередь, векторные процессоры проще
использовать, потому что команды для обработки векторов — это более
удобная для человека модель программирования, чем SIMD.
Структура матричной вычислительной системы приведена на рис. 1.5.
Массив процессоров (МПр) производит параллельную обработку
множественных элементов данных. Единый поток команд, управляющий
обработкой данных в массиве процессоров, генерируется контроллером
массива процессоров (КМП). КМП выполняет последовательный
программный код, реализует операции условного и безусловного перехода,
транслирует в МПр команды, данные и сигналы управления. Команды
выполняются процессорами в режиме жесткой синхронизации. Сигналы
управления используются для синхронизации команд и пересылок, а также
для управления процессом вычислений. Команды, данные и сигналы
управления передаются из КМП в массив процессоров по шине
широковещательной рассылки. Поскольку выполнение операций условного
перехода зависит от результатов вычислений, результаты обработки данных
в массиве процессоров транслируются из КМП по шине результата.
Массив процессоров помимо множества процессоров должен включать
в себя множество модулей памяти. Кроме того, в массиве должна быть
реализована сеть взаимосвязей, как между процессорами, так и между
процессорами и модулями памяти. Таким образом, под термином массив
процессоров понимается блок, состоящий из процессоров, модулей памяти и
сети соединений.
В матричных SIMD-системах распространение получили
распространение два основных типа архитектурной организации массива
процессорных элементов.
В первом варианте “процессорный элемент-процессорный элемент“
(“ПЭ-ПЭ“) все процессорные элементы (ПЭ) связаны между собой сетью
27
соединений. Каждый ПЭ – это процессор с локальной памятью.
Процессорные элементы выполняют команды, получаемые из КМП по шине
широковещательной рассылки, и обрабатывают данные как хранящиеся в их
локальной памяти, так и поступающие из КМП. Для трансляции результатов
из отдельных ПЭ в КМП служит шина результата.
Второй вид архитектуры - “процессор-память“. В этом случае
двунаправленная сеть соединений связывает множество процессоров с
множеством модулей памяти. Процессоры управляются через шину
широковещательной рассылки. Обмен данными между процессорами
осуществляется как через сеть, так и через модули памяти.
В качестве процессорных элементов в большинстве матричных SIMD-
систем применяются простые RISC-процессоры с локальной памятью
ограниченной емкости.
Сведения о систолических вычислительных системах и
вычислительных системах с командными словами сверхбольшой длины
содержатся в [16].

Лекция 3

Вычислительные системы класса MIMD

Вопросы:

1. Симметричные мультипроцессорные системы


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

3. Системы с массовой параллельной обработкой

4. Кластерные вычислительные системы 

MIMD-системы обладают большой гибкостью. Они могут функционировать


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

3.1. Симметричные мультипроцессорные системы

Симметричные мультипроцессорные системы (SMP - Symmetric Multi-


Processing) можно определить как вычислительные системы, обладающие
следующими характеристиками:
имеются два или более процессоров сопоставимой производительности;
процессоры совместно используют основную память и работают в едином
виртуальном и физическом пространстве;
все процессоры связаны между собой посредством шины или по иной схеме
так, что время доступа к памяти любого из них одинаково;
все процессоры разделяют доступ к устройствам ввода/вывода либо через
одни и те же каналы, либо через разные каналы, обеспечивающие доступ к
одному и тому же внешнему устройству;
все процессоры способны выполнять одинаковые функции;
любой из процессоров может обслуживать внешние прерывания;
вычислительная система управляется интегрированной операционной
системой, которая организует и координирует взаимодействие между
29
процессорами и программами на уровне заданий, задач, файлов и элементов
данных.
SMP-системы называются симметричными именно в связи с
функциональной одинаковости составляющих ее ПЭ. Однако на время
загрузки один из процессоров получает статус ведущего.
Применение SMP-систем целесообразно в тех случаях, когда решаемая
задача может быть разделена на подзадачи, которые могли быть реализованы
параллельно.
На рис.1.6 в общем виде представлена организация симметричной
мультипроцессорной системы.
Типовая SMP-система содержит от двух до 32 идентичных процессоров. Это
могут быть CISC- или RISC-процессоры.
Каждый процессор снабжен локальной кэш-памятью.
Все процессоры ВС имеют равноправный доступ к разделяемым основной
памяти и устройствам ввода/вывода. Такая возможность обеспечивается
коммуникационной системой.
Обычно процессоры взаимодействуют между собой через основную память
(область общих данных). В некоторых SMP-системах предусматривается
также прямой обмен сигналами между процессорами.
Память системы обычно строится по модульному принципу и организована
так, что допускает одновременное обращение к ее модулям.

Процессор Процессор

Кэш-память Кэш-память

Коммуникационная система

Основная память Система ввода/вывода


30

Рис.1.6. Организация симметричной мультипроцессорной системы

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


основной памяти, в SMP-системах обязательно должен быть механизм
обеспечения когерентности данных. Когерентность данных означает, что в
любой момент времени для каждого элемента данных в любом модуле
памяти существует только одно его значение, несмотря на возможное
одновременное существование несколько копий этого элемента данных,
расположенных в разных видах памяти и обрабатываемых разными
процессорами. В современных SMP-системах когерентность данных
обеспечивается аппаратными средствами.
Механизм когерентности является критичным для эффективной
параллельной работы SMP-системы и должен иметь малое время задержки.
Типичные SMP-системы в качестве аппаратной реализации механизма
поддержки когерентности используют шину слежения (snoopy bus).
Для того чтобы данные в кэш-памяти всех процессоров оставались
когерентными, каждый процессор отслеживает передачу данных по шине,
осуществляя поиск тех операций считывания и записи между другими
процессорами и основной памятью, которые влияют на содержимое его
собственной кэш-памяти. Если процессор "В" запрашивает ту часть основной
памяти, которая обрабатывается процессором "А", то процессор "А"
перехватывает этот запрос и помещает свои значения области памяти на
шину, где "В" их считывает. Когда процессор "А" записывает измененное
значение обратно из своей кэш-памяти в основную память, то все другие
процессоры “видят” как эта запись проходит по шине и удаляют устаревшие
данные из своей кэш-памяти.
Недостатком данной архитектуры является необходимость организации
канала процессоры - память с очень высокой пропускной способностью.
31
Важным аспектом архитектуры SMP-систем является способ взаимодействия
процессоров с общими ресурсами (памятью и системой ввода-вывода). С
этих позиций можно выделить следующие виды архитектуры этих систем
16:
с общей шиной и временным разделением;
с коммутатором в виде многошинной перекрестной структуры;
с многопортовой памятью;
с централизованным управлением.

3.2. Системы с неоднородным доступом к памяти

Системы с неоднородным доступом к памяти (NUMA - non uniform memory


access) состоят (рис. 1.7) из однородных базовых узлов (плат), содержащих
небольшое число процессоров с модулями двухуровневой кэш-памяти (L1 и
L2), блок основной памяти, локальную шину. Модули объединены с
помощью высокоскоростного коммутатора. Поддерживается единое адресное
пространство, аппаратно поддерживается доступ к удаленной памяти, т.е. к
памяти других модулей. При этом доступ к локальной памяти в несколько
раз быстрее, чем к удаленной.
В случае, если аппаратно поддерживается когерентность кэшей во всей
системе (обычно это так), говорят об архитекту-
ре cc-NUMA (cache-coherent NUMA) – кэш-когерентным доступом к
неоднородной памяти. Обычно вся система работает под управлением
единой ОС, как в SMP-системах. Но возможны также варианты
динамического "подразделения" системы, когда отдельные "разделы"
системы работают под управлением разных ОС (например, Windows NT и
UNIX в NUMA-Q 2000).
Поддержание единого адресного пространства выражается в том, что каждая
ячейка любой локальной основной памяти имеет уникальный системный
адрес. Когда процессор инициирует доступ к памяти и нужная ячейка не
32
представлена в его локальной кэш-памяти, то кэш-память второго уровня
(L2) этого процессора организует операцию выборки.

Процессор Процессор Процессор Процессор

Кэш-память Кэш-память Кэш-память Кэш-память

Основная память Интерфейс в/вывода Основная память Интерфейс в/вывода

Процессор Процессор Коммуникационная система

Кэш-память Кэш-память

Основная память Интерфейс в/вывода

Рис.1.7. Организация системы с неоднородным доступом


к памяти

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


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

3.3. Системы с массовой параллельной обработкой

Системы с массовой параллельной обработкой (МРР - Massively Parallel


Processing) состоят (рис. 1.8) из нескольких однородных вычислительных
узлов, включающих один или несколько процессоров, локальную для
каждого узла память, коммуникационный процессор или сетевой адаптер.
Узлы объединяются через высокоскоростную сеть или коммутатор.
Основной признак МРР-систем – количество входящих в них процессоров,
которое может быть от десятков до нескольких тысяч (так, вычислительная
система Intel Paragon содержит 6768 процессоров).
Главными особенностями МРР-систем являются:
стандартные микропроцессоры;
физически распределенная память;
сеть соединений с высокой пропускной способностью и малыми задержками;
хорошая масштабируемость;
асинхронность работы узлов при использовании пересылки сообщений;
реализация программы в виде множества процессов, имеющих отдельные
адресные пространства;
наличие единственного управляющего устройства (процессора), который
формирует очередь заданий, распределяет их между множеством
подчиненных ему устройств, контролирует ход выполнения заданий и работу
подчиненных процессоров. Можно считать, что на центральном процессоре
выполняется ядро операционной системы (планировщик заданий), а на
подчиненных ему – приложения. Подчиненность между процессорами может
быть реализована как на аппаратном, так и программном уровне.
Взаимосвязи между узлами (и между копиями ОС, принадлежащими
каждому узлу) не требуют аппаратно поддерживаемой когерентности, так как
каждый узел имеет собственную ОС и, следовательно, свое уникальное
34
адресное пространство физической памяти. Когерентность реализуется
программными средствами, с использованием техники передачи сообщений.
Кэш-память Кэш-память

Память Процессор Процессор Память

Сетевой адаптер Сетевой адаптер

Сеть обмена сообщениями

Сетевой адаптер Сетевой адаптер

Память Процессор Процессор Память

Кэш-память Кэш-память

Рис.1.8. Структура вычислительной системы с массовой


параллельной обработкой

Задержки, которые присущие программной поддержке когерентности на


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

3.4. Кластерные вычислительные системы 

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


вычислительных систем (узлов), работающих совместно и составляющих
единый вычислительный ресурс.
Кластер состоит из двух или более узлов, удовлетворяющих следующим
требованиям:
каждый узел работает со своей копией ОС;
каждый узел работает со своей копией приложения;
узлы делят общий пул других ресурсов, таких как накопители на дисках.
В качестве узла кластера может выступать как однопроцессорная ВМ, так и
ВС типа SMP или MPP. Важно лишь то, что каждый узел в состоянии
функционировать самостоятельно и отдельно от кластера. В плане
36
архитектуры суть кластерных вычислений сводится к объединению
нескольких узлов высокоскоростной сетью.
Узлы кластеров могут содержать как одинаковые ВС (гомогенные
кластеры), так и разные (гетерогенные кластеры). По своей архитектуре
кластерная ВС является слабо связанной системой.
Кластер на уровне аппаратного обеспечения представляет собой
совокупность независимых вычислительных систем, объединенных сетью.
При соединении машин в кластер почти всегда поддерживаются прямые
межмашинные связи. Эти связи могут быть простыми, основывающимися на
одной из стандартных сетевых технологий (например, Ethernet), или
сложными, на основе высокоскоростных сетей с пропускной способностью в
сотни мегабитов в секунду.
Узлы кластера контролируют работоспособность друг друга и обмениваются
с этой целью специальными сигналами. Эти сигналы, передаваемые между
узлами, являются подтверждениями их нормального функционирования.
Важное значение для функционирования кластера имеет
специализированное программное обеспечение, на которое возлагается
задача бесперебойной работы при отказе одного или нескольких узлов.
Такое программное обеспечение производит перераспределение
вычислительной нагрузки при отказе одного или нескольких узлов в
кластере, восстановление вычислений при сбое в узле, а также поддерживает
единую файловую систему при наличии совместно используемых дисков.

Лекция 4
Архитектурные принципы организации обработки данных
Вопросы:
1. Поток управления
2. Поток данных
3. Поток запросов
37

Существуют три основных архитектурных принципа организации обработки


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

4.1. Поток управления

Для изложения сути упомянутых выше принципов и их сравнения


используем в качестве простого примера оператор
а = (b+l)(b-с), пусть b = 4, с = 2.
В программах на базе потока управления этот оператор задается сериями
команд, каждая из которых определяет операцию над одним или более
операндами, указанными за ней в записи команды и представляющими собой
литералы или же переменные в ячейках памяти (рис. 2.1). Например,
двуместная операция + в указанном выше операторе оперирует тремя
операндами, из которых два первых b и 1 являются входными данными, а
третий операнд t1 - результатом, отсылаемым в ячейку памяти, общей для
команд и данных. Эта память с хранимыми данными обеспечивает их
38
рассылку командам. Каждое обращение к памяти показано сплошной
стрелкой. Штриховыми стрелками показаны потоки управления.
Используется префиксная запись, согласно которой, например, ( - bс )
означает ( b - с ). Поток управления определяет последовательность команд,
выполняемых одна за одной. Как только управление передается некоторой
команде, дешифрируется ее код операции, выбираются по заданным адресам
входные операнды, осуществляется исполнение операции, результат
отсылается в память, а управление передается следующей в
последовательности команде или команде, определенной условным или
безусловным переходом. Здесь a, b, c, t1, t2 в записи команд (верхняя
строка на рис. 2.1) - это адреса операндов, тогда как а: ( ), b: (4), с: (2), t1: (
), t2: ( ) в записи для ячеек памяти (нижняя строка) - это адреса ячеек
соответствующих операндов, после которых в скобках указано их
содержимое.

( … ( + b 1 t1 ) ( - b c t2 ) ( * t1 t2 a ) … )

b: (4) c: (2) t1: ( ) t2: ( ) a: ( )

Рис. 2.1. Схема потока управления

i 1: i 2: i 3:

( … FORK i2 ( +b 1 t1 ) GOTO i3 (- b c t2 ) JOIN ( * t1 t2 a ) … )


39

b: (4) c: (2) t1: ( ) t2: ( ) a: ( )

Рис. 2.2. Схема потока управления с распараллеливанием выполнения


команд

В исходном состоянии в ячейках по адресам b и c содержатся 4 и 2


соответственно, а остальные ячейки - пустые.
Для рассматриваемого примера вычисления начинаются с передачи
управления команде сложения (+ b 1 t1). При ее выполнении осуществляется
обращение в память за величиной b, значение которой суммируется с 1, и по-
лученный результат отсылается в ячейку памяти t1, после чего управление
передается следующей команде - вычитанию (- b с t2). При ее выполнении
производится два обращения в память за величинами b и c. После этого
осуществляется вычитание (4-2) и результат отсылается ячейку памяти t2.
Далее управление передается третьей команде - умножению (* t1 t2 а), при
выполнении которой осуществляется обращение в память за входными
операндами t1 и t2, после чего выбранные из памяти 5 и 2 перемножаются и
полученное число 10 отсылается как итоговый результат в ячейку памяти.
Помимо последовательного имеются параллельные потоки управления. При
этом распараллеливание достигается при помощи параллельных операторов
управления. Такие операторы задают два или более выполняемых
параллельно последовательных потоков управления и обеспечивают их
синхронизацию. Например, оператор FORK (рис. 2.2) инициирует исполне-
ние команды вычитания, передавая ей управление по адресу i2, и
одновременно инициирует исполнение команды сложения i1, следующей в
программе после оператора FORK, организуя тем самым два
40
последовательных потока управления, выполняемых параллельно. В этом
случае сложение и вычитание могут быть реализованы параллельно.
Когда заканчивается выполнение сложения i1, управление передается через
GOTO по адресу i3 команде JOIN. Сюда же передается управление от
команды вычитания i2, стоящей перед командой JOIN. Последняя
осуществляет синхронизацию двух предшествующих ей параллельно идущих
процессов выполнения сложения и вычитания и после их завершения
запускает далее один последовательный поток управления для выполнения
умножения.
Таким образом, оператор FORK распараллеливает один последовательный
поток управления на несколько последовательных потоков, которые могут
совмещаться во времени, а оператор JOIN по окончании этих потоков
объединяет их и сводит в один последовательный поток управления.
Последовательные и параллельные модели потока управления имеют
несколько общих особенностей:
данные рассылаются между командами не непосредственно, а через ячейки
общей для команд памяти при помощи обращений к ней;
литералы могут храниться в самих командах для улучшения доступа к ним;
поток управления по своей сути является последовательным, и только
вводимые в него управляющие операторы однозначно определяют
организуемый параллелизм.

4.2. Поток данных

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


графов, используемых для изображения потоков данных между командами.
На рис. 2.3 приведена схема выполнения программы на основе потока дан-
ных. На схеме каждая команда содержит код операции, два входа - для
литеральных операндов или же заранее неизвестных операндов,
определяемых символами на пустых местах в скобках ( ), и ссылку типа i3/1,
определяющую соответствующую команду и позицию для результата.
41
Ссылка, представленная однонаправленной дугой графа, используется для
передачи потребителю маркера данных командой, выработавшей результат.
Таким образом, данные рассылаются непосредственно между командами и
записываются конкретным потребителям.
Команда получает возможность для исполнения, когда все ее аргументы
становятся известными, то есть когда все заранее
4 2

i1: ( + ( ) 1 i3/1 ) i2: ( - ( ) ( ) i3/2 )

i3: ( * ( ) ( ) a/1 )

Этап 1

i1: ( + ( ) 1 i3/1 ) i2: ( - ( ) ( ) i3/2 )

5 2
i3: ( * ( ) ( ) a/1 )

Этап 2

i1: ( + ( ) 1 i3/1 ) i2: ( - ( ) ( ) i3/2)


42
i3: ( * ( ) ( ) a/1 )
10

Этап 3

Рис. 2.3. Схема потока данных


неизвестные ее операнды оказываются вычисленными другими командами.
Тогда операция, задаваемая данной командой, исполняется, определяя в
результате неизвестный операнд для команды-преемника. В терминах
ориентированных графов команда получает возможность для исполнения,
когда поступят все маркеры ее входных данных - по одному через все ее
входные дуги. По мере поступления они хранятся, накапливаясь во входной
области команды. При исполнении операции маркеры входных данных
поглощаются (уничтожаются), а маркеры выработанных выходных данных
передаются одновременно через все ее выходные дуги потребителям в
качестве маркеров их входных данных.
Точки на дугах показывают, что на данном этапе через них передаются
маркеры данных. Две точки для этапа 1 показывают, что маркеры данных,
соответствующие величинам b и с, выработаны предшествующими
командами (сами величины как результаты выполнения этих команд
составляют 4 и 2 соответственно). Поскольку величина b требуется как
входная двум командам, вырабатываются две копии ее маркера - по одной
для каждой из этих команд.
Таким образом, как только для команды сложения поступает маркер входных
данных b, а для команды вычитания - маркеры входных данных b и с, эти
команды получают возможность для исполнения своих операций. Конечно, в
общем случае моменты готовности к исполнению не совпадают - здесь,
очевидно, команда вычитания может быть готовой к исполнению не ранее,
чем команда сложения. Исполнение операций обеих команд i1 и i2
осуществляется независимо (параллельно), каждая операция поглощает свои
43
входные маркеры, записывает свой результат (5 и 2 соответственно) команде
i3 и передает ей по маркеру (этап 2). После получения этих маркеров команда
i3 выполняется, после чего выдается выходной маркер и отсылается
полученный результат (этап 3).
В модели потока данных можно отметить следующие характерные
особенности:
промежуточные результаты рассылаются непосредственно между командами
при помощи механизма маркеров данных;
литералы могут быть встроены в команды, способствуя оптимизации
механизма маркеров данных;
не используется традиционная концепция общей памяти данных;
ограничения по последовательности выполнения вычислительных действий в
отличие от модели потока управления определяются только зависимостями
между данными, что позволяет полностью реализовывать присущую
программе параллельность. Здесь управление вычислениями децентрали-
зованное.
Программы на базе потока управления и потока данных строятся в принципе
из команд фиксированного размера с примитивными операциями и
операндами. Более сложные программы с иерархической структурой
строятся из линейных последовательностей таких примитивных команд.

4.3. Поток запросов

В отличие от упомянутых выше схем, схемы выполнения программ на основе


потока запросов, реализуемые в виде так называемых редукционных
программ, строятся из вложенных выражений. При редуцировании
выражений на функциональных языках осуществляются последовательные
перестановки выражения из левой части равенства в правую часть до тех пор,
пока это возможно; в итоге получается результат этой обработки. Например,
вычисление суммы n первых членов натурального ряда по формуле f(n) ≡ n
+ f(n—1) для n = 4 состоит в редуцировании:
44
f(4) 4 + f(3)  4 + (3 + f(2))  4 + (3 + (2 + f(1)))
 (4 + (3 + (2 + 1))) = 10.
Очевидно, что при редуцировании реализация выражений может
осуществляться с их самого внешнего уровня, тогда как для управления
потоком данных она осуществляется с самого внутреннего уровня. Кроме
того, при использовании схемы потока запросов становится возможным
выполнять формульные выражения только по мере необходимости, оставляя
без внимания те формульные выражения, результаты которых в данный
момент не требуются. Здесь идут два встречных процесса — передача
запросов на результаты и передача результатов обработки.
Пусть поступил запрос на вычисление а = (b+1)*(b—с) (рис. 2.4).
Поскольку для его реализации требуются b+1 и b-с, делаются запросы на эти
вычисления.
Далее, для вычисления b + 1 требуется величина b, а для вычисления b
- с - величины b и c, на которые также делаются запросы (обращения к па-
мяти).
Пусть, как и ранее, b = 4 и с = 2. Это самый внутренний уровень. Далее
идет обратный процесс - к самому внешнему уровню. Полученные значения
величин b и c поступают соответственно к b + 1 и b - c, инициируя эти
вычисления.
Запрос а Результат а = 10

(b + 1) * (b - с)

2
5
b+1 b-с

4 4 2
b b с
45

Рис. 2.4. Схема потока запросов

Вычисления b + 1 и b - c могут осуществляться параллельно.


Полученные результаты поступают к (b+l)*(b-с), инициируют умножение,
результат которого является итоговым по исходному запросу.
В модели редуцирования можно отметить следующие основные особенности:
все программные структуры, команды и аргументы являются выражениями;
не используется обычная концепция памяти для данных;
нет никаких дополнительных ограничений по последовательности
выполнения вычислительных действий сверх присущих собственно запросам
на операнды.

Лекция 5
Внутренние связи в вычислительных системах
Вопросы:
1. Коммутаторы внутренних связей
2. Сети внутренних связей
Внутренние связи в вычислительных системах могут быть разделены на
три основные типа: с коммутаторами связей, с сетями связей, с
конвейерными связями.
В самом обширном классе вычислительных систем - МIМD наиболее
широко представлены системы с коммутаторами и с сетями внутренних
связей.
В первых имеется отдельный (функционально) коммутатор —
устройство, которое связывает в систему модули ВС (процессоры и блоки
памяти). Обычно коммутатор — это сложное устройство, по стоимости
сравнимое с процессором.
46
Во вторых системах модули системы связываются друг с другом с помощью
сети той или иной топологии.
При использовании коммутатора все связи между процессорами реализуются
через него, а при использовании сети процессоры могут непосредственно
связываться только со своими соседями, поэтому обращение к «далекому»
процессорному элементу осуществляется через длинную цепочку
промежуточных процессорных элементов с непосредственными связями
между каждой парой соседей.
Конвейерные связи представляют собой последовательное соединение
ступеней конвейера, реализованного в вычислительной системе.

5.1. Коммутаторы внутренних связей

Вычислительные системы класса МIМD с коммутаторами (Км) внутренних


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

В системах с распределенной памятью каждый процессор в совокупности с


его локальной памятью составляет процессорный элемент (ПЭ) и при этом
все ПЭ связаны между собой через коммутатор. Таким образом, в системах
первого типа через коммутатор связаны процессоры и модули памяти (Пр—
Пм), тогда как в системах второго типа через коммутатор связаны сами
процессорные элементы (ПЭ—ПЭ).
Несмотря на указанное различие, системы, как с общей, так и с
распределенной памятью можно разделить по типам их коммутаторов на
системы с перекрестным, многокаскадным и шинным коммутаторами (рис.
3.1). Более того, многие высокопроизводительные системы имеют как
общую, так и распределенную основную память — это гибридные системы
класса МIМD с коммутатором. В типичном случае такие системы содержат
большое число ЭВМ со своей памятью, а также еще и общую память. Не
выделяя здесь гибридные системы, отнесем их к системам первого типа по
признаку наличия общей памяти.
В вычислительных системах C.mmp и S1 использован коммутатор
перекрестных связей, обеспечивающий возможность прямого электрического
соединения между любым из 16 процессоров и любым из 16 модулей памяти.
Следует отметить, что процессоры в этих системах совершенно различны —
в C.mmp использованы ЭВМ типа DEC PDP-11, а в S1—суперЭВМ типа
Сгау-1.
Коммутаторы, обеспечивающие полный набор перекрестных связей,
используются и при числе процессоров, намного превышающем 16. Однако в
этом случае возникает проблема громоздкости коммутатора. Для ее решения
применяются многокаскадные коммутаторы, чаще всего — варианты
коммутатора омега. Отметим, что многокаскадные коммутаторы
применяются и в параллельных системах класса SIМD.
Широко распространены шинные архитектуры, в которых все процессоры и
все модули памяти присоединены к общей шине. Они отличаются
49
экономичностью, но с ростом числа процессоров и модулей памяти общая
шина становится вычислительным ресурсом, ограничивающим реальную
производительность, поскольку она не успевает обеспечивать возрастающее
число обменов информацией. Для преодоления этого недостатка
используются многошинные структуры.
Системы с распределенной памятью обладают меньшей степенью
универсальности по сравнению с системами с общей памятью.

5.2. Сети внутренних связей

Вычислительные системы класса МIМD с сетями внутренних связей за


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

Простейшая сеть внутренних связей — это звезда. Здесь несколько ЭВМ


подключены к общей для них ведущей ЭВМ, как, например, в
вычислительной системе IBM LCAP (Lossely Coupled Array of Processors). В
одном из вариантов этой системы десять процессоров FPS-164 подключены
через каналы к ведущей ЭВМ IBM 4381. Широко распространены
связи типа сетки (решетки), которые могут быть одно- и многомерными и
иметь различные регулярные конфигурации. Одномерная сетка может быть
разомкнутой и представлять собой линейный ряд ЭВМ со связями между
соседними парами, но чаще он замыкается в кольцо, что улучшает
возможности обмена. Сетка в виде одномерного кольца использована,
например, в вычислительных системах CDC Cyberplus на базе мощных
скалярных процессоров и ZMOB на базе микропроцессоров. Двумерная сетка
применена, например, в системах FEM (Finite Element Machine) и VFPP (Very
Fast Parallel Processor). Двумерной сеткой связей обладают и такие ВС, как
ILLIAC IV, ICL DAP и Goodyear MPP, но это — параллельные системы с
общим управлением от единственного потока команд, относящиеся к классу
SIМD.
В последнее время широкое распространение в ВС, в особенности, с
большим числом процессоров, получили двоичные (булевы) гиперкубы,
составляющие основу класса связей в виде кубов. Этот класс отделен от
класса многомерных сеток, поскольку они имеют существенные различия.
В квадратной сетке размерностью m каждый процессорный элемент (не
учитывая крайние) связан с 2m соседними элементами и при n элементах по
ортогональным осям сетка объединяет N=nm процессорных элементов.
Очевидно, что увеличивая или уменьшая n при сохранении значения m ,
можно изменять число элементов N.
В гиперкубе размерностью m каждый процессорный элемент связан с m
соседними элементами, при этом в систему объединяются N = 2m
процессорных элементов, и обеспечивается максимальный путь не более чем
52
в m шагов между любой парой процессорных элементов. Здесь нельзя
изменить число входящих в систему элементов N, не изменяя размерность
m. Это делает практически невозможным наращивание системы, однако,
добавляет важнейшее достоинство – пределы изменения времени передачи
информации одинаковы для всех процессорных элементов.
В качестве примеров систем с двоичными гиперкубическими связями можно
указать базовую экспериментальную систему Cosmic Cube, основанную на
концепции гиперкубических архитектур. Гиперкубические связи имеет и
система Thinking Connection Machine, представляющая собой параллельную
систему класса SIМD с общим управлением от единственного потока команд.
Таким образом, сеточные и гиперкубические связи характерны для систем с
независимыми процессорами, имеющими свои устройства управления
(МIМD), в особенности для высокопараллельных систем с большим числом
процессоров. Типичным здесь является распределенная по процессорам
память, но системы могут иметь и общую память. Упомянутые связи
применяются и в параллельных системах с общим управлением (SIМD), в
том числе в высокопараллельных системах с большим числом обра-
батывающих устройств.
Заменив каждый процессорный элемент, представляемый вершиной в
исходном гиперкубе, группой процессорных элементов, связанных в кольцо,
получаем архитектуру, называемую кубически связанными циклами. При
относительно малом числе элементов в кольце эта архитектура близка по
своим свойствам к гиперкубу, а при их большом числе — к кольцу.
Рассматриваемую архитектуру имеет, например, ЭВМ BVM (Boolean Vector
Machine).
Следующий класс составляют иерархические архитектуры, связи для
которых естественно определяются как рекурсивные. Они включают связи в
виде дерева и пирамиды и шинные связи для многократно вложенных
процессорных кластеров. Примеры — системы X-Tree, EGPA (Erlangen
General Purpose Processor Array) и Cm* соответственно.
53
Наконец, последний класс составляют перестраиваемые сети связей. Этот
класс включает в себя любые сети связей между процессорными
элементами, которые могут быстро изменяться под управлением программы.
Такие перестройки осуществляют в зависимости от характера решаемых
задач, обеспечивая на каждом шаге решения по возможности наилучшее
соответствие структуры системы в данный момент времени структуре
реализуемой части программы и повышая тем самым эффективность
решения за счет адаптируемости структуры ВС.

Лекция 6

Классификация внутренних связей вычислительных систем

Вопросы

1. Операционная классификация внутренних связей

2. Топологическая классификация внутренних связей

Рассмотрим основные типы внутренних связей, используемые главным


образом в системах с большим числом процессоров.
Схемы внутренних связей можно характеризовать и сравнивать по таким
показателям, как сложность, модульность (способность к расширению),
пропускная способность, время задержки на соединение, соответствие
используемому алгоритму связывания, сложность и стоимость реализации.
Для сети внутренних связей важной характеристикой является ее диаметр —
длина максимального кратчайшего пути в сети, выражаемая числом ребер в
нем при представлении сети графом. Если диаметр сети равен d , то это
означает, что из любой вершины можно перейти в любую другую не более
чем через d ребер, т. е. передача сообщения из любого узла сети в любой
другой может быть выполнена не более чем через (d—1) промежуточный
узел. Можно считать, что диаметр в определенной степени характеризует, в
54
общем время передачи сообщений по сети, поэтому желательны сети с
относительно малыми диаметрами.
Приведенные выше классификации схем внутренних связей (рис. 3.1 и 3.2)
были рассмотрены в связи с основными типами архитектур ВС и они уже
содержат отдельные, связанные с топологией, элементы. Однако, более
полная, именно топологическая классификация, приведена на рис. 3.3.
По этой классификации схемы внутренних связей разделяются на
регулярные и нерегулярные, регулярные схемы в свою очередь делятся на
статические и динамические. Далее, среди первых выделяются 1-, 2- и 3-
мерные, а также гиперкубические, а среди вторых — однокаскадные и одно-
и двусторонние многокаскадные, а также схемы перекрестных связей. В ре-
зультате выделяются восемь классов схем внутренних связей.
Статические схемы обеспечивают прямые каналы связи непо-
средственно между соответствующими (обычно соседними) процессорами
для коммутации главным образом пакетов. К одномерным схемам (1)
относится схема с линейной связью (цепочка), используемая, например, в
некоторых конвейерных архитектурах, к двумерным схемам (2) — кольцо,
звезда, дерево, сетка, а также систолическая и волновая матрицы, к
трехмерным (3) относится схема с полным набором прямых связей, кольцо с
хордами, трехмерный куб и трехмерная схема кубически связанных циклов
(такие схемы могут быть и многомерными). Наконец, к статическим схемам
относятся многомерные двоичные гиперкубы (4).
Очевидно, что статические схемы соответствуют сетям внутренних связей.
Такие схемы называются также прямыми, поскольку имеют
непосредственные связи между соответствующими процессорами.
В динамических схемах применяются специальные коммутирующие
элементы с соответствующими связями между ними а также с входами и
выходами схемы, обеспечивающие установление и гибкую реконфигурацию
маршрутов обмена внутри многопроцессорной системы для коммутации
каналов и пакетов.
Рис. 3.3. Топологическая классификация
внутренних связей
55
56

Однокаскадная схема может быть построена по принципу тасовки для


обмена — это один каскад коммутационной омега-сети (5). Многокаскадные
схемы содержат более одного каскада коммутирующих элементов и обычно
способны связывать любой вход схемы с любым ее выходом. Они могут быть
односторонними (6) и двусторонними (7). Односторонние схемы,
называемые также полными коммутаторами, имеют совмещенные порты пар
входа-вывода для коммутируемых устройств ВС. Двусторонние
многокаскадные схемы, которые имеют раздельные входы и выходы для
соответствующих коммутируемых устройств, можно разделить функцио-
нально на блокирующие и с множественными путями, перестраиваемые и
неблокирующие.
В блокирующих схемах (7а) при одновременном связывании двух или более
пар вход-выход маршруты обмена для различных пар могут оказаться
частично совпадающими так, что, например, с некоторого выхода того или
иного коммутирующего элемента одновременно потребуется передать по
одному проводнику два разных сигнала — для двух разных пар вход-выход.
Такой конфликт не позволяет блокирующим схемам осуществлять
описанные выше одновременные связывания. Примерами блокирующих
схем могут служить манипулятор данных, ось (baseline), баньян, омега,
перестановщик (коммутационная схема flip Бэтчера для ЭВМ STARAN),
косвенный двоичный гиперкуб, дельта. Установлена топологическая
эквивалентность перечисленных схем.
Можно выделить также схемы с множественными путями (7б). Они
представляют собой обычно расширение блокирующих схем, в результате
которого вводятся множественные пути для уменьшения конфликтов и
обеспечения отказоустойчивости. Примерами могут служить
коммутационные сети гамма и каппа.
57
Упомянутые выше конфликты, препятствующие одновременному
соединению нескольких пар абонентов в блокирующих схемах, устраняются
в перестраиваемых схемах (7в).
Коммутационная сеть называется перестраиваемой неблокирующей, если она
способна осуществлять все возможные связи между незанятыми входами и
выходами при помощи (в случае необходимости) перестраивания ее уже
существующих связей так, что связывающий путь для новой пары вход-
выход всегда может быть реализован. Наиболее известным примером
является сеть Бенеша, разработанная для телефонных коммутационных
сетей. Топология этой перестраиваемой сети была тщательно исследована
для применения при асинхронном связывании процессоров и синхронном
размещении данных. Были построены усовершенствованные варианты
перестраиваемой сети Бенеша, одним из которых является сеть Ваксмана.
Коммутационная сеть, которая может осуществлять все возможные связи без
блокирования, называется неблокирующей (7г). Известны два основных
варианта. В первом из них связи, между входами и выходами реализуются по
принципу «один к одному», пример — коммутационная сеть Клоса. Во
втором варианте связи реализуются по принципу «один к многим». Что
касается односторонней сети (полный коммутатор), то в ней связи «один к
одному» возможны между всеми парами совмещенных терминалов вход-
выход сети. В качестве таких примеров можно указать односторонние
ячеечный коммутатор, сеть Клоса. Отметим, что здесь варианты той или
иной схемы могут быть как односторонними, так и двусторонними.
Таким образом, в блокирующей коммутационной сети прокладывается
единственный путь для каждой пары вход-выход. В ней не всегда возможно
связывание любой еще не занятой пары вход-выход из-за конфликтов
связывания. Для уменьшения конфликтов и обеспечения отказоустойчивости
строится сеть с множественными путями. В перестраиваемой
коммутационной сети любой незанятый вход может быть связан с любым
незанятым выходом, однако для их связывания может потребоваться
58
перестраивание путей для уже существующих связей. В неблокирующей
коммутационной сети любой незанятый вход может быть связан с любым
незанятым выходом, не затрагивая уже существующих связей.
Наконец, перекрестный коммутатор, называемый также матричным, является
примером одноступенчатой динамической сети. Он обеспечивает связывание
каждого входного порта с любым незанятым выходным портом без
блокирования. Перекрестный коммутатор содержит совокупность линий,
которые при помощи ключей могут соединяться (“перекрещиваться”) между
собой. Каждый порт связан с одной из линий. Для любой пары портов
существует только один путь взаимодействия на матричном коммутаторе.
Следует сделать вывод, что динамические схемы соответствуют
коммутаторам внутренних связей. Такие схемы называются также
косвенными (непрямыми), поскольку коммутируемые устройства
связываются между собой не непосредственно, а через сеть коммутирующих
элементов.
При статической организации внутренних связей прямые соединения
устройств являются пассивными и прямая передача информации
осуществляется так, что передатчик выбирает путь, а приемник распознает
предназначающиеся для него сообщения без изменения конфигурации
связывания через используемые каналы. Здесь в каналах связи не
предусматривается никакая логика, за исключением, возможно, буферных
устройств и устройств повторения сообщений.
При динамической организации внутренних связей косвенные соединения
коммутируемых устройств осуществляются через активные коммутирующие
устройства и передача информации через них производится так, что между
передатчиком и приемником (если не говорить о варианте с несколькими
приемниками) осуществляется выбор одного из нескольких альтернативных
путей передачи информации с изменениями в общем случае конфигурации
связывания. Здесь в коммутирующих элементах предусматривается логика
выбора одного из нескольких альтернативных (следующих звеньев) пути
59
передачи информации, а также в некоторых случаях выполняется
дополнительное преобразование сообщения. Отметим, что функции
коммутирующих устройств как промежуточных пунктов в пути передачи
информации могут выполнять как специально разработанные для этого
устройства, так и в ряде случаев сами процессоры. При этом последние,
разумеется, выполняют также и свои обычные основные функции обработки
информации.

6.2. Операционная классификация внутренних связей

Типы внутренних связей помимо рассмотренных выше особенностей и


характеристик во многом определяются операционным режимом работы,
стратегией управления, методологией коммутации, способом доступа.
В плане операционного режима можно выделить два типа связывания,
определяющих синхронную и асинхронную передачу информации.
Синхронное связывание необходимо для такой обработки, при которой пути
передачи устанавливаются синхронно для любой функции оперирования
данными и для рассылки данных и/или команд. Асинхронное связывание
необходимо для многопроцессорной обработки, когда требуется
динамическое установление связей. Оба эти типа связывания могут
использоваться и в комбинации.
Стратегия управления. Управление соединением трактов обмена может
быть централизованным и децентрализованным. При прямой передаче
информации альтернативных соединений не существует и управление ими в
рассматриваемом смысле не требуется. При непрямой передаче информации
управление может осуществляться централизованно контроллером или же
децентрализовано - индивидуально коммутирующими элементами. В первом
случае сообщения передаются через единый пункт, выполняющий функции
промежуточного пункта назначения и, вместе с этим, - источника для всех
дальнейших передач. Во втором случае каждый задействованный коммути-
рующий элемент осуществляет выбор одного из нескольких промежуточных
60
или же конечных пунктов передачи информации (возможен также и вариант
«один к многим»).
Методология коммутации. Существуют два основных типа коммутации:
коммутация цепей (каналов) и коммутация пакетов. В первом случае
организуется физический путь передачи информации от источника к месту
назначения. Во втором случае данные формируются в пакеты и передаются
через подсистему внутренних связей без организации специально
физического пути для того или иного конкретного пакета. В общем,
коммутация цепей более эффективна для передачи больших объемов данных,
а коммутация пакетов - небольших по объему данных. Имеется и третий тип
— интегрированная коммутация, включающая возможности обоих
указанных типов.
Наконец, с позиций способа доступа тракты обмена могут быть инди-
видуальными, когда они выделяются (назначаются) для осуществления
обмена, и общими, передача по которым осуществляется по принципу
разделения их по времени.

Лекция 7
Распределенная обработка данных

Вопросы:

1. Структура распределенной вычислительной системы

2. Использование распределенной общей памяти

3. Вопросы надежности распределенных ВС

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


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

Локальная Локальная Локальная

память память память

Процессор Процессор Процессор

Коммуникационная сеть

Рис. 4.1. Структура распределенной вычислительной системы

7.2. Использование распределенной общей памяти

Традиционно распределенные вычисления базируются на модели передачи


сообщений, в которой данные передаются от процессора к процессору в виде
сообщений. Удаленный вызов процедур фактически является той же самой
моделью (или очень близкой).
Распределенная общая память (DSM - Distributed Shared Memory) образует
виртуальное адресное пространство, разделяемое всеми узлами
(процессорами) распределенной системы.
Программы получают доступ к данным в DSM примерно так же, как они
работают с данными в виртуальной памяти традиционных ЭВМ. В системах
с DSM данные перемещаются между локальными памятями разных
компьютеров аналогично тому, как они перемещаются между оперативной и
внешней памятью одного компьютера.
62
В модели передачи сообщений данные перемещаются между двумя
различными адресными пространствами. Это делает очень трудным передачу
сложных структур данных между процессами. Более того, передача данных
по ссылке и передача структур данных, содержащих указатели, является в
общем случае делом сложным и дорогостоящим. Использование DSM
позволяет передавать данные по ссылке, что упрощает разработку
распределенных приложений.

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


принципе без каких-либо изменений выполняться на DSM-системах.
По существу, DSM-системы преодолевают архитектурные ограничения
мультипроцессоров и сокращают усилия, необходимые для написания
программ для распределенных систем. Обычно они реализуются
программно-аппаратными средствами.
При реализации DSM центральными являются следующие вопросы:
как поддерживать информацию о расположении удаленных данных;
как снизить при доступе к удаленным данным коммуникационные задержки
и большие накладные расходы, связанные с выполнением
коммуникационных протоколов;
как сделать разделяемые данные доступными одновременно на нескольких
узлах для того, чтобы повысить производительность системы.
Рассмотрим основные алгоритмы реализации DSM.
Алгоритм с центральным сервером.
Все разделяемые данные поддерживает центральный сервер. Он возвращает
данные клиентам по их запросам на чтение, по запросам на запись он
корректирует данные и посылает клиентам в ответ квитанции. Клиенты
могут использовать тайм-аут для посылки повторных запросов при
отсутствии ответа сервера. Дубликаты запросов на запись могут
распознаваться путем нумерации запросов. Если несколько повторных
обращений к серверу остались без ответа, приложение получит
отрицательный код ответа.
63
Алгоритм прост в реализации, но сервер может стать “узким” местом
вычислительной системы. Поэтому разделяемые данные могут быть
распределены между несколькими серверами. В этом случае клиент должен
уметь определять, к какому серверу надо обращаться при каждом доступе к
разделяемым данным. Посылка запросов сразу всем серверам нежелательна,
поскольку не снижает нагрузку на серверы. Лучшее решение - распределить
данные в зависимости от их адресов и использовать функцию отображения
для определения нужного сервера.
Миграционный алгоритм.
В отличие от предыдущего алгоритма, когда запрос к данным направлялся в
место их расположения, в этом алгоритме меняется расположение данных -
они перемещаются в то место, где потребовались. Это позволяет
последовательные обращения к данным осуществлять локально.
Миграционный алгоритм позволяет обращаться к одному элементу данных в
любой момент времени только одному узлу.
Обычно перемещаются (мигрируют) целиком страницы или блоки данных, а
не запрашиваемые единицы данных. Это позволяет воспользоваться
присущей приложениям локальностью доступа к данным для снижения
стоимости миграции. Однако, такой подход приводит к трэшингу, когда
страницы очень часто мигрируют между узлами при малом количестве
обслуживаемых запросов. Некоторые системы позволяют задать время, в
течение которого страница насильно удерживается в узле для того, чтобы
успеть выполнить несколько обращений к ней до миграции ее в другой узел.
Для определения места расположения блоков данных миграционный
алгоритм может использовать сервер, отслеживающий перемещения блоков,
либо воспользоваться механизмом подсказок в каждом узле. Возможна и
широковещательная рассылка запросов.
Алгоритм размножения для чтения.
Предыдущий алгоритм позволял обращаться к разделяемым данным в любой
момент времени только процессам в одном узле (в котором эти данные
64
находятся). Данный алгоритм расширяет миграционный алгоритм
механизмом размножения блоков данных, позволяя либо многим узлам
иметь возможность одновременного доступа по чтению, либо одному узлу
иметь возможность читать и писать данные (протокол многих читателей и
одного писателя). Производительность повышается за счет возможности
одновременного доступа по чтению, но запись требует серьезных затрат для
уничтожения всех устаревших копий блока данных или их коррекции.
При использовании такого алгоритма требуется отслеживать расположение
всех блоков данных и их копий. Например, каждый собственник блока может
отслеживать расположение его копий.
Данный алгоритм может снизить среднюю стоимость доступа по чтению
тогда, когда количество чтений значительно превышает количество записей.

Алгоритм полного размножения


Этот алгоритм является расширением предыдущего алгоритма. Он позволяет
многим узлам иметь одновременный доступ к разделяемым данным на
чтение и запись (протокол многих читателей и многих писателей). Поскольку
много узлов могут писать данные параллельно, требуется для поддержания
согласованности данных контролировать доступ к ним.
Для распределенных систем одной из важнейших является проблема
упорядочивания модификаций распределенной памяти (обеспечения
консистентности данных). Аналогичная проблема – проблема когерентности
кэш-памяти существует в мультипроцессорных вычислительных системах.
Наиболее простым решением проблемы консистентности данных является
использование специального процесса для упорядочивания модификаций
памяти. В этом случае узлы, желающие модифицировать разделяемые
данные должны посылать свои модификации этому процессу. Он
присваивает каждой модификации очередной номер и рассылает его
широковещательно вместе с модификацией всем узлам, имеющим копию
модифицируемого блока данных. Каждый узел осуществляет модификации в
65
порядке возрастания их номеров. Разрыв в номерах полученных
модификаций будет означать потерю одной или нескольких модификаций. В
этом случае узел может запросить недостающие модификации.
Очевидно, что такой алгоритм является недостаточно эффективным. Введем
некоторые изменения в семантику обращений к памяти. Рассмотрим
следующие модели консистентности.
Строгая консистентность.
Модель консистентности, удовлетворяющая условию: операция чтения
ячейки памяти с адресом X должна возвращать значение, записанное самой
последней операцией записи с адресом X, называется моделью строгой
консистентности. Указанное выше условие представляется довольно
естественным и очевидным, однако оно предполагает наличие в системе
понятия абсолютного времени для определения наиболее последней
операции записи.
Последовательная консистентность.
Строгая консистентность представляет собой идеальную модель для
программирования, но ее, к сожалению программистов, невозможно
реализовать для распределенных систем. Однако, в некоторых случаях
можно обходиться и более слабыми моделями. Все эти методы опираются на
то, что должна соблюдаться последовательность определенных событий
записи и чтения.
Модель последовательной консистентности памяти должна удовлетворять
следующему условию: результат выполнения должен быть тот же, как если
бы операторы всех процессоров выполнялись бы в некоторой
последовательности, в которой операторы каждого индивидуального
процессора расположены в порядке, определяемом программой этого
процессора.
Это положение означает, что при параллельном выполнении, все процессы
должны “видеть” одну и ту же последовательность записей в память.
66
Последовательная консистентность не гарантирует, что операция чтения
возвратит значение, записанное другим процессом наносекундой или даже
минутой раньше, в этой модели только точно гарантируется, что все
процессы знают последовательность всех записей в память.
Причинная консистентность.
Причинная модель консистентности памяти представляет собой более
слабую модель по сравнению с последовательной моделью, поскольку в ней
не всегда требуется, чтобы все процессы “видели” одну и ту же
последовательность записей в память, а определяется различие между
потенциально зависимыми операциями записи.
Рассмотрим пример. Предположим, что процесс P1 модифицировал
переменную x, затем процесс P2 прочитал x и модифицировал y. В этом
случае модификация x и модификация y потенциально причинно зависимы,
так как новое значение y могло зависеть от прочитанного значения
переменной x. С другой стороны, если два процесса одновременно изменяют
значения различных переменных, то между этими событиями нет причинной
связи. Операции, которые причинно не зависят друг от друга называются
параллельными.
Слабая консистентность.
Модель слабой консистентности, основана на выделении среди переменных
специальных синхронизационных переменных и описывается следующими
правилами:
доступ к синхронизационным переменным определяется моделью
последовательной консистентности;
доступ к синхронизационным переменным запрещен (задерживается), пока
не выполнены все предыдущие операции записи;
доступ к данным (запись, чтение) запрещен, пока не выполнены все
предыдущие обращения к синхронизационным переменным.
Первое правило определяет, что все процессы видят обращения к
синхронизационным переменным в определенном (одном и том же) порядке.
67
Второе правило гарантирует, что выполнение процессором операции
обращения к синхронизационной переменной возможно только после
выталкивания конвейера (полного завершения выполнения на всех
процессорах всех предыдущих операций записи переменных, выданных
данным процессором).
Третье правило определяет, что при обращении к обычным (не
синхронизационным) переменным на чтение или запись, все предыдущие
обращения к синхронизационным переменным должны быть выполнены
полностью. Выполнив синхронизацию перед обращением к общей
переменной, процесс может быть уверен, что получит правильное значение
этой переменной.
В отличие от предыдущих моделей консистентности, модель слабой
консистентности ориентирована на консистентность групповых операций
чтения/записи. Эта модель наиболее эффективна для приложений, в которых
отдельные (изолированные) обращения к общим переменным встречаются
довольно редко.

7.3. Вопросы надежности распределенных ВС

Надежность – свойство системы выполнять возложенные нее функции в


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

7.3.1. Проблема восстановления

Выделим из всего многообразия проблем, связанных с надежностью


распределенных ВС и далеко выходящих за рамки данного пособия, только
проблему, связанную с восстановлением процесса вычислений в системе
после сбоя или устранения отказа ее компонентов.
Восстановление может быть прямым (без возврата к прошлому состоянию) и
возвратным.
Прямое восстановление основано на своевременном обнаружении
сбоя/отказа и ликвидации его последствий. Такое восстановление возможно
только для определенного набора заранее предусмотренных сбоев.
При возвратном восстановлении происходит возврат процесса (или системы)
из некорректного состояния в некоторое из предшествующих корректных
состояний. При этом необходимо учитывать следующее:
потери в скорости вычислений, вызванные запоминанием состояний,
восстановлением запомненного состояния и повторением ранее выполненной
работы, могут быть достаточно высоки;
сбой может снова повторится после выполнения процедуры восстановления.
Второй вариант восстановления является более универсальным и
применяется гораздо чаще первого. Дальнейшее рассмотрение будет
ограничено только этим вариантом.
Для восстановления состояния в традиционных ЭВМ, как правило,
применяются два метода (и их комбинация), которые различаются объемом
запоминаемой информации и временем, требуемым для восстановления.
69
Первый метод - основанный на промежуточной фиксации состояния.
Второй метод - основанный на ведении журнала выполняемых операций.
Применение этих методов в распределенных системах наталкивается на
некоторые трудности. Покажем это на следующих примерах.
Пример 1. Эффект “домино“.
Предположим, что в распределенной ВС взаимодействуют с помощью
сообщений три процесса X, Y, Z (рис. 4.2.).
x1 x2 x3
X t

m
y1 y2
Y t

z1 z2
Z t

Рис. 4.2. Эффект “домино“ в распределенной ВС

Вертикальные линии показывают на временной оси моменты запоминания


состояния процесса в случае его приостановления при отказе. Стрелками
обозначаются сообщения и показываются моменты их отправления и
получения.
Если процесс X приостановлен, то он может быть возобновлен с состояния
x3 без какого-либо воздействия на другие процессы.
Предположим, что процесс Y приостановлен после посылки сообщения m и
возвращен в состояние y2. В этом случае получение сообщения m
зафиксировано в x3, а его посылка не отмечена в y2. Такая ситуация,
безусловно, не должна допускаться. Сообщение m в таком случае называется
сообщением-“сиротой”. Для недопущения этой ситуации процесс X должен
быть возвращен в предыдущее состояние x2.
70
Предположим теперь, что процесс Z приостановлен и возвращен в состояние
z2. Это приведет к возврату процесса Y в y1, а затем и процессов X и Z в
начальные состояния x1 и y1. Этот эффект известен как эффект “домино”.
Пример 2. Потеря сообщения.
Рассмотрим два взаимодействующих процесса X и Y (рис. 4.3.).
Предположим, что в точках x1 и y1 зафиксированы состояния процессов X и
Y, соответственно.

x1
X t

m
y1
Y t
отказ

Рис. 4.3. Потеря сообщения в распределенной ВС

x1
X t
n1

y1
m1
Y t
отказ

Рис. 4.4. Первый возврат процесса Y1 при возникновении бесконечного


восстановления
71

x1
X t

n2
n1 m2
Y y1 t

Точка второго возврата

Рис. 4.5. Второй возврат процесса Y1 при возникновении бесконечного


восстановления

Если процесс Y приостановлен после получения сообщения m и оба процесса


возвращены в x1 и y1 соответственно, то сообщение m будет потеряно (его
потеря будет неотличима от потери в канале).
Пример 3. Бесконечное восстановление
Пусть процесс Y приостановлен до получения сообщения n1 от процесса X
(рис. 4.4.).
Процесс Y оказался возвращенным в состояние y1, в котором отсутствуют
сведения о посылке сообщения m1. Поэтому процесс X должен быть
возвращен в состояние x1.
После возврата процесс Y посылает сообщение m2 и принимает
сообщение-“призрак” n1 (рис. 4.5.). Процесс X после возврата в состояние x1
посылает n2 и принимает m2. Однако процесс X после возврата уже не имеет
записи о посылке n1. Поэтому процесс Y должен быть повторно возвращен в
состояние y1. Теперь уже процесс X должен возвратиться к состоянию x1,
поскольку он принял сообщение m2, о посылке которого у процесса Y нет
сведений. Эта последовательность может повторяться бесконечно.
72
Лекция 8

Алгоритмы согласования распределенных систем

Вопросы:

1. Консистентное множество контрольных точек

2. Коммутация и синхронизация в распределенных системах

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


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

Ниже описываются алгоритмы создания консистентного множества


контрольных точек и использования их для восстановления без опасности
бесконечного зацикливания.
Алгоритм создания консистентного множества контрольных точек.
для журнала посылаемых сообщений и фиксации идентификатора
последнего полученного по каналу сообщения).
Алгоритм создает в памяти два вида контрольных точек - постоянные и
пробные. К распределенной системе алгоритм предъявляет следующие
требования:
процессы взаимодействуют посредством посылки сообщений через
коммуникационные каналы;
каналы работают по алгоритму FIFO. Коммуникационные протоколы точка-
точка гарантируют невозможность пропажи сообщений из-за ошибок
коммуникаций или отката к контрольной точке. Другой способ обеспечения
этого – фиксации, в соответствии с которым некоторый процесс Pi создает
пробную контрольную точку и просит все остальные процессы сделать то же
самое.
Постоянная контрольная точка - это локальная контрольная точка,
являющаяся частью консистентной глобальной контрольной точки. Пробная
контрольная точка - это временная контрольная точка, которая становится
постоянной только в случае успешного завершения алгоритма. Алгоритм
исходит из того, что только один процесс инициирует создание множества
контрольных точек, а также из того, что никто из участников не сломается во
время работы алгоритма.
Алгоритм выполняется в два этапа.
Первый этап. Инициатор сообщения после того, как он сделает пробную
контрольную точку. Каждый процесс извещает Pi о том, сделал ли он
74
пробную контрольную точку. Если все процессы сделали пробные
контрольные точки, то Pi принимает решение о превращении пробных точек
в постоянные. Если какой-либо процесс не смог сделать пробную точку, то
принимается решение об отмене всех пробных точек.
Второй этап. Процесс Pi информирует все процессы о своем решении. В
результате либо все процессы будут иметь новые постоянные контрольные
точки, либо ни один из процессов не создаст новой постоянной контрольной
точки. Только после выполнения принятого процессом Pi решения все
процессы могут посылать сообщения.
Корректность алгоритма очевидна, поскольку созданное всеми множество
постоянных контрольных точек не может содержать не зафиксированных
операций посылки сообщений.
Если процесс не посылал сообщения с момента фиксации предыдущей
постоянной контрольной точки, то он может не создавать новую.
Алгоритм восстановления.

Алгоритм предполагает, что его инициирует один процесс и он не будет


выполняться параллельно с алгоритмом фиксации.
Выполняется в два этапа.
Первый этап. Процесс-инициатор возврата опрашивает остальные процессы
о готовности выполнить возврат. Процесс-инициатор принимает решение о
возврате после получения подтверждений от всех остальных процессов.
Второй этап. Процесс Pi сообщает всем о принятом решении. Получив это
сообщение, каждый процесс поступает указанным образом. С момента ответа
на опрос готовности и до получения принятого решения процессы не должны
посылать сообщения.
Если процесс не обменивался сообщениями с момента фиксации
предыдущей постоянной контрольной точки, то он может к ней не
возвращаться.
Асинхронная фиксация контрольных точек и восстановление.
75
Синхронная фиксация упрощает восстановление, но связана с большими
накладными расходами: дополнительные служебные сообщения для
реализации алгоритма; невозможность посылать неслужебные сообщения во
время работы алгоритма.
Если отказы редки, то указанные потери совсем не оправданы.
Фиксация может производиться асинхронно. В этом случае множество
контрольных точек может быть неконсистентным. При откате происходит
поиск подходящего консистентного множества путем поочередного отката
каждого процесса в ту точку, в которой зафиксированы все посланные им и
полученные другими сообщения (для ликвидации сообщений-“сирот”).
Алгоритм опирается на наличие в стабильной памяти для каждого процесса
списка, отслеживающего номера посланных и полученных им сообщений, а
также на некоторые предположения об организации взаимодействия
процессов, необходимые для исключения эффекта “домино” (например,
организация приложения по схеме сообщение-реакция-ответ).
Изложенные выше методы восстановления после отказов для некоторых
систем непригодны (управляющие системы, транзакции в on-line режиме) из-
за прерывания нормального функционирования.
Чтобы избежать этих неприятностей, создаются системы, устойчивые к
отказам. Такие системы либо маскируют отказы, либо ведут себя в случае
отказа заранее определенным образом (пример - изменения, вносимые
транзакцией в базу данных, становятся невидимыми при отказе).
Два механизма широко используются при обеспечении отказоустойчивости -
протоколы голосования и протоколы принятия коллективного решения.
Протоколы голосования служат для маскирования отказов (выбирается
правильный результат, полученный всеми исправными исполнителями).
Протоколы принятия коллективного решения подразделяются на два класса.
Во-первых, протоколы принятия единого решения, в которых все
исполнители являются исправными и должны либо все принять, либо все не
принять заранее предусмотренное решение. Примерами такого решения
76
являются решение о завершении итерационного цикла при достижении всеми
необходимой точности, решение о реакции на отказ (этот протокол уже
знаком нам - он использовался для принятия решения об откате всех
процессов к контрольным точкам). Во-вторых, протоколы принятия
согласованных решений на основе полученных друг от друга данных. При
этом необходимо всем исправным исполнителям получить достоверные
данные от остальных исправных исполнителей, а данные от неисправных
исполнителей проигнорировать.

8.2. Коммутация и синхронизация в распределенных системах

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


коммуникационной сетью. Коммуникационные сети подразделяются на
широкомасштабные (Wide Area Networks, WANs) и локальные (Local Area
Networks, LANs).
Широкомасштабныесети WAN состоит из коммуникационных ЭВМ,
связанных между линии, собой коммуникационными линиями (телефонные
радиолинии, спутниковые каналы, оптоволоконные каналы) и
обеспечивающих транспортировку сообщений. Обычно используется
процедура store-and-forward, когда следующие друг за другом сообщения
передаются из одного компьютера в другой с промежуточной буферизацией.
В распределенных вычислительных системах используются также
традиционные способы коммутации: коммутация пакетов и коммутация
каналов.
Коммутация каналов требует резервирования линий на время всего
сеанса взаимодействия двух устройств.
Пакетная коммутация основана на разбиении сообщений в пункте
отправления на порции (пакеты), посылке пакетов по адресу назначения, и
сборке сообщения из пакетов в пункте назначения. При этом линии
используются эффективнее, сообщения могут передаваться быстрее, но при
этом требуется выполнить действия по разбиению и сборке сообщений.
77
Синхронизация в распределенных системах осуществляется на основе
определения для всех событий отношение предшествия. По существу, она
заключается в определении очередности доступа процессов к разделяемым
ресурсам.
Параллельный процесс, обладающий разделяемым ресурсом, исключает
для других процессов возможность одновременно с ним обращения к тем же
ресурсам. Это называется взаимоисключением.
Говорят, что процесс находится на своем критическом участке, если он
производит обращение к разделяемым ресурсам. Для обеспечения
взаимоисключения необходимо при вхождении одного процесса в свой
критический участок, не допускать возможности такого вхождения для всех
других связанных с ним процессов. Конечно, при этом другие процессы
могут продолжать свое выполнение, но без входа в свои критические
участки.
Каждый процесс должен максимально быстро проходить свой
критический участок, освобождая доступ к ресурсу другим процессам.
Именно поэтому следует исключать блокировки и зацикливания процесса
внутри критического участка.
Рассмотрим алгоритмы синхронизации.
Алгоритм с процессом-координатором.
Для многих алгоритмов распределенной обработки данных требуется,
чтобы один из процессов реализовывал функции координатора, выполняя
синхронизацию процессов. При этом очень часто бывает неважно, какой
именно процесс выбран в качестве координатора. Можно считать, что
обычно выбирается процесс с самым большим уникальным номером.
Все процессы запрашивают у координатора разрешение на вход в
критический участок и ждут этого разрешения. Координатор обслуживает
запросы в порядке поступления. Получив разрешение, процесс входит в
критический участок. При выходе из него процессор сообщает об этом
координатору.
78
Недостатки этого алгоритма обычны для алгоритма централизованного
типа. Это проблемы при перегрузке координатора сообщениями или при его
отказе.
Алгоритм с круговым маркером.
Все процессы составляют логическое кольцо с предварительно
определенным порядком опроса процессов. По кольцу циркулирует маркер,
дающий право на вход в критический участок. Получив маркер (посредством
сообщения точка-точка) процесс либо входит в критический участок (если он
ждал разрешения), либо переправляет маркер дальше. После выхода из
критической секции маркер переправляется дальше, повторный вход в
секцию при том же маркере не разрешается.
К недостаткам алгоритма относятся:
сложность обнаружения потери маркера и необходимость его
регенерации;
приостановление любого процесса в системе приводит к сбою алгоритма.
Однако восстановление производится просто с использованием квитанций,
которые позволяют обнаружить приостановленный процесс в момент
передачи маркера. Приостановленный процесс исключается при этом из
логического кольца.
Более подробно с другими алгоритмами синхронизации можно
ознакомиться в [13].
79

Лекция 9

Основы метрической теории вычислительных систем

Вопросы:

1. Предмет и задачи метрической теории ВС

2. Анализ производительности ВС

Теория вычислительных систем в целом – инженерная дисциплина,


объединяющая методы решения задач проектирования и эксплуатации
вычислительных машин, комплексов, систем и сетей.
Предметом исследования в теории вычислительных систем являются
вычислительные системы в аспектах их производительности, надежности,
стоимости. В системе, при этом, выделяются следующие составляющие:
технические средства, определяемые конфигурацией системы – составом
устройств и структурой связей между ними;
режим обработки, определяющий порядок функционирования системы;
рабочая нагрузка, характеризующая класс обрабатываемых задач и порядок
их поступления в систему.
Выделяют три важнейшие задачи теории вычислительных систем:
задача анализа;
задача идентификации;
задача синтеза.
При решении всех этих задач важнейшая роль отводится проведению
измерений характеристик уже существующих систем.
Так, при анализе систем в процессе эксплуатации оценка характеристик
Y={y1 ,..., yM} производится, как правило, измерением параметров
функционирования с обработкой измерительных данных. В этом случае
80
используется методика, устанавливающая состав измеряемых параметров,
периодичность и длительность измерений, а также измерительные средства и
средства обработки данных. В целях сокращения затрат на анализ стремятся
измерять по возможности меньшее число наиболее просто измеримых
параметров X={x1 ,..., xN}, а требуемый набор характеристик определять
косвенным методом - вычислением с использованием зависимостей ym =
m(Х), m = 1, ... ,М. Эти зависимости либо имеют статистическую природу,
либо создаются на основе фундаментальных закономерностей теории
вычислительных систем.
Задача идентификации. При эксплуатации вычислительных систем
возникает необходимость в повышении их эффективности путем подбора
конфигурации и режима функционирования, соответствующих классу
решаемых задач и требованиям к качеству обслуживания пользователей. В
связи с ростом нагрузки на систему и переходом на новую технологию
обработки данных может потребоваться изменение конфигурации системы,
использование более совершенных операционных систем и реализуемых ими
режимов обработки. В этих случаях следует оценить возможный эффект, для
чего необходимы модели производительности и надежности системы, а
также проведение измерений характеристик системы.
Задача синтеза для вычислительных систем обладает определенной
спецификой, так как решается чаще всего по схеме “синтез через анализ“.
Это означает задание исходного набора альтернативных вариантов структур,
проведение анализа каждого из вариантов и выбор лучшего варианта в
соответствии с установленным правилом выбора.
Таким образом, метрическая теория ВС, как часть инженерной дисциплины
“Теория вычислительных систем”, исследует методы и средства измерений и
оценки функционирования в вычислительных системах, а также вопросы
описания процессов функционирования, разработки моделей измеряемых
характеристик, моделей рабочей и системной нагрузки.
81
9.2. Анализ производительности ВС

Производительность – наиболее важная характеристика вычислительной


системы, определяющая количество вычислительной работы, выполняемой
за единицу времени. В настоящее время отсутствует общепринятая методика
оценки производительности систем обработки данных, что связано, прежде
всего, с отсутствием единиц для измерения количества вычислительной
работы. Поэтому для оценки производительности используется широкая
номенклатура величин – показателей производительности.
Производительность вычислительных систем общего назначения
оценивается в зависимости от области применения номинальной,
комплексной, системной производительностью и производительностью на
рабочей нагрузке.
Номинальная производительность характеризует только быстродействие,
или производительность устройств, входящих в состав системы.
Комплексная производительность учитывает не только быстродействие
устройств, но и структуру системы - ее влияние на быстродействие
совместно функционирующих устройств. Системная производительность
учитывает как вышеназванные факторы - быстродействие устройств и
структуру связей между ними, так и влияние операционной системы.
Производительность на рабочей нагрузке (кратко - производительность)
отображает все факторы, влияющие на системную производительность, и,
кроме того, свойства рабочей нагрузки - задач, решаемых вычислительной
системой. С производительностью тесно связана такая характеристика ка-
чества обслуживания пользователей, как время ответа, т. е. время
пребывания задач в системе. Поэтому при оценке производительности
определяется не только количество работы, выполняемое системой в единицу
времени, но и время ответа для всего множества задач и отдельных классов
задач.
82
Производительность вычислительной системы проявляется, с одной стороны,
в скорости обработки задач, а с другой - в степени использования ресурсов
системы. Чем больше загружены ресурсы, тем выше производительность
системы, и недогрузка ресурсов свидетельствует о наличии резервов для
повышения производительности. Поэтому при анализе производительности
системы оцениваются не только показатели производительности, но и по-
казатели, характеризующие использование ресурсов.
Производительность вычислительной системы связана с про-
должительностью процессов обработки задач, которая зависит от трех
факторов: 1) рабочей нагрузки; 2) конфигурации системы; 3) режима
обработки задач.
Эти три фактора в совокупности определяют порядок развития
вычислительных процессов во времени.
Первая задача анализа производительности сводится к поиску компактных
и информативных форм представления вычислительных процессов. Эти
формы создают концептуальную (понятийную) основу для оценки
функционирования вычислительных систем в процессе эксплуатации и при
исследовании с помощью моделей производительности.
Вторая задача анализа производительности - создание моделей,
позволяющих прогнозировать производительность систем для различной
конфигурации, режимов обработки и, возможно, разной рабочей нагрузки.

9.2.1. Способы описания процессов функционирования

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


вычислительной системы рассматривается как совокупность процессов,
связанных с использованием ресурсов системы. К ресурсам R = {R1 , ..., RN+P}
относятся устройства R1 , ..., RN, разделяемые между процессами во времени,
а также устройства памяти (память) RN+1 , ..., RN+P , разделяемые во времени и
по емкости.
83
Процесс характеризуется тройкой параметров: J=< t, А, Т >, где t - момент
начала процесса; А — атрибуты, устанавливающие имя источника процесса
(пользователя, программы и т.п.), и факторы, влияющие на режим обработки
(имя класса, приоритет и др.); Т — трасса процесса.
Трасса характеризует порядок использования ресурсов и представляется
последовательностью событий Т = {s1 , ..., sk}, связанных с изменением
состояния процесса. Событие Sk характеризуется моментом его
возникновения tk , именем ресурса, с которым связано событие, и
параметрами, определяющими использование ресурса (занятие или
освобождение, тип операции, выполняемой устройством, емкость
выделяемой памяти и т. д.). В трассе фиксируется весь объем данных,
отображающих взаимодействие процесса с ресурсами и позволяющих
установить порядок обращения к ресурсам и объем их использования. Трасса
представляет процесс наиболее полно. Однако у этой характеристики
существенный недостаток - большой объем данных. Так, обычно на одну
реализацию вычислительного процесса приходится 103—106 обращений к
периферийным устройствам, что составляет 103—106 смен состояний
процесса или 105—107 байт данных.
Более компактная форма представления процесса — профиль процесса.
Для построения профиля выделяются фазы процесса: ввод, ожидание во
входной очереди, ожидание памяти и т. д. Реализация процесса
представляется в виде последовательности фаз, продолжительность
пребывания в которых характеризуется значениями i (время использования
устройств) и i (время ожидания). Сумма этих значений составляет время
пребывания задания в системе. Профиль процесса дает наглядное
представление о продолжительности каждой фазы и соотношении
длительности фаз. Для повышения информативности профиль снабжается
данными о числе обращений к устройствам, а также о емкости используемой
памяти, в том числе о минимальной, средней и максимальной требуемой
емкости. Таким образом, профиль определяет время 1 , ... , N использования
84
устройств R1 , ... , RN и число обращений n1 , ... , nN к каждому из устройств, а
также потребность в памяти.
Профиль процесса отображает свойства программы и одновременно
режима обработки. Свойства программы проявляются в объеме
использования ресурсов — времени использования устройств и емкости
памяти. Режим обработки сказывается на времени ожидания. В
однопрограммном режиме состояние ожидания отсутствует. С увеличением
уровня мультипрограммирования время ожидания возрастает, особенно для
низкоприоритетных процессов. На время ожидания влияет уровень загрузки
системы, который возрастает с интенсивностью поступления заданий на об-
работку и приводит к увеличению времени пребывания заданий в очередях.
Процессы в вычислительных системах разделяются на два класса:
прикладные и системные. Прикладной процесс связан с актом обслуживания
пользователя и представляет собой некоторую единицу работы —
выполнение задания. Прикладные процессы поддерживаются системными
процессами, порождаемыми управляющими программами операционной
системы. К системным относятся процессы системного ввода — вывода и
супервизорные. Системные процессы, как и прикладные, потребляют
ресурсы системы — оперативную и внешнюю память, процессорное время,
каналы ввода—вывода и НМД. Объем использования ресурсов зависит от
режима обработки (уровень мультипрограммирования, число
инициированных процессов системного ввода — вывода и т. д.), а также от
параметров заданий (число шагов и описаний наборов данных, число
обращений к наборам данных и т. д.). Путем измерений определяется
загрузка ресурсов со стороны системных процессов. Потребность системных
процессов в ресурсах обычно выражается в виде уравнений регрессии,
аргументами которых являются параметры прикладных процессов.
85
9.2.2. Способы описания загрузки ресурсов

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


устройств. Загрузка устройства - время, в течение которого устройство
занято работой, т. е. не простаивает. Если
1 , ... , N — длительность рабочих интервалов и Т - время работы системы,
то загрузка устройства на отрезке времени Т
1 K
  k  1
Т k 1

Если номинальное быстродействие устройства равно V операций в


секунду, то фактическое быстродействие с учетом простоев устройства из-за
недогрузки составляет V операций в секунду. Если  — среднее число
операций, выполняемых устройством при обработке одного задания, то
производительность системы, исчисляемая в обрабатываемых за секунду
заданиях,
 =  V/ .
Следовательно, загрузка устройства характеризует производительность
системы с точностью до коэффициента пропорциональности.
При анализе производительности большую роль играет не только
значение, но и структура загрузки — составляющие, из которых
складывается значение . Принято выделять три класса процессов (видов
нагрузки): системные процессы, пакетная и оперативная обработка. Два
последних относятся к прикладным процессам. Указанные классы процессов
создают загрузку с , п , о соответственно. Эти значения характеризуют
время работы устройства, используемое для реализации соответствующих
функций. Сумма  = с + п + о равна загрузке устройства, а значение  = 1
— характеризует простой.
Простой  обусловлен двумя факторами.
86
Во-первых, для компенсации пульсаций нагрузки, связанной с
оперативной обработкой данных, выделяется резерв, за счет чего обеспечи-
вается приемлемое время ответа при пиковых нагрузках.
Во-вторых, возможна нехватка других ресурсов, из-за чего рассматри-
ваемое устройство не может быть загружено полностью в рамках данной
конфигурации, режима функционирования системы и текущей нагрузки.
Структуру загрузки можно представить более детально, если, например,
в составе системных процессов выделить ввод-вывод, пакетную обработку
разделить на несколько классов задач и т.д. Структура загрузки всех
ресурсов системы дает представление о распределении ресурсов между
процессами и о резервах для увеличения производительности и улучшения
качества обслуживания пользователей. Сумма
N
P   n
n 1

называется загрузкой вычислительной системы.

9.2.3. Модели производительности

При проектировании, а также при совершенствовании конфигурации и


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

В1 В2 В3

Модель Модель Модель


рабочей Задания Задачи Выход
нагрузки планировани Выполнения
я работ задач
87

Рис. 5.1. Состав модели производительности

Имитационные модели производительности систем общего назначения


состоят из трех основных блоков (рис. 5.1.): рабочей нагрузки, планирования
работ и выполнения задач. Модель рабочей нагрузки создает потоки заданий,
формируемых пользователями на входе системы, и определяет параметры
заданий. Модель настраивается на конкретный тип нагрузки набором
параметров В1. Модель планирования работ воспроизводит обеспечение
заданий ресурсами. Модель настраивается на конкретный режим обработки
набором параметров В2 (число разделов или инициаторов, распределение
классов задач между инициаторами и т. д.). Задания, обеспеченные на фазе
планирования ресурсами, образуют задачи, обработка которых
воспроизводится моделью выполнения задач. Набор параметров В3
характеризует структуру системы и быстродействие устройств, влияющие на
продолжительность выполнения задач. Состояние процессов в общем случае
влияет на состояние процессов планирования и порядок поступления задач в
систему: данные о состоянии последующих фаз обработки передаются в
предыдущие фазы (штриховая линия на рисунке).
Для разных целей необходимы различные модели производительности,
отличающиеся составом воспроизводимых параметров и точностью
воспроизведения характеристик.
Наиболее сложны модели, которые предназначены для выбора режима
обработки, согласованного с рабочей нагрузкой и обеспечивающего заданное
качество обслуживания — максимальную пропускную способность при
заданных ограничениях на время ответа. В таких моделях приходится
детально воспроизводить конфигурацию системы, состав рабочей нагрузки и
88
параметры операционной системы, посредством которых она настраивается
на заданный режим обработки. Точность оценки характеристик должна быть
высокой. Повышаются требования к информативности: из модели должны
выводиться подробные данные о профиле процессов и загрузке ресурсов, в
том числе о структуре загрузки.
Для выбора конфигурации при совершенствовании эксплуатируемых
систем и проектировании новых используются более простые модели,
воспроизводящие рабочую нагрузку и режим обработки лишь в общих
чертах. Основное внимание уделяется моделированию фазы выполнения
задач, влияние которой на производительность наиболее велико. В этом
случае оценка производительности с погрешностью 20—25 % вполне
приемлема. Более того, при выборе конфигурации модель считается
адекватной системе, если воспроизводит хотя бы тенденцию изменения
производительности, т. е. прирост или снижение ее при изменении
конфигурации системы.
Состав процессов, воспроизводимых моделью, и точность их
воспроизведения существенно зависит от априорных данных о моделируемой
системе, которыми располагает исследователь. Модель рабочей нагрузки не
может воспроизвести свойства нагрузки, о которых отсутствует четкое
представление. То же самое можно сказать и о воспроизводимости процессов
управления обработкой и процессов выполнения задач. Состав данных о
рабочей нагрузке и функционировании системы предопределяет вос-
производимые в модели закономерности и точность оценок. Недостаточность
данных о моделируемой системе является более существенным препятствием
при построении моделей, чем ограниченные возможности методов
моделирования и математических моделей.
Модели производительности могут строиться как имитационные,
аналитические или статистические. Из-за существенного различия этих
классов моделей по точности и затратам на реализацию могут
использоваться различные методы при построении элементов модели
89
производительности: рабочей нагрузки, фаз планирования работ и
выполнения задач. Такие модели производительности называются
гибридными. В типичной гибридной модели рабочая нагрузка и
планирование воспроизводятся имитационными, а выполнение задач —
аналитическими методами.

Лекция 10

Методы и средства измерений и оценки функционирования ВС

Вопросы:

1. Трассировочный и выборочный методы измерений

2. Универсальные и специализированные мониторы

3. Программные и аппаратные мониторы

4. Оценка функционирования вычислительных систем

Измерения являются источником наиболее достоверных данных о


функционировании вычислительны систем и проводятся в следующих целях:
для учета выполненных работ;
для оценки функционирования;
для идентификации вычислительной системы.
Измерения могут быть направлены на исследование как системы в
целом, так и отдельных подсистем.
Объектом измерений является вычислительная система, функционирую-
щая, как правило, в рабочем режиме. К системе подключаются
измерительные средства — мониторы, реагирующие на изменение состояний
системы и измеряющие параметры состояний (моменты изменения
состояний, продолжительность пребывания в них и др.). Измерительные
90
данные поступают от мониторов в архив на протяжении заданного
промежутка времени, накапливаются и затем обрабатываются.
Функционирование вычислительной системы проявляется в изменении
состояний процессов и ресурсов. Состояния отображаются в управляющих
таблицах, которые формируются управляющими программами операционной
системы, и в первую очередь супервизором. Состояния процессов и ресурсов
изменяются в моменты выполнения специальных команд — обращения к
супервизору и привилегированных, с помощью которых супервизор управ-
ляет процессами и ресурсами, а также при поступлении сигналов
прерывания, извещающих супервизор о моментах окончания операций ввода
— вывода, особых ситуациях в системе и сигналах на ее входах. Наряду с
этим состояния устройств отображаются соответствующими электрическими
сигналами.

10.1. Трассировочный и выборочный методы измерений

Трассировочный метод измерений основан на регистрации событий,


соответствующих моментам изменения состоянии вычислительной системы.
К таким событиям, в частности, относятся начало и конец ввода задания,
шага задания, этапа процессорной обработки, обращения к внешней памяти и
т. д.
События регистрируются монитором в виде некоторого событийного
набора данных Т, состоящего из последовательности записей s1 , s2, ... ,
соответствующих последовательности событий. В записи регистрируется
момент возникновения события, имена процесса и ресурса, с которыми оно
связано, и параметры события, например емкость занимаемого или
освобождаемого блока памяти, число передаваемых байтов данных и так
далее.
Событийный набор данных, создаваемый монитором, содержит
информацию о процессах J1 , J2, ... , и одновременно о ресурсах. Мониторы,
91
измеряющие процесс функционирования системы трассировочным методом,
называются трассировочными.
Выборочный метод измерений основан на регистрации состояний
вычислительной системы в заданные моменты времени, как правило через
промежутки длительностью . В моменты t = n, n= 0, 1, 2, ... , выборочный
монитор регистрирует состояние системы, фиксируя в соответствующих
записях данные из управляющих таблиц, или значения электрических
сигналов, характеризующих состояния устройств системы. Полученные
данные позволяют с погрешностью не более 2 оценивать
продолжительность пребывания процессов и ресурсов в различных
состояниях и вероятности состояний. Последние определяются значениями
рi= ni/n, где ni — число выборок, при которых было зарегистрировано со-
стояние i, и n— длительность процесса измерений, определяемая числом
выборок.
Трассировочные мониторы измеряют отдельные процессы, например
обработку одного задания, более точно, чем выборочные. Однако, если
функционирование системы оценивается статистическими методами,
выборочный монитор обеспечивает такую же точность, как и
трассировочный, правда при большей продолжительности измерений.
Основное достоинство выборочных мониторов — возможность измерений
сколь угодно быстрых процессов при ограниченном быстродействии.

10.2. Универсальные и специализированные мониторы

В зависимости от регистрируемого состава событий (состояний)


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

10.3. Программные и аппаратные мониторы

Мониторы, реализованные в виде программы, выполняемой


вычислительной системой, называются программными.
Программные мониторы трассировочного типа реагируют
на определенный класс событий за счет «перехвата» обращений к су-
первизору, сигналов прерывания и других сигналов, что приводит к передаче
управления программным блокам монитора. Приняв управление, монитор
выбирает из управляющих таблиц супервизора, программ управления
заданиями и данными необходимую информацию, формирует запись,
соответствующую событию, и помещает ее в заданную область памяти.
Затем передает управление в точку, перед обращением к которой произошел
переход к монитору. Таким образом, монитор включается в работу в момент
возникновения событий, соответствующих смене состояний.
93
Программные мониторы выборочного типа включаются в работу по
таймеру, отмечающему интервалы времени , через которые производится
опрос состояний вычислительной системы. Как и мониторы трассировочного
типа, они получают необходимые данные о состоянии системы из
управляющих таблиц и заносят сформированные данные в заданную область
памяти.
Встроенный программный монитор — совокупность программных
блоков, входящих в состав управляющих программ операционной системы.
Встроенный монитор создается совместно с операционной системой и
является ее частью. За счет этого обращение к блокам монитора реализуется
короткими цепочками команд и минимизируются затраты процессорного
времени на выполнение измерительных процедур. Встроенные программные
мониторы, как правило, имеют статус управляющих программ операционной
системы. В операционные системы встраиваются специализированные
измерительные средства для учета выполненных работ, контроля
использования ресурсов и получения данных о сбоях и отказах системы.
Такого рода измерительные средства дают минимальные сведения о
функционировании вычислительной системы.
Для расширения измерительных возможностей используются
автономные программные мониторы — измерительные программы,
выполняемые системой в основном как прикладной процесс. Автономные
мониторы загружаются в оперативную память как прикладные программы.
Монитор программно связывается с супервизором, за счет чего в момент
возникновения событий монитору передается управление. Монитор выбирает
необходимые данные из управляющих таблиц, обрабатывает их, формирует
запись в наборе измерительных данных и возвращает управление супер-
визору. Автономные мониторы, как правило, универсальны и позволяют
регистрировать широкую номенклатуру событий при трассировочном и
состояний при выборочном методе измерений. Специализированные
автономные мониторы используются для контроля за функционированием
94
отдельных подсистем вычислительной системы, например процессов ввода
— вывода, работы внешних запоминающих устройств и др. В отличие от
встроенных автономные мониторы используются для оценки
функционирования системы лишь периодически.
Основное достоинство программного способа построения мониторов
— возможность получения сколь угодно детальной информации. Недостатки
— зависимость программных мониторов от типа ЭВМ и операционной
системы, а также влияние монитора на временные аспекты
функционирования системы. Программные мониторы создаются для ЭВМ и
операционных систем конкретных типов. Поэтому постановка на ЭВМ новой
операционной системы или расширение операционной системы требует
модификации измерительных средств. Поскольку программы монитора
реализуются совместно с прикладными и системными программами, об-
работка заданий при измерениях растягивается во времени. Встроенные
программные мониторы характеризуются незначительной
ресурсоемкостью и порождаемая ими нагрузка на процессор невелика.
Автономные программные мониторы имеют значительную ресурсоемкость,
которая может составлять 10—15% процессорного времени.
Выборочные мониторы позволяют снижать нагрузку на ресурсы за счет
увеличения периода регистрации, однако при этом для получения
представительного объема данных приходится увеличивать
продолжительность измерений.
Аппаратный монитор — комплекс технических и, возможно,
программных средств, предназначенных для измерения процессов
функционирования вычислительных систем. Монитор получает информацию
о состоянии системы посредством электрических сигналов,
характеризующих состояние отдельных устройств и блоков. Для измерений
выявляются точки подключения монитора к системе, в которых
присутствуют сигналы, представляющие состояние устройств.
95
10.4. Оценка функционирования вычислительных систем

Оценка функционирования вычислительных систем сводится к


обработке измерительных данных, зарегистрированных программными и
аппаратными мониторами, с целью определения системных характеристик
(производительность, время ответа и надежность), показателей
использования ресурсов, характеристик рабочей нагрузки, а также с целью
идентификации системы. Наиболее широко используется двухэтапный
способ оценки функционирования. На первом этапе собираются и
накапливаются в архиве измерительные данные. На втором этапе данные
обрабатываются. Программные средства хранения, доступа к данным и
оценки функционирования совместно с положенными в их основу концепту-
альными и математическими моделями функционирования и методами
измерений образуют систему оценки функционирования.
Средства хранения создают наборы измерительных данных. Как
правило, измерительные данные, формируемые монитором, представляют
собой событийные наборы, в которых записи соответствуют отдельным
событиям. С целью экономии памяти, используемой для хранения данных,
событийные наборы перед записью в архив преобразуются в наборы с
объектной структурой, в которых записи соответствуют таким объектам, как
задание. Объектные наборы, как и событийные, имеют последовательную
организацию с упорядоченными во времени записями об объектах.
Преобразование событийных наборов в объектные выполняется
программами конвертирования, каждая из которых соответствует
монитору определенного типа.
Оценка функционирования системы в большинстве случаев про-
изводится на основе некоторого подмножества хранимых в архиве
измерительных данных, относящихся к определенным периодам работы
системы или к определенным классам заданий. Селективная выборка данных
из архива выполняется программными средствами выборки, которые затем
96
формируют наборы данных об определенных классах объектов (временные
интервалы, группы пользователей, продолжительность пребываний заданий в
системе и др.). Сформированные наборы данных обрабатываются
программами оценки системных характеристик, загрузки ресурсов, рабочей
нагрузки и т. д. Результаты оценки представляются в виде выходных
документов. Для оценки характеристик используются как специально
разрабатываемые программы, так и пакеты программ общего применения,
например программ статистического анализа.
Эффективность вычислительной системы существенно зависит от
степени согласованности конфигурации и режима функционирования
системы с нагрузкой, создаваемой прикладными задачами и операционной
системой. Поэтому для решения задач системной и технической
эксплуатации и при проектировании систем необходимо располагать
сведениями о потребностях задач в ресурсах системы. Для получения этих
сведений существует два способа:
1) анализ программ, в процессе которого оценивается потребность в
памяти, процессорном времени и других ресурсах в расчете на одну
реализацию каждой программы;
2) измерение процесса функционирования ЭВМ и обработка
измерительных данных.
Анализ программ с целью определения создаваемой ими нагрузки -
достаточно сложный процесс, требующий детальных сведений, во-первых, о
структуре программы и, во-вторых, о распределении значений исходных
величин, влияющих на порядок выполнения программы. Поэтому оценка
нагрузки путем анализа программ производится только для
специализированных систем, реализующих небольшое число относительно
несложных программ.
Оценка нагрузки на основе измерительных данных — наиболее широко
используемый способ анализа нагрузки систем общего назначения и
проблемно-ориентированных. При этом проводятся измерения процесса
97
функционирования ЭВМ в течение представительного промежутка времени,
охватывающего выполнение 1— 2 тыс. заданий. Полученные данные
обрабатываются применительно к выбранной модели нагрузки, в результате
чего оцениваются параметры нагрузки, воспроизводимые моделью.
Рабочая нагрузка вычислительных систем общего назначения оце-
нивается на основе измерений процесса функционирования. Для оценки
рабочей нагрузки выбирается учетная единица работ: при пакетной
обработке — задание, а при оперативной — взаимодействие пользователя с
системой, называемое транзакцией.
На основе измерительных данных, полученных с помощью монитора,
формируется объектный набор данных, каждая запись которого
характеризует одну учетную единицу работы, например отдельное задание. В
зависимости от типа монитора состав данных в записи может быть
различным. Так, запись может содержать трассу процесса выполнения
работы либо менее детальные сведения, соответствующие некоторой модели
процесса. Эти данные используются для оценки рабочей нагрузки —
определения ее состава и параметров.
Для повышения достоверности оценки необходима обширная
статистика.

Лекция 11
Концепция оценки производительности вычислительных систем

Вопросы:
1. Однородное и неоднородное представление рабочей нагрузки
2. Классификация рабочей и системной нагрузки
3. Оценочное тестирование производительности ВС
98
Рабочую нагрузку, зафиксированную при измерении процесса
функционирования системы в достаточном интервале времени, можно
представить среднестатистическим заданием, параметры которого — среднее
число обращений к периферийным устройствам R2 , …, RN и длительность
процессорной обработки и ввода—вывода 2 , …, N ,— определяются как
статистические средние на множестве выполненных заданий. Представление
рабочей нагрузки заданием одного типа со среднестатистическими
параметрами называется однородным.
В подавляющем большинстве случаев рабочая нагрузка состоит из
неоднородных заданий, существенно различающихся по объему
используемых ресурсов — в десятки и даже сотни раз. Различия в
ресурсоемкости учитываются при обработке данных путем разбиения
заданий на классы, каждый из которых объединяет задания с примерно
одинаковыми свойствами, но существенно отличными от свойств заданий
других классов. Классификация заданий используется для создания мульти-
программных смесей, позволяющих равномерно загружать ресурсы и за счет
этого повышать производительность системы, а также при назначении
заданиям приоритетов, с помощью которых обеспечивается необходимое
время ответа, например малое время для коротких заданий.
Представление о неоднородности нагрузки дает распределение
(гистограмма) параметров, таких, как суммарное время выполнения заданий,
число обращений ni*, к периферийным устройствам Ri , i = 2,...,N, и время
использования заданием  i устройства Ri .
Представление рабочей нагрузки в виде совокупности классов
называется неоднородным. При нем класс характеризуется долей заданий,
относящихся к этому классу, и среднестатистическими свойствами задания,
определяющими потребность задания в ресурсах системы (память,
процессорное время и объем ввода—вывода).
Необходимость неоднородного представления рабочей нагрузки связана,
во-первых, с организацией рациональных режимов обработки, т. е. с высокой
99
производительностью системы и требуемым качеством обслуживания
пользователей. Во-вторых, неоднородное представление позволяет более
точно идентифицировать нагрузку, например, моделями центрального
обслуживания и создавать более информативные модели производитель-
ности вычислительных систем.

11.2. Классификация рабочей и системной нагрузки

Наиболее существенный момент классификации — выбор признаков, в


качестве которых при классификации рабочей нагрузки выступают
параметры, характеризующие потребность заданий в ресурсах системы.
Набор признаков должен быть достаточным для разделения на классы
объектов с различными свойствами (существенными для классификации) и
вместе с тем по возможности минимальным, чтобы упростить процесс
классификации. При классификации заданий, выполняемых в режиме
пакетной обработки, стремятся оптимизировать мультипрограммную смесь
путем составления ее из заданий разных классов, создающих в совокупности
одинаковую нагрузку на все ресурсы. Поэтому в качестве признаков
классификации используются емкость занимаемой оперативной памяти и
интенсивность обращений к периферийным устройствам — в расчете на
один миллион процессорных операций. При классификации заданий,
выполняемых в режиме оперативной обработки, стремятся обеспечить в
первую очередь наилучшее время ответа для работ разной
продолжительности и поэтому в качестве признаков применяется объем
используемых ресурсов.
Существенными для классификации являются параметры с большими
коэффициентами вариации (отношением среднего квадратического
отклонения к математическому ожиданию), а параметры, коэффициенты
вариации которых, определенные на множестве классифицируемых
10
объектов, близки к нулю, исключаются из состава признаков. Если несколько
параметров коррелированы (парные коэффициенты корреляции не меньше
0,7), в качестве признака классификации используется только один из них.
Для классификации рабочей нагрузки наиболее широко используются
три метода: параметрическая классификация; классификация по ядру
нагрузки; автоматическая классификация — кластер-анализ.
Параметрическая классификация основана на так называемых
решающих правилах, которые устанавливают области значений параметров,
соответствующие каждому классу. Решающие правила назначаются исходя
из целевых требований к классификации и состава ресурсов системы.
Классификация по ядру нагрузки сводится к выделению подмножества
заданий, создающих основную нагрузку на систему, например 90 %
нагрузки. Ядро нагрузки выделяется следующим образом. Для заданий
одного наименования определяется число реализаций и средние показатели
нагрузки, по которым вычисляется суммарная нагрузка, создаваемая всеми
реализациями задания. Задания упорядочиваются по убыванию суммарной
нагрузки на ресурсы системы. Первые несколько заданий, создающие в
сумме 90%-ную нагрузку, рассматриваются в качестве ее ядра. Как правило,
ядро состоит из небольшого числа заданий, обычно 10—20, и вполне
обозримо. Путем анализа параметров заданий, входящих в ядро, назначаются
классы, каждый из которых состоит из небольшого числа заданий (обычно 1
—3). Для выделенных классов устанавливаются граничные значения
параметров, на основе которых строятся решающие правила для
параметрической классификации заданий, не вошедших в ядро. Во многих
случаях
x2 последние просто объединяются в один дополнительный класс.

C2 C3

Ai C1
x2i

0 x1i x1
10

Рис. 5.2. Классификация задач

Методы автоматической классификации — кластер-анализа —


основаны на использовании вычислительных процедур, оценивающих
расстояния между классифицируемыми объектами и объединяющих
близлежащие объекты в компактные множества, называемые кластерами
(классами).
При классификации объектов по n признакам каждый объект
рассматривается как точка в n -мерном пространстве с координатами,
определяемыми признаками классификации (рис. 5.2). Здесь x1 и x2 - признаки
классификации, Аi — объект со значениями признаков (x1i и x2i) и С1 , С2 , Сз
— кластеры, образованные подмножествами классифицируемых объектов.
Число кластеров, выявляемых в процессе автоматической классификации,
зависит от числа признаков классификации, их дисперсий и свойств
объектов. Чем больше число признаков и их дисперсии, тем больше
вероятность существования значительного числа кластеров.
В силу автоматизма, присущего всем методам кластер-анализа,
классификация ведется вне прямой связи с ее целями. Процесс
классификации управляется путем выбора признаков, их масштабирования и
задания значений управляющих параметров, используемых процедурами
классификации для оценки компактности подмножеств. При классификации
десятков или нескольких сотен объектов затраты машинного времени
умеренны, а большего числа объектов — весьма значительны.
Классификация позволяет представить множество заданий, со-
ставляющих рабочую нагрузку, небольшим числом классов заданий, обычно
10
3—10 классами. За счет этого описание рабочей нагрузки становится весьма
компактным и в то же время сохраняется возможность дифференцировать
системные характеристики, характеристики процессов и использования
ресурсов по отношению к разнотипным заданиям, связанным с различными
группами пользователей.
Системная нагрузка. Выполнение прикладных процессов под-
держивается системными процессами. Нагрузка, создаваемая системными
процессами, оказывается достаточно большой и составляет десятки
процентов для процессора и внешней памяти. Поэтому системная нагрузка
учитывается при анализе производительности систем, а также в моделях
производительности, используемых для выбора конфигурации и режимов
функционирования.
В отличие от рабочей нагрузки, для которой потребность в ресурсах
связывается с отдельными заданиями, системная на-
грузка представляется как единое целое, относящееся ко всем выполняемым
работам. Системная нагрузка регистрируется мониторами как одна из
системных характеристик, оцениваемая, например, коэффициентом загрузки
процессора со стороны системных процессов. Для определения объема
используемых ресурсов необходимо системную нагрузку распределить
между всеми заданиями. Аналогично для прогнозирования системной
нагрузки при изменении рабочей нагрузки необходимо установить зависи-
мость между ними. Поэтому системную нагрузку стремятся выразить как
функцию параметров рабочей нагрузки.
Наиболее широко используется представление системной нагрузки в
виде уравнений регрессии. В качестве параметров нагрузки используются
емкость памяти, выделяемая для размещения операционный системы, число
процессорных операций или коэффициент загрузки процессора системными
процессами и аналогичные параметры каналов ввода—вывода. Системная
загрузка процессора и каналов ввода—вывода наиболее существенно зависит
от следующих параметров заданий: числа шагов и числа операторов языка
10
управления, указанных в задании. При измерениях регистрируются
параметры системной нагрузки и одновременно указанные параметры
заданий. Затем измерительные данные обрабатываются с помощью программ
регрессионного анализа с целью получения уравнений регрессии.

11.3. Оценочное тестирование производительности ВС

Оценочное тестирование производительности вычислительных систем


выполняется с помощью специально разработанных для этой цели программ
и предназначено для определения характеристик исследуемой системы при
решении заданного набора задач.
Важность применения оценочного тестирования значительно возросла в
последнее время, когда стало возможным и экономически выгодным строить
системы из готовых компонентов - вычислительных узлов на базе
материнских плат персональных машин или рабочих станций и
высокоскоростных коммутационных сетей. В таких системах очень важно
правильно выбрать компоненты.
В процессе поиска стандартной единицы измерения производительности
компьютеров было предложено несколько различных единиц измерения.
Наиболее подходящей единицей измерения производительности было бы
время выполнения реальных программ. Однако, на практике наиболее часто
используются либо единицы измерения вообще не учитывающие
особенности реальных программ (например, количество выполняемых
команд в единицу времени), либо специально разработанные тестовые
программы, которые имеют одинаковые с реальными программами доли
команд определенных типов в общем объеме выполняемых команд.
MIPS. Одной из альтернативных единиц измерения производительности
процессора (по отношению к времени выполнения) является MIPS -
(миллион команд в секунду).
10
В общем случае MIPS есть скорость выполнения команд в единицу времени,
т.е. для любой программы MIPS есть просто отношение количества команд в
программе к времени ее выполнения.
Однако, использование MIPS в качестве метрики для сравнения
вычислительных систем наталкивается на следующие три проблемы.
Во-первых, MIPS зависит от набора команд процессора, что затрудняет
сравнение по MIPS компьютеров, имеющих разные системы команд.
Во-вторых, MIPS даже на одном и том же компьютере меняется от
программы к программе.
MFLOPS. Измерение производительности компьютеров при решении научно-
технических задач, в которых широко используется арифметика с плавающей
точкой, вызывает особый интерес. Обычно для научно-технических задач
производительность процессора оценивается в MFLOPS (миллионах чисел-
результатов вычислений с плавающей точкой в секунду, или миллионах
арифметических операций над числами с плавающей точкой, выполненных в
секунду).
Как единица измерения, MFLOPS, предназначена для оценки
производительности только операций с плавающей точкой, и поэтому не
применима вне этой ограниченной области.
Ясно, что рейтинг MFLOPS зависит и от машины и от программы. Этот
термин базируется на количестве выполняемых операций, а не на количестве
выполняемых команд. Одна и та же программа, работающая на различных
компьютерах, будет выполнять различное количество команд, но одно и то
же количество операций с плавающей точкой. Именно поэтому рейтинг
MFLOPS может быть использован для сравнения различных машин между
собой.
Однако, при использовании MFLOPS обнаруживаются некоторые проблемы.
Прежде всего, это связано с тем, что наборы операций с плавающей точкой
не совместимы на различных компьютерах. Например, в суперкомпьютерах
фирмы Cray Research отсутствует команда деления (имеется, правда,
10
операция вычисления обратной величины числа с плавающей точкой, а
операция деления может быть реализована с помощью умножения делимого
на обратную величину делителя). В то же время многие современные
микропроцессоры имеют команды деления, вычисления квадратного корня,
синуса и косинуса.
Другая проблема заключается в том, что рейтинг MFLOPS меняется не
только на смеси целочисленных операций и операций с плавающей точкой,
но и на смеси быстрых и медленных операций с плавающей точкой.
Укажем некоторые из специальных тестовых программ.
Широкое распространение получил синтетический тест Dhrystone,
который позволял оценивать эффективность процессоров и компиляторов с
языка C для программ нечисловой обработки. Он представлял собой
тестовую смесь, у которой 53% составляют операторы присваивания, 32% -
операторы управления и 15% - вызовы функций. Это короткий тест: общее
число команд равняется 100. Скорость выполнения программы из этих 100
команд измеряется в Dhrystone в секунду.
Программа тестирования LINPACK – представляет собой пакет фортран-
программ для решения систем линейных алгебраических уравнений.
Измерение производительности не было целью создания программы
LINPACK. Однако, алгоритмы линейной алгебры весьма широко
используются в самых разных задачах, и поэтому измерение
производительности систем с помощью LINPACK представляют интерес.
В процессе работы этой программы выполняются базовые арифметические
действия над матрицами чисел с плавающей запятой размером 1000х1000
элементов. Подпрограммы, входящие в LINPACK, структурированы. Все
операции выполняются над числами с плавающей точкой, представленными
с двойной точностью. Результат измеряется в MFLOPS.
10
Лекция 12

Процессоры ЭВМ

Вопросы:

1. Определение и циклы работы процессора

2. Функциональная и структурная организация процессора

3. Методы повышения производительности процессоров

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


аппаратно – микропрограммным способом набора операций, составляющих
его систему команд.
Система команд:
F={f1 , f2 , …fn},
где fi ,i =1..n выполнимая микрооперация аппаратно – микропрограммным
способом.
Все операции, входящие в в систему команд условно деляться на следующие
группы:
1. Команды пересылки
- внутри микропроцессора (move)
- команды ввода/вывода (in, out)
2. Арифметические операции (*, /, -, +)
3. Логические операции
4. Операции передачи управления
- безусловная передача управления
- условная передача управления
5. Команды передачи управления
6. Команды управления (задача супервизора, выполнить асинхронные
вычисления и т.д.)
10
7. Специальные команды (работа со списками, с цепочками данных,
умножение со сложением, умножение с вычитанием)
Цикл работы процессора – действия процессора по исполнению одной
команды. Он включает в себя:
1. Выборку фрагмента программы из ОП, распаковку команды и размещение
ее в регистре команд.
2. Формирование исполнительного адреса операндов и проверка адреса на
корректность.
3. Выбор операндов из ОП или регистровой памяти.
4. Выполнение операции указанной в операционной части команды (КОП).
5. Обработка прерывания.
6. Запись результата.
Действия по выполнению цикла работы процессора выполняются каждым
процессором, но отличаются друг от друга, в зависимости от структуры и
архитектуры компьютера. В отдельных процессорах составляющие цикла
работы совмещены во времени.

1. Выбор команды:
зависит от длины слова ОП (L ОП) и длины команды (LК).
А) L ОП = LК , то за одно обращение выбирается одна команды (машины спец.
назначения).
Б) L ОП < LК, то необходимы несколько обращений к ОП.
В) L ОП > LК, выбирается за одно обращение фрагмент программы.
Необходимо одно или два обращения для выборки одной команды, что
снижает быстродействие. Чтобы сократить количество обращений к ОП в
процессорах используют:
- буферные регистры,
- выравнивают адреса команд по целочисленной границе байтов,
10
- КЭШ команды. В КЭШ расположен фрагмент программы. Обращение
идет не к ОП, а к КЭШ, что увеличивает быстродействие (Pentium II –
16 КБ Кэш данных, 16 КБ – КЭШ команд),
- симулятивное использование команд. Это опережающий просмотр
программы, глубина просмотра Pentium – 128 команд, Pentium II – 1024
команды. Просматриваются результаты выполнения этих команд
определяются условия перехода, в регистр очереди команд загружается
та ветвь программы, которая подлежит исполнению с учетом
результатов команд переходов условных и безусловных.
2. Формирование исполнительного адреса:
Исполнительный адрес формируется с учетом всех возможных способов
адресации процессора.
В III поколении процессоров исполнительный адрес равен физическому.
ЕА:=(Х) + (В) + Д
Х, В – адреса РОНов, где хранятся операнды (Х- индекс, В –база, Д -
смещение). Нулевые адреса Х, В означают, что данные компоненты
отсутствуют при формировании ЕА – исполнительного адреса.
В IV поколении процессоров имеет место фрагментация памяти.
Фрагментация – наличие свободных мест между загруженными
программами, устраняется программами дифрагментаторами.
Для борьбы с фрагментацией:
1. Осуществляется управление памятью через дискрипторные таблицы.
2. Вся ОП делиться на сегменты размером от 16 КБ, после i 486 сегмент
переменного размера (от 1 байта то всего размера ОП).
Физический адрес: ЕА формируется, используя все способы адресации
микропроцессора (прямая, индексная, коственная и др.) Имея ЕА
формируется линейный адрес ЛА:=ЕА + смещение
Процессоры IV поколения работают в 3 – режимах: реальный, защищенный,
виртуальный. Для реального и защищенного ЛА= физическому, для
10
виртуального вырабатываются 4 линейных адреса – виртуальные адреса,
можно переключаться между 4 –мя областями памяти.
3. Выборка операндов:
Физические адреса всегда указывают только адрес начального байта
операнда, с которого выбирается фиксированная единица информации (2, 4,
8, 16 байт). Сколько байтов подлежат выборке определяется полем признака
команды. Отчет байтов ведется в машинах III поколения слева направо, в IV
- справа налево.

4. Выполнение операции:
Осуществляется по разному.

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

12.2. Функциональная и структурная организация процессора.

Структурная организация – набор устройств, блоков и связей между ними.


11
Функциональная организация – форматы команд, алгоритмы реализации
операций (поразрядная обработка или параллельная), ширина шин адреса,
данных, система прерываний.
Структурная организация.
ОУ
ОА Программы ОП

ОА – операционный автомат
Команды
УА – управляющий автомат

ОУ – операционное устройство
Микрокоманды
У1 У2 Уn Yi – микрооперации из УА

УА Xi – внутренний осведомительный сигнал


Элементарные действия
xi
м/о Xp – внешний осведомительный сигнал в
xp ЦУУ
gi
УС1 УС2 УС n gi – код операции i - той команды

УС – управляющий сигнал

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


процессора. Затем микропрограммы выполняются друг за другом. По мере
исполнения микроопераций и микрокоманд формируются особые случаи или
осведомительные сигналы: перенос из старшего разряда, переполнение
разрядной сетки, равенство нулю результата операции, знак результата и т.д.
Часть осведомительных сигналов поступает в УА для изменения
естественного порядка выполнения микрокоманд (ветвление, циклы);
формируются внешние осведомительные сигналы; сигналя для центрального
11
устройства управления по которым прерывается выполнение текущей
программы, осуществляется обращение к периферийным устройствам и т.д.
ЦУУ в машинах III поколения представлено явно, в IV поколении -
реализовано на программном уровне. В IV поколении ОП вынесено за
пределы процессора.

В современных процессорах Тцикла=(12) Ттакта; Ттакта=(24)Т0 , где Т0-


импульсы синхронизирующих последовательностей. Т0=1/F0, где F0- частота
тактирования CPU.

Операционный автомат процессора.


Операционный автомат (ОА) состоит из основных частей: 1)
запоминающая часть(регистры, счетчики, запоминающие элементы); 2)
комбинационная часть (мультиплексоры, сдвигатели, АЛУ, сумматоры,
дешифраторы, шифраторы, логические схемы); 3) Линии связей между
элементами или устройствами (магистрального типа, с непосредственными
связями и комбинированные).
Структура ОА см. на примере вычислительной секции 1804ВС1 и ОА
процессора машин III поколения.
ОА характеризуются: 1) производительностью – количество
микроопераций за единицу времени WОА; 2) быстродействием
t=длительность выполнения микрооперации, данный показатель стремятся
сократить, он определяется глубиной задержки логических схем; 3)
сложностью.

Каноническая структура ОА.


ОА оцениваются параметрами: 1) производительность; 2)
быстродействие; 3) сложность (затраты оборудования); 4) однородность
(регулярность структуры) – характеризуется количеством однотипных
11
элементов и связей между ними. Чем проще элемент и проще связь, тем
степень однородности выше.
Структура ОА определяется классом решаемых на нем задач.
Задача -> {методы решения} -> алгоритм -> {набор операций Q1(аппаратно-
микропрограммным путем) и Q2(программным путем)} ->
{микропрограммы} -> {микрокоманды} -> {микрооперации}
Состоянием ОА ставится в соответствие запоминающая часть (S), а
множеству микроопераций – множество комбинационных схем. S –
множество слов операционного автомата (I -входных, L-выходных, O-
промежуточных).{S1,S2,...,SN}
Y – множество микроопераций {ym}={Sk=k(S1,S2,...,SN)}, где k – некоторая
вычислимая функция
X – множество осведомительных сигналов, X={XL}={L (S1,S2,...,SN)}, где L
– некоторая комбинационная схема.
Структура ОА синтезируется следующим образом:
1) Словам S1,S2,...,SN, описывающих внутреннее состояние, ставятся в
соответствие регистры S1,S2,...,SN с разрядностью n1,n2,...,nN , которые
равны длине слова операционного автомата. Если в словах есть поля, то в
структурной схеме ОА выделяют регистры (подрегистры).
2) Словам Sd1,Sd2,...,Sdm (входным) ставятся в соответствие входные полюсы
d1,d2,...,dm. Каждому внутреннему слову ставится в соответствие регистр,
полюс с регистром соединяется шиной.
3) Выходные слова Sr1,Sr2,...,SrQ ставятся в соответствие выходным полюсам
r1,r2,...,rQ.
4) Каждой микрооперации ставится в соответствие комбинационная схема
Ym: S1=m{ S1,S2,...,SN}
5) Каждому логическому условию, так же ставится в соответствие
комбинационная схема XL: L{ S1,S2,...,SN }
11
Определение: структура ОА, полученная путем замены каждого элемента
функции (слова микрооперации и логического условия) соответствующими
элементами структурного базиса (регистрами, комбинационными схемами)
является основополагающим для синтеза структур ОА и называется
канонической структурой.
Эта структура имеет следующий вид:

d 1 d 2 ... d m S 1 S 2 S N r1 r2 ... rm

  

     L

x1 x2 ... xL

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


максимальны.

Пути сокращения затрат оборудования: 1) реализовать однотипные


микрооперации на одних и тех же комбинационных схемах (Эквивалентные
комбинационные схемы); 2)объединить комбинационные схемы по каждому
элементу памяти (регистры).

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

d 1 d 2 ... d m S 1 S 2 S N r1 r2 ... rm

{H 1 } {H 2 } {H N }
  

Hi – код управления схемой 1.


На этой схеме комбинационные схемы состояний не показаны.
Элементы однотипные, структура однородна – это ОА с распределением
микроопераций.
Микрооперации ОА, которые не могут быть выполнены одновременно,
называются несовместимыми. Например, запись числа в регистр и чтение из
этого регистра необходимо разделить во времени.
В каждый момент времени может быть выполнено N операций в
канонической структуре: Wk=Nмо/tk. Производительность I – автомата
WI=Nмо/tI, причем tI  tk. Сложность Слк>СлI.

М – автоматы.
Ели взять все комбинационные схемы I – автомата и объединить в одну
комбинационную схему, то получится следующая структура:
Z=Ф(H,A,B)=ФH(A,B)
11
B B
A A
a1 b 1 a2 b 2 aN b N
{H 1 }
S 1 S 2 ... S N 

c1 c2 cN Z
C

Z – выходной сигнал комбинационной схемы


Для данной схемы WM=1/tM; tM>tI; СлМ<СлI.

Характеристики промежуточных вариантов автоматов можно


представить в виде графика:

характеристики
tM W I

Сл I
Все IM – автоматы делятся на

Сл
классы, характеризуемые
M tI
1/t M
IM - автоматы степенью обобществления
M I автомат
комбинационной частью ОА.

IM – автоматы с параллельной комбинационной частью:


11
C
B С
B
A A
a1 b 1 c1 a2 b 2 c2 aN b N cN
{H } {H }
S 1 S 2 ... S N
Ф1
 Ф2


d d d Z 1 =Ф 1 (A)
1 2 N
D
e1 e2 eN Z 2 =Ф 2 (B,C)
E

В данном случае все операции делятся на унарные (один операнд) и


бинарные (два операнда). WIM=2/tIM; tIM<tM; СлIM>СлM.

IM – автоматы с последовательной комбинационной частью.

{H 2 }
B 
Z 2 Z 2 =Ф H (B)
2
{H 1 }
A  Z 1 =Ф 1
H (Z 2 ,A )=Ф 1
H (Ф 2
H (B),A)
Z 1 Z 3 =Ф 3
H (Z 1 )=Ф 3
H (Ф 1
H (Ф 2
H (B),A))
Z {H 3 }
C 3

11
S – автоматы.

1 чтение
А(адрес) A ЗУ
L запись

a1 c1 a2 d 1

S 3 ... S m S 1 S 2

b 1 A A b 2
1 2

   
Z

Пунктиром выделена дополнительная загрузка. КС сосредоточена в


одном месте, есть ЗУ для массивов информации.
Работа автомата: по управляющим сигналам а1 и а2 числа записываются
в S1 и S2, а по сигналам b1 и b2 передается на вход КС. Управляющий сигнал
к осуществляет выбор одной из м/о, реализуемой КС. В 1-ом такте по адресу
А число выбирается в S1 из ЗУ, во втором такте – из ЗУ в S2. В третьем такте
содержимое обоих регистров S1 и S2 (или одного из них) поступает на вход
КС. Результат дописывается в ЗУ. Главная задача: сокращение тактов на
выполнение одной м/о. Для этого : 1)вводят дополнительные регистры S3...Sm,
чтобы совместить такт выборки слова из ЗУ с исполнением очередной м/о;
2)вводится дополнительная загрузка, S2 – итоговый регистр (аккумулятор);
3)содержимое ЗУ подается на вход КС минуя элементы памяти.
В общем случае м/о реализуется за 3 такта, а введение указанных
способов ускорения снижает время выполнения до 2-х и 1-го тактов.
11

На характеристики ОА существенным образом влияют:


1. Линии связей.
2. Тактирование ОА.
1.1 Линии связей магистрального типа.
Достоинства: а) простота; б)малые затраты оборудования.

S1 S3
Недостатки: а) в каждый момент времени
информация передается между одним
S2 S4
источником и одним или несколькими
получателями.

Если разрядность шины 32, Fцикла =100МГц, то пропускная способность шины


ш=32/Тц=32*Fцикла=32*100*106=3,2 (Гбита/сек)=400 (Мбайт/сек).
Для увеличения скорости обмена в ОА используются несколько магистралей.
В машинах III поколения использовали 3 и более шин; в машинах IV
поколения: IBM PC/XT – 3 магистрали (шины), IBM PC/AT – 6 магистралей
(шин). Введение дополнительных магистралей увеличивает количество
передач в единицу времени.
б) каналы магистрального типа имеют большую емкостную нагрузку, что
снижает возможность повышения тактовых частот.
в) поскольку магистрали – универсальные линии связи, и она должна
обладать функциональной полнотой, то по структуре она оказывается
достаточно сложной.

1.2 Линии связи непосредственного типа.

S1 S3

a1 a2
1) Линии связи устанавливаются содержательными
S2 S4 микропрограммами.
2) В каждый момент времени можно одновременно
передать данные между несколькими группами устройств. Например, S1-
>S2 и S3->S4 (S2->S3 и S4->S1).
11
3) Для увеличения количества передач в качестве элементов памяти
используют 2-х ступенчатые триггеры (МS регистры – Master/Slave), а
также промежуточные конвейерные регистры.
4) Структурно непосредственные связи проще магистралей и по числу линий
и по временным диаграммам обмена.

Тактирование ОА

TОА=УАОА – такт ОА.


WОА=Nм/о /TОА – производительность.
I автомат: каждый элемент памяти имеет свою КС, поэтому он имеет
наибольшее число м/о выполняемых за один такт.
Все м/о можно разделить на совместимые, те которые могут
выполняться одновременно и несовместимые. Например, записать в S1 число
и произвести его сдвиг невозможно одновременно. Поэтому включать их в
одну микрокоманду нельзя. Несовместимые м/о можно сделать
совместимыми разнеся их по разным тактам управляющих сигналов. Такое
тактирование называется многофазным.
В машинах III поколения такт работы процессора четырехфазный
Tпроц.=1+2+3+4. В машинах IV поколения Tпроц=Ti+...+Ti+T1+T2+T3+Tw+...
+Tw+T4+Ti ,где Тi- холостые синхроимпульсы в режиме ожидания,
прерывания, останова ; T1,T2,T3,T4 – рабочие синхроимпульсы; Тw – импульсы
ожидания определяемые скоростью внешнего устройства.

12.3. Методы повышения производительности процессоров.


1) Конвейерные процессоры.
2) Векторные процессоры.
3) Скалярные процессоры.
4) Суперскалярные процессоры.

12.3.1 Конвейерные процессоры


12
Принципы совместимости операций предложил академик Лебедев в 1956
году.
Время цикла Тпр=t1+t2+t3+t4+t5 (1), где t1 – выборка команды; t2 –
формирование исполнительных адресов; t3 – выборка операндов; t4 –
выполнение операции и запись результата; t5 – обработка прерываний.
Если все операции выполняются последовательно на одном операционном
автомате, то Ткоманды=ti (1), где i=1..5 для нашего случая. Производительность
Wк=1/Tk=1/ti (2). Анализируя выражения 1 и 2 : аппаратные затраты
невысоки за счет высокой совместимости узлов процессора.
Лебедевым был предложен принцип совместимости когда он
использовал несколько ОА. Например, в машине М20 использовалось 5 ОА.

ОА1 ОА2 ОА3 ОА4 ОА5

Последовательность выполнения микроопераций:


1 1 - - - -
2 2 1 - - -
3 3 2 1 - -
4 4 3 2 1 -
5 5 4 3 2 1
Начиная с пятого такта процессор обрабатывает одновременно 5
команд. Для каждой команды время выполнения - ti . Производительность
повышается примерно в 5 раз, но в общем случае titj (ij). Возникает
проблема синхронизации.
Различают два типа конвейеров:
1) Синхронный конвейер. Тцикла=max ti (3),где i=1..5, при этом возникают
различные ситуации:
А) ti+tj>Tц (4). Если данное условие не выполняется, то данные
микропрограммы i и j объединяются и реализуются на одном ОА.
В) Когда tp>>ti+ti (4’), тогда tp делится на tp1 и tp2 и реализуется на разных
ОА.
12
Выражения 4 и 4’ обеспечивают сокращение времени простоя при
постоянном цикле. Главная задача выровнять ti. Производительность из-за
простоев уменьшается и значительно.
2) Асинхронные конвейерные ОА.
Каждый уровень конвейера содержит триггер готовности и триггер
занятости. Триггер занятости(Тз) устанавливается в 1 если он занят
обработкой текущей микропрограммы и не может принять информацию
предыдущего уровня. Триггер готовности (Тг) устанавливается в 1 если
обработка, выполнение микропрограммы закончена и готов передать данные
в ОА следующего уровня. Тогда условия передачи информации с одного
уровня на другой можно показать так: Tг(i)=1;Тз(i+1)=0.
Широко применяются конвейеры с асинхронным способом передачи.
Данные режим получил название «Квитирование» – запрос с
подтверждением.

Структурная интерпретация конвейеров.


Если имеем набор задач L.
Выбирая длину конвейера, при
l l1 l2 l3 l4 l5 l6
условии наличия больших
l l1 l2 l3 l4 l5 l6 I
l l1 l2 l3 l4 l5 II программ, способных загрузить
l l1 l2 l3 l4 III конвейер, можно добиться того, что
l l1 l2 l3 IV
в каждом такте процессора Тц
l l1 l2 V
l l1 VI будем получать результат одной

Т ц
2к 3к 4к 5к 6к команды. В результате
длительность выполнения любой операции, независимо от ее длины
(короткая- сложение или длинная - умножение) составит 1 такт, что имеет
место в современных процессорах.
Например, производительность процессора i860 при частоте 40МГц
составляет 80 миллионов операций в секунду.
12
Структурная схема конвейерного процессора машин III поколения.
До внедрения синхронной технологии на базе микропроцессоров
наибольшее распространение имел асинхронный способ обработки
информации. Например, в машине ЕС 1050 одновременно выполнялись 3
команды. Это стало возможным благодаря низкому уровню обобществления
оборудования ядра процессора.
1-й уровень реализует выборку фрагмента программы из ОП, длина слова
которой – 8байт. Выделение команды из слова ОП и размещение ее в
регистре команд называется распаковкой.
2-й уровень – формирование адресов операндов; выборка их из регистровой
или оперативной памяти и размещение в специальных регистрах
центрального устройства управления.
3-й уровень – выполнение действий над операндами в АЛУ и запись
результатов в местную или оперативную память. Каждый уровень
процессора составляет функционально независимые узлы (блоки).
Совокупность узлов обеспечивающих выполнение одновременно 3-х команд
называется центральным узлом процессора (управления).

в ОП
БВК
Местная память БВК – блок выборки команд
I (регистровое ЗУ)
из ОП
БВД – блок выборки данных
БВД ЦУУ БСА БСА – блок сумматора адреса
II
БАР – блок адреса результата
в АЛБ БАР в ОП ЦУУ – центральное устройство
III
управления
в каналы и
ОП

Каждый уровень использует 2триггера (триггер готовности и триггер


занятости) для обеспечения асинхронного обмена.
12
Пример совмещения циклов для обработки команд формата RX:
1мкс
выбор участка
I II программы
0,4мкс 0,4мкс
N N+1 M распаковка
0,6мкс
модификация
N N+1 M
адреса
1мкс
N N+1 обращение за
операндом
N N+1 операция АЛУ

N запись результата
в ОП

Время задержки в АЛУ определяется командой. Заштрихованные


области – простой блока.
В ЕС 1061 для ускорения выполнения операций используется порядка
8-ми постпроцессоров – арифметических расширителей системы команд.

12.3.2. Табличные процессоры.


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

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


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

Два варианта построения табличного процессора на запоминающих


микросхемах малой ёмкости.

1. Использование табличного процессора для вычисления значений


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

2. Алиготивные методы: когда операнд можно разбить на части и


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

Построение табличного процессора для (А8*В8)=C16.

Разобьём на составляющие: (А41*24+ А42)=А8 и (В41*24+В42)=В8,

где А41, В41-старшие 4 разряда;

А42, В42-младшие 4 разряда.

(А41*24+ А42)(В41*24+В42)= А41* В41*28+24(А41* В42+ А42* В41)+ А42* В42= C16

=tсч+2tсум 3
tоп

А41 В41 А41 В42 А41 В41 А42 В42

ROM 1 ROM 2 ROM 3 ROM 4

8 8 8 8

А41 В42

А42В42

А41В41 А42В42

15 0
С16
12
tоп -время операции; tсч -время считывания; tсум -время суммирования.

Все четыре запоминающие микросхемы одинаковые, следовательно можно


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

Лекция 13

Проблемно – ориентированные процессоры ЭВМ

Вопросы:

1. Обоснование структуры процессора нетрадиционного типа

2. Источники погрешностей работы систем дифференциальных


уравнений Шеннона

Проблемно – ориентированные процессоры – это процессоры, система


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

Рассмотрим один из вариантов проблемно – ориентированного процессора,


который называется цифровая – интегрирующая машина. Это машина,
которая в системе команд имеет всего три команды:

1.Численного интегрирования по Стилтьесу (базовая операция).

2.Операция суммирования приращений.

3.Экстраполяция приращений.

Шеннон показал, что любую математическую зависимость можно


представить в виде системы дифференциальных уравнений (ДУ) и эта
12
система называется системой дифференциальных уравнений Шеннона
(СУШ). Методы перехода от произвольной математической зависимости к
ДУ : исходная математическая зависимость дифференцируется и вводятся
подстановки до тех пор, пока промежуточная функция не начнёт
повторяться или обратится в ноль.

ФУНКЦИЯ ПОДСТАНОВКА СУШ


Сложение - dу2=dy3+dy4

вычитание. dу2= dy3-dy4

у2= y3+y4

у2= y3-y4

Умножение. dу5= y3dy4 dу2=dy5+dy6

у2= y3*y4 dу6= ydy dу6= y3dy4

dу2= y3dy4+ dy5=y4dy3


y4dy3
Деление. 1 dу2=dy6+dy7;
у5= ;
у4
у3 dу6= y3dy5;
у2= =y3*
у4 dу 4 1
dу5= - = - dy4= - y8 dy7=y5dy3;
у24 у24
1 dу5= - y8dy4;
= dy4;
у4
dу8=2 y5dy5=y9dy5;
y8=y25
=y3*y5
dy9=2dy5

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

dyq yk=ypdyq
U
dyp Основу составляет интегратор.
Yp
12

-сумматор.

dy5 dy6 dy6 y


dy2
dy3 dy7 

dy5
dy8
dy3 dy7
dy9
dy5

dy8 dy5
dy5 dy9
dy4
2

Достоинство: операция выполняется за один такт.

ФУНКЦИЯ ПОДСТАНОВКА СУШ


у= sin t y2=y; y1=t; y3=t; dу2=cosy3dy3;

у2=sin y3 y4=cosy3; y5= dу4= - siny3dy3;

dу3= wdy1;

-круговая частота, t-входной аргумент.

Отсюда СУШ будет:

dу2=cosy3dy3

dу4= - y2dy3

dу3= y5dy1
12
Начальные условия:

у2(0)= y20

у4(0)= y40

у5(0)= =const

dу1=t

Система уравнений (1).

Структурная схема вычислителя функции y=sin wt.

U1 dy2
dy3
dy4 y4
у4(0)= max
dy3 U2 dy8
-(y2) у2(0)= 0
dy2
dy1
dy3
U3
y5
у2(0)= y20

у4(0)= y40

у5(0)= =const

Рис.1.

Достоинства: простота, высокая скорость вычисления (за один такт


работы цифрового интегратора получаем значение вычисляемой функции).
Кроме функии у2 вычисляется одновременно и множество других функций
на этом же шаге: одновременно получается значение cos wt – это
переменная у4, и значение аргумента wt – это у3.Поэтому в задаче не
требуетмся производить дополнительных вычислений для получения этих
значений.

Система уравнений (1) может решаться параллельно рисунку 1, когда весь


процесс происходит одновременно на трёх интеграторах; и может
12
решаться последовательно используя только один интегратор, а все
промежуточные данные хранятся в ЗУ.

Вычислительное устройство должно содержать три функциональных


блока:

1. цифровой интегратор;
2. сумматор приращения;
3. экстрополятор (Э) приращения.

ЗУ

dy2=y4dy3; y4- это значение, при последовательной обработке, нужно


проэкстрополировать.

dyk=ypkdyqk

dyk – дифференциал вычисляемой функции.

ypk- подитегральная переменная для к-той функции.

dyqk- дифференциал переменной интегрирования q к-той функции.

B
dy pk   A pk dy z
z0

N
dy qk   A qk dy z
z 1

k=2,3,…,N , где N- последняя вычисляемая переменная.

p=0,1,2,…,N,N+1,…,B ,где N+1,…,B- определяют номера констант,


которые входят в подинтегральную функцию.

q=1,2,3,…,N – дифференциал.
13
ypk(0)= ypk0 (начальное условие).

Система уравнений (2).

Полученная система уравнений (2) носит название системы уравнений


Шеннона симметричной формы записи. Основу системы
дифференциальных уравнений Шеннона составляет интеграл Стилтьеса:

y k (i  1)   y pk (x )dy pk (x ) , (3)

где y k (i+1)-это приращение интеграла вычисляемой функции на (i+1)


шаге:

y k (i+1)=yk(i+1) - yki (4)

Для вычисления интеграла (3) в цифровых интеграторах реализуются


частные формулы численного интегрирования:

1.Частные формулы численного интегрирования нулевого порядка (или


первого порядка точности). Они называются формулами Эйлера1 и
Эйлера2.

Формула прямоугольника с недостатком:

yp (x)  (i+1)

yq0 yq1 yq2 yqn


yq(x)

xn
n
y 2 (x )  y 2 (0)   y pi * y q (i  1)
i0
x0

 - приращение методической ошибки.


13
1
(i+1)= hyp()
2

(i+1) – погрешность метода на одном шаге интегрирования.

h – шаг интегрирования.

yp – некоторое значение (промежуточное) подинтегральной функции на


шаге интегрирования.

Погрешность вычисления зависит от шага.


xn
n n
 y pi * y q (i  1)   y ki - это приращение интеграла по шагам.
i0 i 1
x0

Формула прямоугольника с избытком.

yp (x)

yq0 yq1 yq2 yqn


yq(x)

xn
y 2 (x)  y 20   y p (i  1) * y q (i  1) .
x0

Формула трапеций.
1
Yk (i  1)  (Y pki  Y pk (i  1))  Yqk (i  1)
2
Y pk (i  1)
Yk (i  1)  (Y pk (i  1)  )  Yqk (i  1)
2
n
Yk (i  1)  Yki  Yk (i  1)  Yk 0   Yki
i 1

1 2
  h Y p ( ),   [i, i  1]
12

 - погрешность.
13
Заменой в системе дифференциальных уравнений Шеннона дифференциалов
разностями и численными формулами интегрирования получаются
разностные схемы систем уравнений Д.У. Шеннона, которые являются
алгоритмами работы цифровых интеграторов.

Разностная схема систем дифференциальных уравнений Шеннона.

M
Y pk (i  1)  A
j o
pkj Yzj (i  1)

N
Yqk (i  1)  A
j o
qkj Yzj (i  1)

1
Yk (i  1)  (Y pki  Y pk (i  1))  Yqk (i  1)
2
Yk (0)  Yko
k  2,3,...N
p  0,1,2,...N , N  1,...M
q  1,2,...N

13.2. Источники погрешностей работы систем дифференциальных


уравнений Шеннона

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


данных в разрядной сетке системы. Рассчитывается разрядность
переменных и приращений (как в обычных ЦВМ).
2. Методическая погрешность, определяется методической погрешностью
частных формул численного интегрирования. (Например, формула
трапеций более точная, чем формула прямоугольников.)
3. А) Погрешность квантования, образуется за счет отбрасывания младших
разрядов при вычислении до числа n, определенного при расчете
13
инструментальной погрешности. Это погрешность квантования первого
рода.
Б) Погрешность квантования второго рода, образуется за счет того, что в
вычислениях участвуют уже квантованные величины.
Для борьбы с погрешностью квантования используют метод округления
с учетом отбрасываемого разряда. В этом случае величина погрешности
не превышает единицы младшего разряда, не зависимо от интервала
интегрирования.
4. Трансформированная погрешность, которая возникает от неточного
задания входных
данных. Она определяется коэффициентом передачи решаемой задачи.
Способ сокращения трансформированная погрешности: выравнивание
значений масштабных коэффициентов в решаемой задаче за счет
изменения размерности физических и математических переменных.
СУШ позволяет решать задачу на последовательной ЦИС (цифровая
интегрирующая система) и параллельной ЦИС. Каждый ЦИ (цифровой
интегратор) реализует одну из частных формул численного интегрирования.
Yk(i+1), Ypk(i+1) - квантованные величины.

Yk(i+1) U Yk(i+1)
Ypk(i+1) Ypk(0)

Структурная схема цифрового интегратора.

Yqk(i+1)
Yk(i+1)

Yz(i+1) Рг Ypki X  P0

О Yki Рг остатка

Ypki +1/2 Ypk(i+1)


13

Х – умножитель,

P0 P0 (Yk (i  1)  OYki )

Реализует функцию расчленения .


В исходном состоянии регистр остатка равен нулю. Для реализации ЦИ
существуют специальные серии элементов: К502. Появление
инструментальных средств таких как: Альтерра, Xilinx, позволяют
реализовать не отдельные интеграторы, а специализированные
интегрирующие системы на одной БИС.

Лекция 14
Арифметические расширители. Сопроцессоры.
Вопросы:
1. Матричные процессоры.
2. Многопроцессорные системы на базе однокристальных процессоров
3. Нейронные вычислительные сети (нейрокомпьютеры) и
вычислительные системы работающие на основе остаточных классов.

Система команд реализует основной набор операций О1. О2- другой набор
операций, реализуется программными средствами через f(О2), т.е. через
систему команд. Поэтому время выполнения операций ТО2 определяется
многими факторами: выбором численных методов, погрешностью
вычисления, от вида организации программных структур. В системе
существует 3 варианта ускорения времени выполнения операций, не
входящих в систему команд процессора:
13
1. Арифметические расширители. Реализуются аппаратно-программным
способом. Для этого используется БИС, умножители, делители,
извлекатели квадратного корня.
2. Арифметические сопроцесссоры, т.е. устройства, которое не имеет
собственных средств выбора команд и данных, они имеют только
аппаратно-микропрограммные средства реализации некоторого набора
операций, которые составляют его внутреннюю систему команд. В
управляющей части сопроцессоры содержат средства запроса цикла шины
процессора и средства выявления внутренних команд сопроцессора.
Обнаружение команд сопроцессора реализуется двумя способами:
А) программный (через внешнюю команду ESC). Реализован в
сопроцессорах фирмы Intel.
Б) Через выделенное адресное пространство. Реализован другими
фирмами.
Разработка сопроцессоров с различными наборами систем команд
(внутренних) делают вычислительные системы проблемно -
ориентированными на решение задач широкого класса.
3. Разработка независимых процессоров с проблемно – ориентированной
системой команд работающих совместно с центральным процессорным
элементом. (Пример: процессор ввода/вывода Intel 8089 или NS 32592).
Ведущим шины является центральный процессорный элемент. В качестве
вспомогательного процессора используется независимый процессор. В
системе для него пишется специальная программа, которая размещается в
определенной области ОП. При необходимости выполнения функций
независимым процессором центральный процессор передает специальную
команду с указанием адресов, где находится программа независимого
процессора. После этого независимый процессор переходит к исполнению
указанной программы, независимо от загруженности центрального
процессора.
13
14.1. Матричные процессоры.
Матричные процессоры – представляют собой решетку, в узлах которой
размещаются вычислительные модули. Такие процессоры разрабатывались
на:
А) БИС 128*128, 256*256, 512*512, 1024*1024 – одноразрядных
процессоров.
Б) В узлах БИС расположены n – разрядные процессоры (4 и 8 разрядные). В
рамках таких процессоров организована потоковая обработка информации.
Такие системы получили название систолические структуры.
В) Матричная структура с выделенными процессорами. (ILLIAC- IV, по типу
SIMD).
Г) Транспьютерные системы. В основе их лежит микропроцессор –
транспьютер. (Фирма Inmos).
МП

ОП

4 быстродействующие линии связи

Из – за линий связи можно построить любую конфигурацию: цепочка,


кольцо, тор,… На базе транспьютеров строятся системы: транспьютерный
вычислитель, ускоритель, блок (как внешние устройства).

14.2. Многопроцессорные системы на базе однокристальных


процессоров.

I. Сопроцессорная конфигурация (ЦП + сопроцессор).


II. Сильно связанная конфигурация или сопроцессорная конфигурация
(ЦП + независимый процессор).
III. Слабосвязанная конфигурация (в структуры системы включается
несколько ЦП).
13
Разделение ресурсов ЦП реализуется аппаратными средствами,
которые называются арбитрами шины. Возникают три варианта
разделения ресурсов между процессорами: цепочный способ, способ
последовательного опроса, метод независимых запросов. Метод
независимых запросов нашел наибольшее применение в
вычислительных системах высокой производительности. Существуют
два варианта модуля:
1. Мультипроцессорная система. (Подсистема памяти закреплена за
процессорами или сосредоточенная.)

ОП1 ОП2 ОПn

Коммутатор

Проц-р 1 Пр Проц-р n
оц-р 2

2. Мультипьютерные системы – однокристальный процессор для которого


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

Коммутатор

ОП1 ОП2 ОПn

Проц-р 1 Пр Проц-р n
оц-р 2

14.3. Нейронные вычислительные сети (нейрокомпьютеры) и


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

Существует базовый набор оснований r1, r2,…rn - взаимно простых чисел.


Любое число в системе остаточных классов:
Асок = 1 * 2* …n ,где i = res [a/mod ri]
Значения  малоразрядные, несвязанные друг с другом, поэтому
выполняется поразрядная обработка, отсутствует перенос между разрядами.
Значит можно осуществить конвейеризацию любой глубины,
вычислительный модуль для обработка малоразрядных чисел  оказывается
очень простым. На основе СОК строятся компьютеры очень высокой
производительности.

Вычислительные системы работающие на основе цепных дробей.


Любую математическую зависимость можно представить в виде цепной
дроби.
a1  x
f (x  )
b1  x
a2 
b2  x
a3 
a 4  b3  x

В электронике цепи с сопротивлением рассчитывают с цепными дробями.


Это - лестничные схемы. Машины такого типа большие по размеру.

Частотно – импульсные вычислительные устройства.


F’
F Преобразоват ЦВМ Преобразоват
ель F-> N ель N-> F

1. Сложение. Fz=F1+F2
13

2. Вычитание.

3. Умножение.

Fz=(F1*F3)/F2

ДУ – дифференцирующая цепочка (переключает триггер по фронту).

Вычислительные устройства работающие по алгоритму Волдера


(методу Divik)
14
Алгоритм основан на псевдоповороте радиус вектора. Используется в
навигации.

Лекция 15
Состояние системы, процесса, программы.
Вопросы:
1. Системы прерываний.
2. Способы установления приоритетных отношений.

Вычислительные системы подразделяются на два больших класса:


1) персональные станции (рабочие станции); 2) персональные компьютеры.
Существенным отличием является то, что первая группа использует
закрытую технологию, и информацию о них получают только дилеры,
разрабатывающие дополнительные устройства. Структура, состав шин,
объем памяти и тактовые частоты, набор периферийных устройств и др.
строго определено, и нет возможности расширять их состав. В этих системах
конфигурация системы жестко зафиксирована на стадии разработки и не
меняется в процессе эксплуатации.
Вторая группа – вычислительные системы с открытой архитектурой.
Для них пользователь сам подбирает набор устройств системы (ЦПУ, тип,
тактовая частота, системная плата, видео-карта, модем, графический
ускоритель, объем и тип оперативной памяти и др. ). Пользователь сам
конфигурирует систему. Состав устройств и конфигурация могут изменятся
14
от включения к включению и в этих случаях система должна обеспечить
максимум удобств работы.
Вопросы конфигурирования решались на персональных компьютерах
разными способами: 1) как и в рабочих станциях фирмой изготовителем
(BrandName); 2) на системной плате стояли переключатели или перемычки
(jumper) с помощью которых настраивались параметры; 3) В оперативной
памяти отводились регистры состояния куда записывалось состояние
системы; 4) на системной плате выделены специальные регистры
конфигурации и информация устанавливается при включении компьютера.
Практически все вычислительные системы работают в
мультипрограммном режиме. Возникает задача переключения программ в
системе с наименьшим временем простоя процессора. После выполнения
очередной любой команды часть информации сохраняется в рабочих
регистрах процессора. Содержание всех элементов памяти после выполнения
очередной команды определяют состояние процессора. Ставится задача:
определить содержание наименьшего числа регистров после выполнения
очередной команды, которые позволили бы продолжать вычислительный
процесс. Эта информация получила название словосостояния программы
(процесса) и стала записываться в отдельный регистр или несколько
регистров ССП(PSW). ССП отличаются друг от друга в машинах различного
типа по размещению полей и по количеству разрядов. В персональных
компьютерах ССП включает содержимое адресных регистров, аккумулятора
и содержимое флажковых регистров и нет одного самостоятельного,
отдельно выделенного регистра.

15.1. Системы прерываний.

Современные вычислительные системы реализовывают


мультипрограммный режим, пакетный режим решения задач, строятся
14
многопроцессорные системы и многомашинные вычислительные комплексы.
В этих системах один процессор используется для решения нескольких задач
или одна задача решается на нескольких процессорах или машинах. Кроме
того, вычислительные системы имеют большое количество внешних
устройств, запросы от которых на доступ к процессору или к шине
конкурируют во времени. Во всех перечисленных случаях удовлетворить
требованиям, предъявляемым к работе системы можно только используя
принцип прерывания выполняемой программы и представления ресурсов
системе прерывающей программу.
Все прерывания в системах делятся на два типа:
1) Программные прерывания, когда прерывание возникает при
возникновении особой ситуации в решаемой задаче. ССП записывается в
оперативную память, считывается ССП новой программы, стоящей в
очереди на выполнение и работа вычислительной системы в этом случае
не прерывается.
2) Аппаратные прерывания. Формируются по запросам на прерывания от
устройств (клавиатура, HDD, FDD, мышь и др.). Запрос на прерывание от
других процессоров системы (сопроцессоры, другие независимые
процессоры в мультипроцессорных системах или от вычислительных
модулей), другие вычислительные машины работающие как
многомашинные вычислительные комплексы по каналам прямого
доступа.

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


чем приоритет текущего задания.

Принципы организации систем прерывания программ.

При работе вычислительной системы возникают ситуации, требующие


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

ЭВМ
Прерываемая
Прогр.
Запрос на программа 1
1 Прогр. прерывающая программа для 1
прерывание
2
Внешняя Прогр.
прерывающая программа для 1
среда 1 Прогр.
3 Прогр. прерывающая
Прогр. 4
Прогр. 3 программа для
1 3

Запросы на прерывания могут быть одиночными, а могут


одновременно поступить несколько запросов от внешних устройств. В этом
случае прерывания реализуются на основе заранее установленных
приоритетов.
14
Самым примитивным прерыванием является приостановка (halt). Это
происходит тогда, когда на запрос прерывания останавливается процесс
выполнения программы, а иногда и команды, и управление передается
некоторым аппаратным средствам без изменения содержимого счетчика
адреса команд, после чего процесс решения команды восстанавливается.
Система прерывания программ (СПП, контроллер прерываний).
Это совокупность аппаратных и программных средств
обеспечивающих с высоким быстродействием прерывания, не требующих
больших усилий от программиста.
Функции системы прерываний:
1) Само прерывание заключается в том, чтобы запомнить состояние
прерываемой программы и осуществить переход к прерывающей
программы при условии, что приоритет прерывающей программы выше.
2) Восстановление или возврат – восстановить состояние прерываемой
программы и осуществить переход к ней.

Приоритетные соотношения – это установленный порядок в обслуживании


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

Характеристики системы прерываний.

1. Общее количество запросов на прерывания (входы системы


прерываний).

2. Время реакции – это время между появлением запроса на


прерывание и началом выполнения прерывающей программы.
Прерываемая
программа
Запрос на прерывание

tзап обработка tвосст Программа обработки


прерываний
tреакции
14

tзап – время запоминания состояния прерываемой программы


tвосст – время, необходимое для восстановления прерываемой программы
tреакции зависит от того, сколько программ с наивысшим приоритетом
выставило запросы по отношению к текущему запросу на прерывание.
3. затраты времени на переключение программы tп.п.=tзап+tвосст (издержки
системы прерываний).
4. Глубина системы прерываний – это максимальное число программ,
которые могут прерывать друг друга. Частный случай – единичная глубина,
когда прерываемую программу может прервать одна прерывающая
программа, и никакая другая программа не может ее прервать до окончания
ее выполнения. Системы с большей глубиной имеют меньшие издержки

1 2 3 Запросы на
прерывания
Единичная глубина
1программа 2 3 прерываний
программа программа
3
Глубина прерываний равна
2
программа
3
1 программа
программа

5. Насыщение системы прерываний – это когда запрос на прерывание


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

6. Допустимые моменты прерывания программ:


а) если прерывание наступает после выполнения текущей
команды, то
tрtкоманды; tк=var;
б) когда прерывание воспринимается после очередного такта
процессора, тогда tp<<tк, но количество информации для
восстановления вычислительного процесса должно быть значительно
большим.

Классы системы прерываний (уровни прерываний).


В реальных системах входов систем прерываний очень много
(10,100,1000 и более). Есть запросы, имеющие один уровень приоритета.
Совокупность запросов на прерывания, имеющих одну и ту же
прерывающую программу образуют уровень прерываний (или класс
прерываний).

I1 I2 Ik Im1 Imp In1 Inr запросы


РгЗП

1 1 1
1
ОСП

Дешифратор, распознающий класс системы прерываний

ОСП – общий сигнал запроса прерывания


14
РгЗП – регистр запросов прерываний.
Информация о действительной причине прерывания содержится в коде
прерывания, который отражает состояние регистра РгЗП. После снятия
запроса прерывания и передаче управления управляющей программе,
которая управляет обработкой данного прерывания, соответствующие
триггеры регистра ЗП, относящиеся к данному классу устанавливаются в
ноль. Объединение запросов на прерывания в классы снижает затраты
оборудования в системе и объем программной памяти.

Организация перехода к прерывающей программе.


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

15.2. Способы установления приоритетных отношений.


14

Реально существует 3 отличных друг от друга способов установления


приоритетных отношений:
1) Цепочечный способ (дези - цепочка). Его условную схему можно
изобразить следующим видом:

зп 1 2 3
Если используется 1 то 2 и 3 не работают.

2) Опросный способ (полинг) – по очереди проверяются элементы на запрос.


3) Метод независимых запросов – каждое устройство выдает запрос на
прерывание в устройство, которое ведет ранжирование. Есть
программируемые контроллеры прерываний.
Все эти варианты реализуются как аппаратно, так и программно.
Простейшим способом установления соотношения является порядок
подключения линий сигналов запросов прерываний к входам системы
прерывания (стандарт unibus –общая шина, использовавшийся в
компьютерах СМ3, СМ4, Электроника 125, PDP 11 фирмы DEC и др.)
Процедура прерываний с опросом источников прерываний (флажков)
имеет следующий вид. Каждому запросу прерываний соответствует триггер в
регистре запросов прерываний, общий сигнал запроса прерываний
инициирует программу опроса триггеров в регистрах. Ведется поиск как
непосредственно по триггерам, так и по группам триггеров (по классу).
Существуют различные способы реализации запросов источников сигналов
прерываний.
1) Процедура с программным опросом флажков прерываний. При
наличии запроса прерывания осуществляется запоминание
предыдущего состояния и проверяется устройство с нулевым
номером. Если с нулем (да), то сброс флажка запроса прерывания
и выполнение прерывающей программы, если с единицей (нет),
то проверяется устройство с единичным номером – если «да», то
14
снова сброс флажка запроса прерывания и выполнение
прерывающей программы с номером 1, и так далее.
В этой схеме порядок опроса может быть изменен. Обслуживание
осуществляется от таймера, поэтому время на проверку всех устройств
может быть очень большим. Достоинства данного метода: минимум
аппаратных затрат. Недостатки: большое время обработки прерывания. На
практике, чтобы сократить время, подобный алгоритм дополняется
аппаратными средствами.

Запоминание предыдущего
состояния
1
Устройство 1 Сброс флажка и
выполнение
0 программы 1
1 Сброс флажка и
Устройство 2 выполнение
0 программы 2

1
Устройство n Сброс флажка и
выполнение
0 программы n
Восстановление состояния процессора

2)Системы циклического опроса.

счетчик

Код 1 2 n
счетчика
дешифратор ГТИ
n &
0 1 2
0 & 1
ОСП
1 & S T
из РгЗП
2n &

R
сброс
15

ОСП – по этому сигналу происходит прерывание текущей программы и


передача управления прерывающей программе. Номер счетчика прерывания
расценивается двояко: 1) код может непосредственно указывать адрес ячейки
ЗУ, где хранится непосредственно начальный адрес прерывающей
программы; 2) может указывать адрес, где хранится ССП (вектор
прерывания). Достоинство данного метода – простота. Недостаток – для
опроса всех прерываний необходимо выполнить к=2n тактов. Возникает
необходимость снижения времени (числа тактов).
3). Цепочечная схема - позволяет обработать запросы прерываний за 1 такт.

ЗП2 ЗП2 ЗПn

приори
& & &
тет

& & &

1 ОСП
&

Шифратор номера ЗП
Компаратор
Порог
(схема
прерывани
№ЗП сравнения)
й

На вход поступает n запросов прерываний. Приоритет предоставляется


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

В машинах III и IV поколения в системе прерываний стали различать


существенно важные прерывания и прерывания, которые можно исключить.
Поэтому ввели маскируемые (INT) и немаскируемые (NMI) прерывания.

РгЗП

& Схема выделения


общего сигнала ЗП ОСП
&
маскируемых
Рг Маски прерываний

Лекция 16
Запоминающие устройства ЭВМ
Вопросы
1. Основные режимы работы ЗУ. Иерархическая подсистема памяти
2. Способы обращения к ЗУ
3. Оперативные ЗУ
4. Типы полупроводниковых ОЗУ
5. Микросхемы ОЗУ и их классификация

Запоминающие устройства (ЗУ) предназначены для приема, хранения и


выдачи информации, получаемой в процессе решения различных задач.
Характеристики ЗУ во многом определяют характеристики вычислительных
машин. Чем выше быстродействие ЗУ, тем выше быстродействие машины.
Объем ЗУ определяет универсальность. Отсюда вытекают требования к
памяти: чтобы система была максимально универсальной и
производительной, необходимо, чтобы она имела память бесконечной
емкости и скорости.
15
В вычислительных системах все запоминающие устройства (быстрые,
медленные, внешние, внутренние) объединяются в единую, иерархическую
подсистему памяти. В процессе работы информация из быстрых ЗУ малой
емкости передается в медленные ЗУ большой емкости, и создается
впечатление, что мы имеем ЗУ с емкостью, равной суммарной емкости всех
ЗУ, и быстродействием самой быстрой памяти. Для синхронизации работы
различных устройств применяют кэш память. Именно по этой причине
впервые кэш был применен именно для согласования оперативной памяти и
внешних запоминающих устройств.
Все ЗУ состоят из элементов памяти, которые представляет собой
некоторую среду, способную сохранять 2 устойчивых отличных друг от
друга состояния (0 и 1). Элементы памяти объединяются в ячейки памяти
(слово памяти). Слово памяти – количество элементов памяти, к которым
возможно одновременное обращение при записи или считывании. Ячейка
памяти делится на фиксированные единицы информации – байт (минимально
адресуемая единица информации). Для обращения к ячейке памяти
используется физический адрес, который передается на шину адреса шины
системной или локальной. Физический адрес необходимо отличать от
исполнительного (вычисленного), который определяет начальный адрес
байта, с которого начинается фиксированная единица информации. В
современных компьютерах на шину адреса выставляется исполнительный
адрес (линейный), который является физическим, а выделения ячейки памяти
и байта реализуется аппаратными средствами.

16.1. Основные режимы работы ЗУ.

1) Запись информации (Write или W) в какую-либо ячейку. Осуществляется


с изменением состояния физической среды ЗУ.
2) Считывание (Read или R) информации из ячейки памяти (выборка или
воспроизведение) в процессор или регистр. При этом состояние
15
параметров физической среды не меняется. В противном случае
параметры физической среды необходимо восстанавливать. Процесс
восстановления называется регенерацией.
3). Режим поиска – процесс нахождения ячейки памяти, к которой
необходимо обратиться (для записи или считывания).
а) адресное ЗУ – это когда все ячейки памяти пронумерованы и обращение
к ячейке ведётся по заданному номеру.
б) безадресное ЗУ. Здесь различают:
- ассоциативные ЗУ – это когда поиск ячейки памяти ведётся по её
содержимому;
- магазинного типа – это стек, очередь и другие виды ЗУ цепочечного
типа;
- ЗУ гнездового типа, т.е. обращение к ячейкам памяти определяется
микропрограммой (данные находятся в строго определённых ячейках
памяти, которые не надо указывать).
4) Специальные режимы работы .
а) считывание - модификация – запись.Состоит из четырёх этапов:
первый
этап – это поиск ячейки памяти; второй – это считывание ячейки
памяти; третий этап – это модификация данных; и последний этап – это
запись изменённых данных в ту же ячейку памяти не меняя параметров
поиска.
б) групповя запись и групповое чтение. Реализуется с конверизацией
формирования адреса следующей ячейки памяти и записью (считыванием)
данных в предыдущую ячейку памяти.
5) Режим хранения – это поддержание состояния ЗУ безизменения
параметров элементов памяти.
а) ЗУБРН – ЗУ без разрушения информации при отключенном питании.
Это, например, ЗУ на магнитных элементах.
15
б) ЗУ, которые хранят информацию только при включенном питании.
Это, например, полупроводниковые оперативные ЗУ. Здесь выделяют два
вида:
- статистические ЗУ;
- динамические ЗУ.

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


Динамические ЗУ делятся на:
1.Рециркуляционные ЗУ, это когда информация всё время находится в
движении;
2. На запоминающих микросхемах динамического типа. В них
элементом памяти является электронный ключ на полевом транзисторе.
Сопротивление затвора транзистора очень высокое (10 МОм и больше),
поэтому заряд на затворе рассасывается достаточно медленно. Чтобы
информация не потерялась, величину заряда на затворе необходимо
восстанавливать. Время восстановления  4 мкс – это есть время
регенерации . Для восстановления заряда в запоминающих микросхемах
(ЗМ) памяти предусмотрены усилители регенерации (наиболее
распространены ЗМ со строчной регенерацией, в которой усилитель
регенерации стоит один на всю строку элементов памяти).

16.2. Способы обращения к ЗУ:

1. Ленточные.
2. Вращающиеся (диски и барабаны).
3. Матричные.
4. Лучевые (когда поиск информации ведётся электронным лучём,
например масочные ЗУ, лазерные ЗУ, голографические ЗУ ).
По способу обращения ЗУ делят на две группы:
- ЗУ с произвольным доступом;
15
- ЗУ с последовательным доступом.
- Структурная схема ЗУ с произвольным доступом.

КШД
Блок памяти (БП)
Усилит Форми Регист
ель ровате р DIO
n
Формирователь считыв ль резуль
ания разряд тата
адресных а
(УС) (РР)
сигналов(ФАС)
(ФР)
Дешифратор
адреса (ДСА)

управляющие
Рг А сигналы . . .
RD
КША Блок местного управления
(БМУ) WD

адре
АДРЕСНАЯсЧАСТЬ

КША – кодовая шина адреса.

КШД - кодовая шина данных.

DIO – шина data input/output.


Запись(WR).
Поиск ячейки памяти Процесс передачи из КШД в
ячейку памяти

АдресКШАРгАДСАФАКБПФРРРКШД
Считывание(RD).
Поиск ячейки памяти Процесс считывания

ФР
Процесс
регенерации

АдресКШАРгАДСАФАКБПУСРРКШДДанные
tзаписи  tсчитывания= tобращения = tадреса = tзапись/считывание
15

Структурная схема ЗУ с последовательным доступом.

КШД
Блок памяти (БП)
Усилит Форми Регист
ель ровате р DIO
n
Рг М считыв ль резуль
ания разряд тата
а (РР)
Схема
(УС)
(ФР)
сравнения(CC)

управляющие
Рг А
Сигнал сигналы . . .
RD
разрешения Блок местного управления
КША доступа к ЗУ (БМУ) WD

адре В центральное
с
устройство управления

КША – кодовая шина адреса.

КШД - кодовая шина данных.

DIO – шина data input/output.

Рг А – регистр адреса.
Рг М – регистр маски.
БП содержит две части – это основную информацию и служебную
информацию.

На схеме сравнения происходит сравнение служебной информации с


требуемым адресом и после сравнения, в зависимости от результата, БМУ
включает перемотку. Содержимое служебной информации меняется до тех
пор, пока не будут равны Рг А и Рг М. Сигнал равенства кодов Рг А и Рг М
является сигналом разрешения обращения к ЗУ. После этого БМУ
изменяет скорость вращения магнитной ленты и переводит устройство в
15
режим записи/чтения. Центральное устройство управления даёт сигнал
разрешения запись/чтение.

tобращения = tпоиска+ t ‘обращения


t ‘обращения = tадреса = tзапись/считывание
tпоиска – это время нахождения места откуда начать запись/чтение.

16.3. Оперативные ЗУ (ОЗУ).

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


процессор. В общем случае ОП состоит из трёх составляющих:
1.Схема сопряжения с интерфейсом (СХ).
2. Блок местного управления (БМУ).
3. Блок памяти (БП).
Обобщённая структурная схема ОП.

Схема ОП совпадает со структурной схемой


СХ БП
ЗУ с произвольным доступом.

БМУ

Шина компьютера
Основу ЗУ составляет БП. БП
реализуются на запоми нающих элементах разной природы. Сюда входят
магнитные оперативные ЗУ (МОЗУ). МОЗУ доминировали до 1973 г. В их
основе лежит магнитный сердечник, который может находится в одном из
двух устойчивых состояний остаточной намагниченности +Br”1” и
-Br”0”. Достоинства МОЗУ:
- надёжность хранения информации, в том числе и при отключенном
питании;
- виброустойчивость;
- радиационная стойкость.
15
Недостатки:
- малая ёмкость;
- сравнительно низкое быстродействие tобращения 200 нс.
- большие габариты;
- критичны к климатики.
С 1973 г. на место МОЗУ пришли полупроводниковые ОЗУ (ПОЗУ).
Основу ПОЗУ составляют запоминающие микросхемы
полупроводникового типа:
1) бистабильные триггеры, они служат для построения ЗМ статического
типа.
Достоинство:
- высокое быстродействие tобращения 1 до 16 нс.
Недостатки:
- большое потребление энергии;
- малая плотность (одна схема – 16 бит).
2) ЗМ на электронных ключах. Они являются основой для построения ЗМ
динамического типа. .
Достоинства:
- высокая плотность размещения (одна схема – 64 Мбит);
- низкая потребляемая мощность.
Недостатки:
- сравнительно низкое быстродействие tобращения 60 нс;
- ЗМ динамического типа требуют регенерации.

16.4. Типы полупроводниковых ОЗУ:

1. Интегральные схемы, на которых реализовались матрицы


запоминающих элементов;
2. ЗМ с частичной дешифрацией: либо только адресная часть, либо
только разрядная часть;
15
3. ЗМ с полной дешифрацией: и адресная часть, и разрядная часть.
ЗМ динамического типа отличаются друг от друга способом регенерации.
Здесь различают три варианта схем с регенерацией:
3.1изопланарная регенерация;
3.2эпитаксиальная;
3.3строчная.
В настоящее время ЗМ динамического типа выпускаются с авто
регенерацией (квазистатические). Строчная регенерация реализуется
различными способами:
а) аппаратно – микропрограммным способом.
б) аппаратный. В БП встраивается специальное устройство
регенерации( СМ3, СМ4 и другие).В БП через каждые 27 мкс вырабатывался
импульс регенерации. Этот импульс блокировал доступ к ОП, переключал
мультиплексор адреса на режим регенерации, увеличивал счётчик адреса
регенерации на единицу и формировал сигнал RAS (row adress stok)
динамических запоминающих микросхем.
В микро ЭВМ и в персональных компьютерах регенерацию осуществляет
контроллер динамической памяти. Существует несколько моделей
контроллеров:
- со встроенным внутренним сигналом регенерации;
- с внешним сигналом регенерации (от таймера).
в) авторегенерация. Организовывает вычислительный процесс и
структуру вычислительной системы таким образом, чтобы обращение
ко всем строкам блока памяти происходило чаще чем 2 млс.

16.5. Микросхемы ОЗУ и их классификация.

О
ЗУ
Статические ЗМ Регистровые ЗМ

Динамические ЗМ
16

Микросхемы памяти как функциональный узел.

Входные
А поля:
RAM
Выходные данные:
DI DO
А
– Con-
ПС
trol
поле входного адреса. DO – выходные данные.
DI – поле входных данных. ПИ – питательный сигнал.
Control – поле управления. В верхнем правом углу -
организация выхода ЗМ.

Различают ЗМ с полно разрядным адресом и мультиплексированным.


Полно разрядный адрес, как правило, используется в ЗМ малой ёмкости (Q =
16 Мбит, с одноразрядной организацией, тогда шина адреса – 24
разряда).При мультиплексировании адреса технологически сокращается
количество выводов и схема более компактна. Но при этом увеличивается
время формирования адреса выбранной ячейки памяти.
Поле входных и выходных данных.
1. С разделённым входом и выходом, т. е. Определённые выводы
используются для ввода данных, а другие только для вывода данных.
16
2. С совмещённым вводом/выводом, т.е. одни и те же выводы (бинты)
используются и для ввода и для вывода данных.
По шине данных ЗМ делятся:
1. С однородной организацией, т.е. длина ячейки памяти равна одному биту.
2. Со словарной организацией, т.е. длина ячейки памяти содержит 4,8 и
большее количество разрядов.
Шина управления.
1.
Кристалл CS – сигнал выбора кристалла. Управляет общим доступом к ЗМ.
Когда этот сигнал запрещён, то выходные шины находятся в высоком
эмпидансном состоянии.
2.
ОЕ - разрешение выхода, т.е. блокирует выдачу выходных данных, переводя
шину в состояние высокого эмпиданса ( в состояние Z). Запись
осуществляться не может.
3.
W/R – сигнал Write/Read, т.е. сигнал разрешения запись/считывание. Если
высокий сигнал, то считывается, если низкий, то режим записи.
4. Управляющие сигналы выбора строки RAS и столбца CAS.
В реальных ЗМ используются пункты либо 1. и 2., либо 4.
Организация выхода.
1. ЗМ с логическим выходом. В этом случае объёдинение логической
микросхемой ИЛИ.
2. ЗМ с открытым коллектором.
3. ЗМ с открытым эмиттером. Выходной каскад – эмиттерный повторитель,
но резистор в цепи эмиттера отсутствует.
4. ЗМ с трёхстабильным уровнем:
- логический “0”
- логическая “1”
- эмпидансное
16
Графическое изображение.

- с открытым коллектором;

- с открытым эмиттером;

- с трехстабильным выходом.

Микросхемы ОЗУ.

А) Статистические (К561РУ2 – с одноразрядной организацией).

CS W/R A0-A7 DI DO Режим


1 * * * Z Хранение
0 1 А 0 Z Запись «0»
0 1 А 1 Z Запись «1»
0 0 А * D,D Чтение/считыван
ие содержимого
ячейки памяти
Б) Динамические (К565РУ3(РУ6)) 16К*1
16

Аналогично К565РУ5 64К*1,К565РУ7 256К*1.


Схема имеет: 128 строк, 128 столбцов, 128 усилителей считывания. При
обращении к запоминающей микросхеме каждый раз происходит
регенерация сразу всех 128 элементов памяти текущей строки.
Режимы работы микросхемы:
1. Запись.
2. Считывание.
3. Считывание \ модификация \ запись.
4. Страничная запись.
5. Страничное считывание (фиксируется адрес строки, меняется адрес
столбца, размер страницы - 128 ячеек памяти.)
6. Регенерация.
7. Хранение.
Вхождение в нормальный режим работы около 2 млс при включении
питания.
16
Структурная схема РЗУ.

Контроллер памяти:
1. Способ увеличения разрядности БП на запоминающих микросхемах
меньшей памяти.
2. Способ увеличения емкости БП на запоминающих мк/сх меньшей
емкости.
64К = 216
16К = 214
15,14 разряды – выбор страницы, 13:0 – адрес на странице.

15 14 13

3. Одновременное увеличение разрядности и емкости.


Схема управления (су):
16
1. Согласовать управляющие сигналы с шины памяти с управляющими
сигналами БП.
БП: RAS, CAS, W/R
Шина памяти: MRDС – чтение, MWTC – запись, XACK – подтверждение
обмена, INH1 – запрет ОЗУ по приему адреса, BHE – разрешение выдачи
старшего байта.
2. Регенерация блока памяти.
3. Контроль по паритету передаваемых и получаемых данных.
4. Реализация режима DMA (прямой доступ к памяти) .
5. Сопряжение со структурной иерархической подсистемой памяти.
6. Управление подсистемой памяти через:
- дискрипторные таблицы,
- КЭШ.
Пункты 5 и 6 – системное управление.

Структурная схема RAM (DRAM) емкостью 128 КБ с интерфейсом И41.


16
Схемы памяти: К565РУ3(РУ6). К1801ВП1-30 – контроллер. Внутри его
счетчик регенерации.
Ах- адрес строки
Аy – адрес столбца,
Ar – адрес регенерации.
Ах/Ay - переключение адреса.
CLM - контроллер динамической памяти.
L, H - младший и старшие байты.
CLK - синхронизация.
ENRAM – разрешение формирования адреса.
ALE1 – разрешение доступа к управляющему устройству.
В общем случае разрядность счетчика регенерации контроллера
обеспечивает выбор типа запоминающей мк/сх блока памяти. Контроллер с 8
ми разрядной шиной адреса регенерации позволяет использовать
запоминающие мк/сх: 64КБ и меньше.
Цикл регенерации: определяется разрядностью счетчика и периодом
повторения управляющего сигнала RAS, котрый выдается одновременно с
кодом адреса регенерации, определяется частотой поступления
синхроимпульсов CLK.

Авто синхронизация динамической памяти.

Режим регенерации можно исключить из режима работы динамической


памяти, если обновление строк будет происходить чаще, чем 1 раз в 4 млс.
Например: в компьютере БК 0010 такт работы процессора делится на такт
процессора и такт видеопамяти. Q=64К*8(32*16). Из них половина –
видеопамять. Тип памяти К565РУ6 (16К*1).

Регистровые ОЗУ.
16
Регистровые ОЗУ нужны для повышения скорости обмена между регистрами
процессора и данными, поступившими из внешних устройств или
внутренней памяти компьютера для временного хранения, а также
организации вычислительного процесса в компьютере.
Регистровые ЗУ выполняют функции:
1. Регистр как самостоятельный функциональный узел (Рг адреса, Рг команд,
и т.д.).
2. Регистр как регистровая память. Цел: быстрый доступ укороченными
адресами с прямой адресацией. Может использоваться как
многофункциональный буферный регистр.
3. Регистровые ЗУ с произвольным и последовательным доступом и
последовательного типа (динамические сдвигатели).
До использования КЭШа для согласования по скорости использовались
регистровые ЗУ статического типа. Время обращения к статическим ЗУ 16нс
(до 20 нс).
В устройствах управления использовались ЗУ цепочечного типа: стек,
очередь и т.д. Они также реализованы в базисе регистровых ЗУ,
представлены в виде отдельных мк/сх регистровых ЗУ.
КР1802ИР1 (16*4) – двухадресное ЗУ для сверхоперативной памяти.
Коды адреса не должны быть одинаковыми.
К555ИР26 (8*4), К1002ИР1 (32*8), К1800РП6 (32*9).
Пример: К1002ИР1 – ЗУ магазинного типа (очередь), регистры которого
соединены в цепь. Начальный Рг используется для записи, конечный Рг – для
считывания.
16

Запоминающие устройства ассоциативного типа (АЗУ).

АЗУ – безадресные ЗУ, обращение к которым ведется не по номеру


выбранной ячейки памяти (по адресу), а по ее содержимому, которое
удовлетворяет некоторому признаку. Пример: первые три бита содержимого
ячейки памяти равны «1». Код признака может изменяться до длины ячейки
памяти. Для организации ассоциативного доступа каждый элемент памяти
АЗУ должен содержать дополнительную логику ассоциативного поиска. Это
усложняет аппаратные затраты.
Достоинство: высокое быстродействие которое по статистическим данным
возрастает в 100-1000 раз.
Недостатки: сложность, стоимость.

Структурная схема АЗУ.


16

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

Структурная схема матрицы АЗУ статистического типа с парофазным


управлением.
17

РШ10 – разрядная шина 1-го разряда №0.


ЧШ – числовая шина для приема или выдачи данных.
ИСШ – шина индикации совпадений при ассоциативном опросе.

Ршi1 Ршi0 Управление.


0 0 Запрещенная комбинация.
0 1 «0»
1 0 «1»
1 1 Запрещенная. Используется для маскирования.
Независимо от содержимого ячейки памяти на
ИСШ всегда выдается сигнал совпадения. Если
нет маскирования на ИСШ сигнал, если ЧШ
совпадает с содержимым ячейки.

Лекция 17
17
Работа АЗУ
Вопросы
1. Обращения к АЗУ
2. Односторонние ЗУ
3. Адресация в ЭВМ
4. Дескрипторные таблицы

Если Q=N*n, то Qi=qi1 qi2 … qin, где i=1,2,..,N – номер строки,


j=1,2,..,n – номер столбца.
По разрядным шинам каждого столбца из регистра входного числа
через регистр маски подается код признака x=x1,x2,…,xk, где k  n.
Для выполнения сравнения содержимого запоминающего элемента и кода признака,
каждый запоминающий элемент дополняется логикой (схемой совпадения или несовпадения).

Y1 Y2 Несовпадени Совпадение
е
0 0 0 1
0 1 1 0
1 0 1 0
1 1 0 1

В АЗУ с логикой совпадения для каждой строки реализуется


следующая логическая зависимость:
k _
Fi=(qij  xj) (1).

j=1
Fi - признак совпадения ячейки памяти с кодом признака. Это значение
(логическое «1») записывается в регистр результата. Если в ЗМ реализуется
логика несовпадений:
k
Фi= (qij  xj) (2).

j=1

В регистре результата выбранные ячейки в регистре результата будут


помечены нулями.
17

17.1. Обращения к АЗУ.


Для того чтобы определить количество элементов (ячеек) подлежащих
выбору необходимо проверить содержимое всех элементов памяти
удовлетворяет ли оно требованиям признака.
Варианты обращения к АЗУ:
1) Последовательно по строке или последовательно по столбцам.
Используется 1 элемент сравнения. Tопроса=k * t  N.
2) Параллельно по столбцам, последовательно по строкам. Tопроса=tстроки  N,
где tстроки - время реализации выражения (1) или (2).
3) Параллельно по строкам, последовательно по столбцам. Tопроса=tзэ*k.
4) Параллельно по столбцам и по строкам. Tопроса=Tтакта. Опрос ведется за 1
такт процессора. В реальных запоминающих микросхемах
распространение получили варианты 2 и 3.

Способы извлечения многозначного ответа.


Реализуются 2 варианта:
1) Многозначный вариант извлекается по одному из цепочечных способов.
2) Все ячейки АЗУ нумеруются, и извлечение результата осуществляется по
возрастанию или убыванию номера ячейки. Такие АЗУ являются адресно-
ассоциативными. К ним можно обращаться для записи и чтения как к
обычным адресным ЗУ, а также как к ассоциативным при чтении и
адресным при записи (наиболее распространенный вариант) и другие.

17.2. Односторонние ЗУ.


Односторонними называют ЗУ, которые в рабочем режиме
вычислительной системы работают только на считывание или только на
17
запись. Для их организации используются специальные запоминающие
микросхемы:
1) ЗУ программируемые маской – используются при массовом производстве
(например, К155РЕ3).
2) ЗУ программируемые пользователем (например, К565РТ4). Между
запоминающими элементами устанавливаются все связи, а при
программировании на программаторах электрическим способом
разрушаются те элементы связей, которые не нужны. В качестве
элементов памяти используются: резисторы – резистивные связи; диоды –
диодные связи; диоды + резисторы - диодно-резистивные связи; плавкие
перемычки; индуктивные, емкостные и другие. Программирование
ведется как всего устройства памяти, так и отдельных запоминающих
микросхем.
3) Запоминающие микросхемы с электрическим стиранием и электрической
записью (например, FLASH память).
4) Запоминающие микросхемы с ультрафиолетовым стиранием и
электрической записью (например, К573РФ24).

Структурная схема односторонних ЗУ совпадает со структурной схемой


ЗУ с произвольным доступом. Режимы работы: 1)стирание; 2) запись; 3)
хранение.
Отображение адресного пространства
программы на основную память.
Программа загружается в ОП и занимает часть машинных ресурсов.
Содержимое программы помещается в разных областях ОП: 1) размещение
команд; 2) размещение данных; 3) размещение управляющих таблиц и 4)
области ввода-вывода. Различают статическое размещение (перемещение) и
динамическое.
При загрузке программы выделяют 2 случая:
1) емкость ОП больше емкости программы
17
2) емкость ОП меньше емкости программы. В этом случае имеется
несколько методов выполнения программы. Наиболее распространенный
случай – оверлейная структура, когда программа разбивается на части
меньшие емкости ОП.

При выполнении программ различают абсолютный модуль программы,


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

17.3. Адресация в ЭВМ.


Линейная адресация существует только на уровне аппаратных средств,
когда физический адрес выставляется на линии шины адреса и позволяет
определить номер ячейки оперативной памяти (слово ОП), а также позволяет
определить начальный адрес байта фиксированной единицы информации.
В программах линейная адресация отсутствует. Там существуют
следующие способы получения адреса:
1) математический адрес
2) исполнительный адрес
3) линейный адрес
4) физический адрес.
Различают 16, 32, 64, 128 разрядную адресацию для различных видов
ЭВМ.
При обращении к памяти на шине данных формируется линейный адрес.
На базе линейной адресации тяжело организовать различные режимы работы
систем (Virtual, Real, Protected и другие режимы).
17

Управление памятью.

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


введена сегментация памяти, и в общем случае адресация к любой ячейку
памяти является в определении адреса границы сегмента (база) и смещения в
сегменте. Эта пара носит название логического или виртуального адреса.
Сегментные регистры содержат физические адреса памяти (границу
параграфа). В первых процессорах (i86) размер сегмента составлял 64кб.
Сегменты могли перекрывать друг друга, пересекаться и многократно
пересекаться. Многократные пересечения сегментов сильно усложняли
защиту информации в оперативной памяти. Любой программист мог
обратиться к любому сегменту памяти. При вычислениях не проверялся
адрес на корректность. При формировании адреса, который выходил за
границы реальной физической памяти процессор получал фиктивные данные,
либо зависал в ожидании поступления данных по шине.
Начиная с i286, эта задача была решена. Использовался табличный
способ управления, использовавшийся ранее на малых ЭВМ (PDP 8, PDP 11).
Это позволило реализовать более сложную схему обращения к памяти и
повысить скорость формирования физического адреса. Для этих целей было
введено понятие дескриптор – описатель сегмента. Каждый сегмент хранится
в восьми байтной структуре данных, которая называется дескрипторным
регистром.

63 56 55 52 51 48 47 40 39 32
базовый адрес предел базовый адрес
права доступа
(31:24) (19:16) (16:24)

31 16 15 0
базовый адрес предел
(15:0) (15:0)

Базовый адрес – это начальный адрес сегмента (2, 3, 4, 7 байты дескриптора).


17
Предел – 20-ти битное поле, которое определяет границу сегмента. Предел
равен размеру сегмента в байтах или в страницах (определяется битом
гранулярность).
Пятый байт определяет : права доступа к сегменту, присутствие сегмента в
памяти, уровень привилегий и целевое использование сегмента.

17.4. Дескрипторные таблицы.

Начиная с процессоров i386, допускается любое число сегментов


памяти. Описывающие сегменты дескрипторы позволяют процессору
следить за информацией о сегментах. Поэтому все дескрипторы
располагаются в одном месте. Первые варианты дескрипторов
реализовывались аппаратно, а потом стали размещать в ОП. Эта область
памяти получила название дескрипторных таблиц. Дескрипторные таблицы
делятся на 3 типа, отличающиеся способом использования:
1) GDT (global descriptor table) – глобальные дескрипторные таблицы. Это
общесистемная таблица. Ее могут использовать все задачи. Для локализации
GDT используется специальный регистр GDTR, в котором находится 32-х
битное поле линейного базового адреса таблицы и 16-ти битное поле предела
с битной гранулярностью. Значение предела L связано с числом
дескрипторов N соотношением L=8*N-1.
2) IDT (interrupt descriptor table) – дескрипторная таблица прерываний. Она
содержит дескрипторы специальных системных объектов. Эти объекты
называются шлюзами и определяют точки входа процедур обработки
прерываний и особых случаев. Данная таблица служит заменой таблицы
векторов прерываний. Для локализации таблицы IDT служит системный
регистр IDTR. Его формат аналогичен формату регистра GDTR.
Для перевода микропроцессоров в реальный режим необходимо создать
обе дескрипторные таблицы и инициировать соответствующие системные
регистры.
17
3) LDT (local descriptor table) – локальные дескрипторные таблицы.
Используются в мультизадачной системе для каждой задачи в дополнение к
глобальной дескрипторной таблице, она определяет сегменты доступные
только этой системной задаче. Для локализации LDT предназначен 16-ти
разрядный регистр LDTR, который содержит только селектор.
GDTR и IDTR определяются при загрузке базового адреса и пределов и
выполняется только один раз при подготовке микропроцессора к заданному
режиму работы (например R режим) и в дальнейшем содержимое регистров
не меняется. Участки ОП в которых содержатся первые две дескрипторные
таблицы не могут участвовать в свопинге (удаляться на жесткий диск). LDT
не является необходимой и создается по мере необходимости. Для хранения
LDT используются сегменты памяти, а их дескрипторы хранятся в GDT.
Формирование линейного адреса через дескрипторные таблицы.

В микропроцессорах начиная с i386 формирование линейного адреса


выполняется двумя способами: 1) 16-ти битная адресация; 2) 32-х адресная
адресация.

Лекция 18
Устройства управления ЭВМ
Вопросы
1.

Устройства управления (УУ) предназначены для организации


правильной работы вычислительной системы на всех ее уровнях.
Различали 1)центральное УУ, которое обеспечивало управление на
уровне задач системы и организации цикла работы процессора; 2) местные
устройства управления, среди которых различают УУ выполнения операций
системы команд и управления устройствами системы и внешними
устройствами (контроллеры).
17

Структурная схема УУ

ОА УА
микро-
ОА1 Yi МУУ1 программная
часть

ОА2 Yj МУУ2
програм-
мная
часть УУ
СчАК
АЧ ОЧ РгК

РгАОП ОП
А

Назначение – сформировать и послать управляющие сигналы.


УА – управляющий автомат
ОЧ – операционная часть
АЧ – адресная часть

Управляющие автоматы

Управляющие автоматы – это устройства, предназначенные для


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

УА можно классифицировать: 1) УА с «жесткой» логикой; 2) УА на


основе программируемых логических матриц (ПЛМ); 3) УА с
программируемой логикой – АПЛ (микропрограммные устройства
управления); 4) специализированные УА на базовых матричных кристаллах,
ПЛИС и другие.
17

УА с жесткой логикой (структурная схема).


y 1 (t i ) y l (t k ) управляющие сигналы
...
Логическая схема формирования управляющих
сигналов

ЭА

ОС логическая схема образования функциональных функции возбуждения


сигналов элементарных автоматов

y 0 y 01 . . . yn t1 t2 ... tm

ДС КОП ДС Такта

t0
РгКОП Счетчик Тактов блок с. сигн.

Q(коп)

ЭА – элементарные автоматы (используются триггеры)


ОС – осведомительные сигналы

Главное достоинство – высокое быстродействие (работает на тех же


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

АПЛ
Структурная схема. Основу составляет микропрограммное
запоминающее устройство (МПЗУ), в котором хранятся команды.
18
КОП
РгК
ОЧ – операционная часть
G
X
АЧ – адресная часть,
БФАМК {y i }
указывает местоположение
РгАМК {y j }
следующей микрокоманды
РгАМК – регистр адреса
МПЗУ {y k }
микрокоманды
БФАМК - блок
РгМК ОЧ РгАМК {y p } формирования адреса

БФУС
t0
ГСИ
микрокоманды
БФУС – блок
y 1 (t i ) y l (t k ) формирования
управляющих сигналов

АПЛ различаются по следующим признакам:


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

АПЛ получили распространение и вытеснили УА с жесткой логикой


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

Кодирование Микроопераций.
Различают 3 способа кодирования:
1) Унарное кодирование (горизонтальное)
С каждым битом микрокоманды сопоставляется определенная
микрооперация. Если данная микрооперация присутствует в микрокоманде,
то бит устанавливается в 1, если отсутствует – в 0.
Достоинства: 1) простота кодирования; 2) при однофазном
тактировании блок формирования управляющих сигналов может
отсутствовать, а содержимое микрокоманды могут являтся управляющими
сигналами. При многофазном тактировании БФУС будет представлять набор
логических схем «И». Недостаток – неэффективное использование
микропрограммной памяти из-за чрезвычайно большой длины операционной
части микрокоманды.

2) Неизбыточное кодирование (вертикальное). Каждой микрокоманде


ставится в соответствие двоичный код n=[log2(M)], где M – количество
используемых микрокоманд. В этом случае усложнится блок формирования
управляющих сигналов. На вход ставится дешифратор. Каждый вход
дешифратора будет соответствовать микрокоманде. Каждый шифратор
содержит столько выходов, сколько микроопераций реализуется в данной
микрокоманде. Если используется многофазное тактирование, то каждый
выходной сигнал должен привязываться к i как в предыдущем номере для
каждого дешифратора.
18
Чем больше микроопераций в одной микрокоманде тем количество
микрокоманд меньше, длина микрокоманд сокращается, усложняется БФУС.
Но для каждой микрокоманды может быть лишь одна микрооперация, тогда
длина микрокоманд увеличивается, но БФУС упрощается. Микрокоманды
содержащие только одну микрооперацию назывались раньше
миникомандами.

3) Смешанное кодирование микроопераций (кодирование с полевой


структурой). Все множество V микроопераций разбивается на К
подмножеств. V->V1,V2,…,Vk. В каждое такое подмножество входят
несовместимые микрооперации (не могут одновременно встретиться в
микрокоманде). Различают: 1) аппаратную несовместимость (например,
когда в один регистр нужно записать число и сдвинуть его содержимое); 2)
алгоритмическая несовместимость (могут быть выполнены совместно, но в
разработанных алгоритмах они никогда вместе не встречаются).
Несовместимые микрооперации выделяются в отдельное поле Fi, где каждой
микрооперации ставится в соответствие свой код. В этом случае нужно
предусмотреть значение кода при котором в данном поле отсутствуют все
микрооперации (пустой микроприказ). Если некоторое поле Vi содержит n
микроопераций, то длина поля Ln=[log2(n+2)]. Возникает задача
оптимального кодирования.

Разбиение на поля микроопераций при смешанном кодировании.


Задача оптимального кодирования заключается в том, чтобы все
множество микроопераций разбить на минимальное количество полей с
максимальным числом микроопераций в каждом поле.
Рассмотрим метод исключения совместимых микроопераций
предложенный Волковыским В.Л. на примере по шагам.
1) Пусть V={y1,y2,..,y10} – набор микроопераций.
2) Для этого набора микроопераций составляем матрицу совместимости S:
18

1 2 3 4 5 6 7 8 9 10
0 1 0 0 0 0 0 0 0 0 1
1 0 0 1 0 0 0 0 1 1 2
0 0 0 0 0 0 0 0 0 0 3
0 1 0 0 1 1 0 0 1 0 4
0 0 0 1 0 1 0 0 0 0 5
0 0 0 1 1 0 0 1 0 1 6
0 0 0 0 0 0 0 1 1 0 7
0 0 0 0 0 1 1 0 0 0 8
0 1 0 1 0 0 1 0 0 1 9
0 1 0 0 0 1 0 0 1 0 10

3) Составляем множество совместимых микроопераций. Z1={2},


Z2={1,4,9,10}, Z3={0}, Z4={2,5,6,9}, Z5={4,6}, Z6={4,5,8,10}, Z7={8,9},
Z8={6,7}, Z9={2,4,7,10}, Z10={2,6,9}.
4) Полагая, что y1=V={1,2,3,4,5,6,7,8,9,10} нужно выделить несовместимые
микрооперации. Начинаем с Z1 (в данном случае просто идем по списку):
выделяем 2. Рассматриваем Z3, Z4 : выделяем 5, 6, 9; Z7 : выделяем 8;
Z10. Отсюда получаем поле несовместимых микроопераций:
V1={1,3,4,7,10} n1=3 разряда. y2={2,5,6,8,9} -> V2={2,5,8} n2=2 разряда.
y3={6,9} -> V3={6,9} n3=2 разряда.
5) Составляем структуру операционной части микрокоманды:

6) Кодирование полей для V1

0 0 0 пустая операция
0 0 1 y1
0 1 0 y3
0 1 1 y4
1 0 0 y7
1 0 1 y10

Аналогично кодируются поля для V2 и V3.


18
Адресация микрокоманд
1) Принудительная адресация.
а) с двумя принудительными адресами. В поле SEL закодировано все
множество осведомительных сигналов. Среди них нужно выбрать условные

МПЗУ

ОЧ SEL A1 A2 РгМК

1
БФУС
.. ДС 1
. ..
{y i (t)}
. 1
{ОС}
&
ОС
1
из
ОА &

переходы, безусловный переход и отсутствие перехода.

Достоинство - всегда можно распределить свободные ячейки


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

А - адрес перехода

из РгК
МПЗУ КОП

ПНА
ОЧ SEL А РгМК
А 0

СчАМК
БФУС
.. +1
ДС
. ..
{y i (t)}
. 1
{ОС}
&
ОС
1
из
ОА &

б) АПЛ с естественной адресацией.

Достоинство – только один адрес. Недостаток – адрес полно-разрядный.


в) АПЛ с сокращенными адресами. Используется страничный метод
адресации.

Адрес Адрес на
страницы странице
CntA+1

МПЗУ

ОЧ SEL А РгМК

БФУС
.. ДС
. ..
{y i (t)}
. 1
{ОС}

ОС
Логическая схема
из управления
ОА адресом
18
Достоинство – сокращается длина адреса указанного в микрокоманде в 2 и
больше число раз (зависит от размера выбранной страницы). Недостаток – в
некоторых случаях возникает необходимость выполнения дополнительной
команды смены номера страницы. Если переход в пределах страницы, то
номер менять не надо.

2) АПЛ с разделенной адресной и операционной частью микрокоманды.


Если бит Р=1, то присутствует только операционная часть. В противном
случае (Р=0) – присутствует адресная часть.

МПЗУ

Y РгМК
P
SEL А

БФУС ДС любой из
.. вариантов
(а,б,в)
.
{y i (t)}
18

Лекция 19
Определение понятия "архитектура"
Вопросы
1. Архитектура системы команд
2. Методы адресации и типы данных

Термин "архитектура системы" часто употребляется как в узком, так и в


широком смысле этого слова. В узком смысле под архитектурой понимается
архитектура набора команд. Архитектура набора команд служит границей
между аппаратурой и программным обеспечением и представляет ту часть
системы, которая видна программисту или разработчику компиляторов.
Следует отметить, что это наиболее частое употребление этого термина. В
широком смысле архитектура охватывает понятие организации системы,
включающее такие высокоуровневые аспекты разработки компьютера как
систему памяти, структуру системной шины, организацию ввода/вывода и
т.п.
Применительно к вычислительным системам термин "архитектура" может
быть определен как распределение функций, реализуемых системой, между
ее уровнями, точнее как определение границ между этими уровнями. Таким
образом, архитектура вычислительной системы предполагает
многоуровневую организацию. Архитектура первого уровня определяет,
какие функции по обработке данных выполняются системой в целом, а какие
возлагаются на внешний мир (пользователей, операторов, администраторов
баз данных и т.д.). Система взаимодействует с внешним миром через набор
интерфейсов: языки (язык оператора, языки программирования, языки
описания и манипулирования базой данных, язык управления заданиями) и
системные программы (программы-утилиты, программы редактирования,
сортировки, сохранения и восстановления информации).
18
Интерфейсы следующих уровней могут разграничивать определенные
уровни внутри программного обеспечения. Например, уровень управления
логическими ресурсами может включать реализацию таких функций, как
управление базой данных, файлами, виртуальной памятью, сетевой
телеобработкой. К уровню управления физическими ресурсами относятся
функции управления внешней и оперативной памятью, управления
процессами, выполняющимися в системе.
Следующий уровень отражает основную линию разграничения системы, а
именно границу между системным программным обеспечением и
аппаратурой. Эту идею можно развить и дальше и говорить о распределении
функций между отдельными частями физической системы. Например,
некоторый интерфейс определяет, какие функции реализуют центральные
процессоры, а какие - процессоры ввода/вывода. Архитектура следующего
уровня определяет разграничение функций между процессорами
ввода/вывода и контроллерами внешних устройств. В свою очередь можно
разграничить функции, реализуемые контроллерами и самими устройствами
ввода/вывода (терминалами, модемами, накопителями на магнитных дисках
и лентах). Архитектура таких уровней часто называется архитектурой
физического ввода/вывода.
19.1. Архитектура системы команд.
Классификация процессоров (CISC и RISC)
Как уже было отмечено, архитектура набора команд служит границей между
аппаратурой и программным обеспечением и представляет ту часть системы,
которая видна программисту или разработчику компиляторов.
Двумя основными архитектурами набора команд, используемыми
компьютерной промышленностью на современном этапе развития
вычислительной техники являются архитектуры CISC и RISC.
Основоположником CISC-архитектуры можно считать компанию IBM с ее
базовой архитектурой /360, ядро которой используется с1964 года и дошло до
наших дней, например, в таких современных мейнфреймах как IBM ES/9000.
18
Лидером в разработке микропроцессоров c полным набором команд (CISC -
Complete Instruction Set Computer) считается компания Intel со своей серией
x86 и Pentium. Эта архитектура является практическим стандартом для рынка
микрокомпьютеров. Для CISC-процессоров характерно: сравнительно
небольшое число регистров общего назначения; большое количество
машинных команд, некоторые из которых нагружены семантически
аналогично операторам высокоуровневых языков программирования и
выполняются за много тактов; большое количество методов адресации;
большое количество форматов команд различной разрядности; преобладание
двухадресного формата команд; наличие команд обработки типа регистр-
память.
Основой архитектуры современных рабочих станций и серверов является
архитектура компьютера с сокращенным набором команд (RISC - Reduced
Instruction Set Computer). Зачатки этой архитектуры уходят своими корнями к
компьютерам CDC6600, разработчики которых (Торнтон, Крэй и др.)
осознали важность упрощения набора команд для построения быстрых
вычислительных машин. Эту традицию упрощения архитектуры С. Крэй с
успехом применил при создании широко известной серии суперкомпьютеров
компании Cray Research. Однако окончательно понятие RISC в современном
его понимании сформировалось на базе трех исследовательских проектов
компьютеров: процессора 801 компании IBM, процессора RISC университета
Беркли и процессора MIPS Стенфордского университета.
Разработка экспериментального проекта компании IBM началась еще в конце
70-х годов, но его результаты никогда не публиковались и компьютер на его
основе в промышленных масштабах не изготавливался. В 1980 году
Д.Паттерсон со своими коллегами из Беркли начали свой проект и
изготовили две машины, которые получили названия RISC-I и RISC-II.
Главными идеями этих машин было отделение медленной памяти от
высокоскоростных регистров и использование регистровых окон. В 1981году
Дж.Хеннесси со своими коллегами опубликовал описание стенфордской
19
машины MIPS, основным аспектом разработки которой была эффективная
реализация конвейерной обработки посредством тщательного планирования
компилятором его загрузки.
Эти три машины имели много общего. Все они придерживались
архитектуры, отделяющей команды обработки от команд работы с памятью,
и делали упор на эффективную конвейерную обработку. Система команд
разрабатывалась таким образом, чтобы выполнение любой команды
занимало небольшое количество машинных тактов (предпочтительно один
машинный такт). Сама логика выполнения команд с целью повышения
производительности ориентировалась на аппаратную, а не на
микропрограммную реализацию. Чтобы упростить логику декодирования
команд использовались команды фиксированной длины и фиксированного
формата.
Среди других особенностей RISC-архитектур следует отметить наличие
достаточно большого регистрового файла (в типовых RISC-процессорах
реализуются 32 или большее число регистров по сравнению с 8 - 16
регистрами в CISC-архитектурах), что позволяет большему объему данных
храниться в регистрах на процессорном кристалле большее время и упрощает
работу компилятора по распределению регистров под переменные. Для
обработки, как правило, используются трехадресные команды, что помимо
упрощения дешифрации дает возможность сохранять большее число
переменных в регистрах без их последующей перезагрузки.
Ко времени завершения университетских проектов (1983-1984 гг.)
обозначился также прорыв в технологии изготовления сверхбольших
интегральных схем. Простота архитектуры и ее эффективность,
подтвержденная этими проектами, вызвали большой интерес в
компьютерной индустрии и с 1986 года началась активная промышленная
реализация архитектуры RISC. К настоящему времени эта архитектура
прочно занимает лидирующие позиции на мировом компьютерном рынке
рабочих станций и серверов.
19
Развитие архитектуры RISC в значительной степени определялось
прогрессом в области создания оптимизирующих компиляторов. Именно
современная техника компиляции позволяет эффективно использовать
преимущества большего регистрового файла, конвейерной организации и
большей скорости выполнения команд. Современные компиляторы
используют также преимущества другой оптимизационной техники для
повышения производительности, обычно применяемой в процессорах RISC:
реализацию задержанных переходов и суперскалярной обработки,
позволяющей в один и тот же момент времени выдавать на выполнение
несколько команд.
Следует отметить, что в последних разработках компании Intel (имеется в
виду Pentium P54C и процессор следующего поколения P6), а также ее
последователей-конкурентов (AMD R5, Cyrix M1, NexGen Nx586 и др.)
широко используются идеи, реализованные в RISC-микропроцессорах, так
что многие различия между CISC и RISC стираются. Однако сложность
архитектуры и системы команд x86 остается и является главным фактором,
ограничивающим производительность процессоров на ее основе.

19.2. Методы адресации и типы данных


Методы адресации
В машинах к регистрами общего назначения метод (или режим) адресации
объектов, с которыми манипулирует команда, может задавать константу,
регистр или ячейку памяти. Для обращения к ячейке памяти процессор
прежде всего должен вычислить действительный или эффективный адрес
памяти, который определяется заданным в команде методом адресации.
На рис. 4.1 представлены все основные методы адресации операндов,
которые реализованы в компьютерах, рассмотренных в настоящем обзоре.
Адресация непосредственных данных и литеральных констант обычно
рассматривается как один из методов адресации памяти (хотя значения
данных, к которым в этом случае производятся обращения, являются частью
19
самой команды и обрабатываются в общем потоке команд). Адресация
регистров, как правило, рассматривается отдельно. В данном разделе методы
адресации, связанные со счетчиком команд (адресация относительно
счетчика команд) рассматриваются отдельно. Этот вид адресации
используется главным образом для определения программных адресов в
командах передачи управления.
На рисунке на примере команды сложения (Add) приведены наиболее
употребительные названия методов адресации, хотя при описании
архитектуры в документации разные производители используют разные
названия для этих методов. На этом рисунке знак "(" используется для
обозначения оператора присваивания, а буква М обозначает память
(Memory). Таким образом, M[R1] обозначает содержимое ячейки памяти,
адрес которой определяется содержимым регистра R1.
Использование сложных методов адресации позволяет существенно сократить количество команд
в программе, но при этом значительно увеличивается сложность аппаратуры. Возникает вопрос, а
как часто эти методы адресации используются в реальных программах? На рис. 4.2 представлены
результаты измерений частоты использования различных методов адресации на примере трех
популярных программ (компилятора с языка Си GCC, текстового редактора TeX и САПР Spice),
выполненных на компьютере VAX.

Пример Смысл команды


Метод адресации
команды метода Использование
R4(R4+R5 Требуемое значение в
Регистровая Add R4,R3
регистре
Непосредственная или
Add R4,#3 R4(R4+3 Для задания констант
литеральная
R4(R4+M[100+R1] Для обращения
Базовая со смещением Add R4,100(R1) к
локальным переменным
R4(R4+M[R1] Для обращения по
Косвенная регистровая Add R4,(R1) указателю или вычисленному
адресу
19
R3(R3+M[R1+R2] Иногда полезна
Индексная Add R3,(R1+R2) при работе с массивами: R1 - база,
R3 - индекс
R1(R1+M[1000] Иногда полезна
Прямая или
Add R1,(1000) для обращения к статическим
абсолютная
данным
R1(R1+M[M[R3]] Если R3-адрес
Косвенная Add R1,@(R3) указателя p, то выбирается
значение по этому указателю
R1(R1+M[R2]
R2(R2+d Полезна для прохода в
цикле по массиву с шагом: R2 -
Автоинкрементная Add R1,(R2)+
начало массива
В каждом цикле R2 получает
приращение d
R2(R2-d
R1(R1+M[R2] Аналогична
Автодекрементная Add R1,(R2)- предыдущей
Обе могут использоваться для
реализации стека
Базовая индексная со R1(
Add R1,100(R2)
смещением и R1+M[100]+R2+R3*d Для
[R3]
масштабированием индексации массивов
Рис. 4.1. Методы адресации
19

Рис. 4.2. Частота использования различных методов адресации на


программах TeX, Spice, GCC
Из этого рисунка видно, что непосредственная адресация и базовая со
смещением доминируют.
При этом основной вопрос, который возникает для метода базовой адресации
со смещением, связан с длиной (разрядностью) смещения. Выбор длины
смещения в конечном счете определяет длину команды. Результаты
измерений показали, что в подавляющем большинстве случаев длина
смещения не превышает16 разрядов.
Этот же вопрос важен и для непосредственной адресации. Непосредственная
адресация используется при выполнении арифметических операций,
операций сравнения, а также для загрузки констант в регистры. Результаты
анализа статистики показывают, что в подавляющем числе случаев 16
разрядов оказывается вполне достаточно (хотя для вычисления адресов
намного реже используются и более длинные константы).
Важным вопросом построения любой системы команд является оптимальное
кодирование команд. Оно определяется количеством регистров и
применяемых методов адресации, а также сложностью аппаратуры,
необходимой для декодирования. Именно поэтому в современных RISC-
архитектурах используются достаточно простые методы адресации,
позволяющие резко упростить декодирование команд. Более сложные и
19
редко встречающиеся в реальных программах методы адресации
реализуются с помощью дополнительных команд, что вообще говоря
приводит к увеличению размера программного кода. Однако такое
увеличение длины программы с лихвой окупается возможностью простого
увеличения тактовой частоты RISC-процессоров. Этот процесс мы можем
наблюдать сегодня, когда максимальные тактовые частоты практически всех
RISC-процессоров (Alpha, R4400, Hyper SPARC и Power2) превышают
тактовую частоту, достигнутую процессором Pentium.
Типы команд
Команды традиционного машинного уровня можно разделить на несколько
типов, которые показаны на рис. 4.3.
Тип операции Примеры
Целочисленные арифметические и логические
Арифметические и
операции: сложение, вычитание, логическое сложение,
логические
логическое умножение и т.д.
Пересылки данных Операции загрузки/записи
Управление потоком Безусловные и условные переходы, вызовы процедур и
команд возвраты
Системные вызовы, команды управления виртуальной
Системные операции
памятью и т.д.
Операции с Операции сложения, вычитания, умножения и деления
плавающей точкой над вещественными числами
Десятичное сложение, умножение, преобразование
Десятичные операции
форматов и т.д.
Операции над
Пересылки, сравнения и поиск строк
строками
Рис. 4.3. Основные типы команд
Команды управления потоком команд
В английском языке для указания команд безусловного перехода, как
правило, используется термин jump, а для команд условного перехода -
термин branch, хотя разные поставщики необязательно придерживаются этой
19
терминологии. Например компания Intel использует термин jump и для
условных, и для безусловных переходов. Можно выделить четыре основных
типа команд для управления потоком команд: условные переходы,
безусловные переходы, вызовы процедур и возвраты из процедур.
Частота использования этих команд по статистике примерно следующая. В
программах доминируют команды условного перехода. Среди указанных
команд управления на разных программах частота их использования
колеблется от 66 до 78%. Следующие по частоте использования - команды
безусловного перехода (от 12 до 18%). Частота переходов на выполнение
процедур и возврата из них составляет от 10 до 16%.
При этом примерно 90% команд безусловного перехода выполняются
относительно счетчика команд. Для команд перехода адрес перехода должен
быть всегда заранее известным. Это не относится к адресам возврата,
которые не известны во время компиляции программы и должны
определяться во время ее работы. Наиболее простой способ определения
адреса перехода заключается в указании его положения относительно
текущего значения счетчика команд (с помощью смещения в команде), и
такие переходы называются переходами относительно счетчика команд.
Преимуществом такого метода адресации является то, что адреса переходов,
как правило, расположены недалеко от текущего адреса выполняемой
команды и указание относительно текущего значения счетчика команд
требует небольшого количества бит в смещении. Кроме того, использование
адресации относительно счетчика команд позволяет программе выполняться
в любом месте памяти, независимо от того, куда она была загружена. То есть
этот метод адресации позволяет автоматически создавать перемещаемые
программы.
Реализация возвратов и переходов по косвенному адресу, в которых адрес не
известен во время компиляции программы, требует методов адресации,
отличных от адресации относительно счетчика команд. В этом случае адрес
перехода должен определяться динамически во время работы программы.
19
Наиболее простой способ заключается в указании регистра для хранения
адреса возврата, либо для перехода может разрешаться любой метод
адресации для вычисления адреса перехода.
Одним из ключевых вопросов реализации команд перехода состоит в том,
насколько далеко целевой адрес перехода находится от самой команды
перехода? И на этот вопрос статистика использования команд дает ответ: в
подавляющем большинстве случаев переход идет в пределах 3 - 7 команд
относительно команды перехода, причем в 75% случаев выполняются
переходы в направлении увеличения адреса, т.е. вперед по программе.
Поскольку большинство команд управления потоком команд составляют
команды условного перехода, важным вопросом реализации архитектуры
является определение условий перехода. Для этого используются три
различных подхода. При первом из них в архитектуре процессора
предусматривается специальный регистр, разряды которого соответствуют
определенным кодам условий. Команды условного перехода проверяют эти
условия в процессе своего выполнения. Преимуществом такого подхода
является то, что иногда установка кода условия и переход по нему могут
быть выполнены без дополнительных потерь времени, что, впрочем, бывает
достаточно редко. А недостатками такого подхода является то, что, во-
первых, появляются новые состояния машины, за которыми необходимо
следить (упрятывать при прерывании и восстанавливать при возврате из
него). Во-вторых, и что очень важно для современных высокоскоростных
конвейерных архитектур, коды условий ограничивают порядок выполнения
команд в потоке, поскольку их основное назначение заключается в передаче
кода условия команде условного перехода.
Второй метод заключается в простом использовании произвольного регистра
(возможно одного выделенного) общего назначения. В этом случае
выполняется проверка состояния этого регистра, в который предварительно
помещается результат операции сравнения. Недостатком этого подхода
19
является необходимость выделения в программе для анализа кодов условий
специального регистра.
Третий метод предполагает объединение команды сравнения и перехода в
одной команде. Недостатком такого подхода является то, что эта
объединенная команда довольно сложна для реализации (в одной команде
надо указать и тип условия, и константу для сравнения и адрес перехода).
Поэтому в таких машинах часто используется компромиссный вариант, когда
для некоторых кодов условий используются такие команды, например, для
сравнения с нулем, а для более сложных условий используется регистр
условий. Часто для анализа результатов команд сравнения для
целочисленных операций и для операций с плавающей точкой используется
разная техника, хотя это можно объяснить и тем, что в программах
количество переходов по условиям выполнения операций с плавающей
точкой значительно меньше общего количества переходов, определяемых
результатами работы целочисленной арифметики.
Одним из наиболее заметных свойств большинства программ является
преобладание в них сравнений на условие равно/неравно и сравнений с
нулем. Поэтому в ряде архитектур такие команды выделяются в отдельный
поднабор, особенно при использовании команд типа "сравнить и перейти".
Говорят, что переход выполняется, если истинным является условие, которое
проверяет команда условного перехода. В этом случае выполняется переход
на адрес, заданный командой перехода. Поэтому все команды безусловного
перехода всегда выполняемые. По статистике оказывается, что переходы
назад по программе в большинстве случаев используются для организации
циклов, причем примерно 60% из них составляют выполняемые переходы. В
общем случае поведение команд условного перехода зависит от конкретной
прикладной программы, однако иногда сказывается и зависимость от
компилятора. Такие зависимости от компилятора возникают вследствие
изменений потока управления, выполняемого оптимизирующими
компиляторами для ускорения выполнения циклов.
19
Вызовы процедур и возвраты предполагают передачу управления и возможно
сохранение некоторого состояния. Как минимум, необходимо уметь где-то
сохранять адрес возврата. Некоторые архитектуры предлагают аппаратные
механизмы для сохранения состояния регистров, в других случаях
предполагается вставка в программу команд самим компилятором. Имеются
два основных вида соглашений относительно сохранения состояния
регистров. Сохранение вызывающей (caller saving) программой означает, что
вызывающая процедура должна сохранять свои регистры, которые она хочет
использовать после возврата в нее. Сохранение вызванной процедурой
предполагает, что вызванная процедура должна сохранить регистры, которые
она собирается использовать. Имеются случаи, когда должно использоваться
сохранение вызывающей процедурой для обеспечения доступа к глобальным
переменным, которые должны быть доступны для обеих процедур.
Типы и размеры операндов
Имеется два альтернативных метода определения типа операнда. В первом из
них тип операнда может задаваться кодом операции в команде. Это наиболее
употребительный способ задания типа операнда. Второй метод предполагает
указание типа операнда с помощью тега, который хранится вместе с данными
и интерпретируется аппаратурой во время выполнения операций над
данными. Этот метод использовался, например, в машинах фирмы Burroughs,
но в настоящее время он практически не применяется и все современные
процессоры пользуются первым методом.
Обычно тип операнда (например, целый, вещественный с одинарной
точностью или символ) определяет и его размер. Однако часто процессоры
работают с целыми числами длиною 8, 16, 32 или 64 бит. Как правило целые
числа представляются в дополнительном коде. Для задания символов (1 байт
= 8 бит) в машинах компании IBM используется код EBCDIC, но в машинах
других производителей почти повсеместно применяется кодировка ASCII.
Еще до сравнительно недавнего времени каждый производитель процессоров
пользовался своим собственным представлением вещественных чисел (чисел
20
с плавающей точкой). Однако за последние несколько лет ситуация
изменилась. Большинство поставщиков процессоров в настоящее время для
представления вещественных чисел с одинарной и двойной точностью
придерживаются стандарта IEEE 754.
В некоторых процессорах используются двоично кодированные десятичные
числа, которые представляются в в упакованном и неупакованном форматах.
Упакованный формат предполагает, что для кодирования цифр 0-9
используются 4 разряда и что две десятичные цифры упаковываются в
каждый байт. В неупакованном формате байт содержит одну десятичную
цифру, которая обычно изображается в символьном коде ASCII.
В большинстве процессоров, кроме того, реализуются операции над
цепочками (строками) бит, байт, слов и двойных слов.
20
Лекция 20
Конвейерная обработка
Вопросы
1. Простейшая организация конвейера и оценка его производительности
2. Структурные конфликты и способы их минимизации
3. Конфликты по данным, остановы конвейера и реализация механизма
обходов

Разработчики архитектуры компьютеров издавна прибегали к методам


проектирования, известным под общим названием "совмещение операций",
при котором аппаратура компьютера в любой момент времени выполняет
одновременно более одной базовой операции. Этот общий метод включает
два понятия: параллелизм и конвейеризацию. Хотя у них много общего и их
зачастую трудно различать на практике, эти термины отражают два
совершенно различных подхода. При параллелизме совмещение операций
достигается путем воспроизведения в нескольких копиях аппаратной
структуры. Высокая производительность достигается за счет одновременной
работы всех элементов структур, осуществляющих решение различных
частей задачи.
Конвейеризация (или конвейерная обработка) в общем случае основана на
разделении подлежащей исполнению функции на более мелкие части,
называемые ступенями, и выделении для каждой из них отдельного блока
аппаратуры. Так обработку любой машинной команды можно разделить на
несколько этапов (несколько ступеней), организовав передачу данных от
одного этапа к следующему. При этом конвейерную обработку можно
использовать для совмещения этапов выполнения разных команд.
Производительность при этом возрастает благодаря тому, что одновременно
на различных ступенях конвейера выполняются несколько команд.
Конвейерная обработка такого рода широко применяется во всех
современных быстродействующих процессорах.
20
20.1. Простейшая организация конвейера
и оценка его производительности
Для иллюстрации основных принципов построения процессоров мы будем
использовать простейшую архитектуру, содержащую 32 целочисленных
регистра общего назначения (R0,...,R31), 32 регистра плавающей точки
(F0,...,F31) и счетчик команд PC. Будем считать, что набор команд нашего
процессора включает типичные арифметические и логические операции,
операции с плавающей точкой, операции пересылки данных, операции
управления потоком команд и системные операции. В арифметических
командах используется трехадресный формат, типичный для RISC-
процессоров, а для обращения к памяти используются операции загрузки и
записи содержимого регистров в память.
Выполнение типичной команды можно разделить на следующие этапы:
 выборка команды - IF (по адресу, заданному счетчиком команд, из
памяти извлекается команда);
 декодирование команды / выборка операндов из регистров - ID;

 выполнение операции / вычисление эффективного адреса памяти - EX;

 обращение к памяти - MEM;

 запоминание результата - WB.

На рис. 5.1 представлена схема простейшего процессора, выполняющего


указанные выше этапы выполнения команд без совмещения. Чтобы
конвейеризовать эту схему, мы можем просто разбить выполнение команд на
указанные выше этапы, отведя для выполнения каждого этапа один такт
синхронизации, и начинать в каждом такте выполнение новой команды.
Естественно, для хранения промежуточных результатов каждого этапа
необходимо использовать регистровые станции. На рис. 5.2 показана схема
процессора с промежуточными регистровыми станциями, которые
обеспечивают передачу данных и управляющих сигналов с одной ступени
20
конвейера на следующую. Хотя общее время выполнения одной команды в
таком конвейере будет составлять пять тактов, в каждом такте аппаратура
будет выполнять в совмещенном режиме пять различных команд.
Работу конвейера можно условно представить в виде сдвинутых во времени
схем процессора (рис. 5.3). Этот рисунок хорошо отражает совмещение во
времени выполнения различных этапов команд. Однако чаще для
представления работы конвейера используются временные диаграммы (рис.
5.4), на которых обычно изображаются выполняемые команды, номера
тактов и этапы выполнения команд.
Конвейеризация увеличивает пропускную способность процессора
(количество команд, завершающихся в единицу времени), но она не
сокращает время выполнения отдельной команды. В действительности, она
даже несколько увеличивает время выполнения каждой команды из-за
накладных расходов, связанных с управлением регистровыми станциями.
Однако увеличение пропускной способности означает, что программа будет
выполняться быстрее по сравнению с простой неконвейерной схемой.
Тот факт, что время выполнения каждой команды в конвейере не
уменьшается, накладывает некоторые ограничения на практическую длину
конвейера. Кроме ограничений, связанных с задержкой конвейера, имеются
также ограничения, возникающие в результате несбалансированности
задержки на каждой его ступени и из-за накладных расходов на
конвейеризацию. Частота синхронизации не может быть выше, а,
следовательно, такт синхронизации не может быть меньше, чем время,
необходимое для работы наиболее медленной ступени конвейера. Накладные
расходы на организацию конвейера возникают из-за задержки сигналов в
конвейерных регистрах (защелках) и из-за перекосов сигналов
синхронизации. Конвейерные регистры к длительности такта добавляют
время установки и задержку распространения сигналов. В предельном случае
длительность такта можно уменьшить до суммы накладных расходов и
20
перекоса сигналов синхронизации, однако при этом в такте не останется
времени для выполнения полезной работы по преобразованию информации.
В качестве примера рассмотрим неконвейерную машину с пятью этапами выполнения операций,
которые имеют длительность 50, 50, 60, 50 и 50 нс соответственно (рис. 5.5). Пусть накладные
расходы на организацию конвейерной обработки составляют 5 нс. Тогда среднее время
выполнения команды в неконвейерной машине будет равно 260 нс. Если же используется
конвейерная организация, длительность такта будет равна длительности самого медленного
этапа обработки плюс накладные расходы, т.е. 65 нс. Это время соответствует среднему времени
выполнения команды в конвейере. Таким образом, ускорение, полученное в результате
конвейеризации, будет равно:

Среднее время выполнения команды в неконвейерном режиме = 260


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

Рис. 5.3. Представление о работе конвейера

Номер команды Номер такта


1 2 3 456789
MEM WB

Команда i IF ID EX

Команда i+1 IF ID EX MEM WB


20

ID EX MEM WB

Команда i+2 IF

IF ID EX MEM WB
Команда i+3

Команда i+4 IF ID EX MEM WB


Рис. 5.4. Диаграмма работы простейшего конвейера

Рис. 5.5. Эффект конвейеризации при выполнении 3-х команд -


четырехкратное ускорение
При реализации конвейерной обработки возникают ситуации, которые
препятствуют выполнению очередной команды из потока команд в
предназначенном для нее такте. Такие ситуации называются конфликтами.
Конфликты снижают реальную производительность конвейера, которая
20
могла бы быть достигнута в идеальном случае. Существуют три класса
конфликтов:
1. Структурные конфликты, которые возникают из-за конфликтов по
ресурсам, когда аппаратные средства не могут поддерживать все
возможные комбинации команд в режиме одновременного выполнения
с совмещением.
2. Конфликты по данным, возникающие в случае, когда выполнение
одной команды зависит от результата выполнения предыдущей
команды.

3. Конфликты по управлению, которые возникают при конвейеризации


команд переходов и других команд, которые изменяют значение
счетчика команд.

Конфликты в конвейере приводят к необходимости приостановки


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

20.2. Структурные конфликты и способы их минимизации

Совмещенный режим выполнения команд в общем случае требует


конвейеризации функциональных устройств и дублирования ресурсов для
разрешения всех возможных комбинаций команд в конвейере. Если какая-
нибудь комбинация команд не может быть принята из-за конфликта по
ресурсам, то говорят, что в машине имеется структурный конфликт.
Наиболее типичным примером машин, в которых возможно появление
структурных конфликтов, являются машины с не полностью конвейерными
функциональными устройствами. Время работы такого устройства может
20
составлять несколько тактов синхронизации конвейера. В этом случае
последовательные команды, которые используют данное функциональное
устройство, не могут поступать в него в каждом такте. Другая возможность
появления структурных конфликтов связана с недостаточным дублированием
некоторых ресурсов, что препятствует выполнению произвольной
последовательности команд в конвейере без его приостановки. Например,
машина может иметь только один порт записи в регистровый файл, но при
определенных обстоятельствах конвейеру может потребоваться выполнить
две записи в регистровый файл в одном такте. Это также приведет к
структурному конфликту. Когда последовательность команд наталкивается
на такой конфликт, конвейер приостанавливает выполнение одной из команд
до тех пор, пока не станет доступным требуемое устройство.
Структурные конфликты возникают, например, и в машинах, в которых
имеется единственный конвейер памяти для команд и данных (рис. 5.6). В
этом случае, когда одна команда содержит обращение к памяти за данными,
оно будет конфликтовать с выборкой более поздней команды из памяти.
Чтобы разрешить эту ситуацию, можно просто приостановить конвейер на
один такт, когда происходит обращение к памяти за данными. Подобная
приостановка часто называются "конвейерным пузырем" (pipeline bubble) или
просто пузырем, поскольку пузырь проходит по конвейеру, занимая место,
но не выполняя никакой полезной работы.
При всех прочих обстоятельствах, машина без структурных конфликтов
будет всегда иметь более низкий CPI (среднее число тактов на выдачу
команды). Возникает вопрос: почему разработчики допускают наличие
структурных конфликтов? Для этого имеются две причины: снижение
стоимости и уменьшение задержки устройства. Конвейеризация всех
функциональных устройств может оказаться слишком дорогой. Машины,
допускающие два обращения к памяти в одном такте, должны иметь
удвоенную пропускную способность памяти, например, путем организации
раздельных кэшей для команд и данных. Аналогично, полностью
20
конвейерное устройство деления с плавающей точкой требует огромного
количества вентилей. Если структурные конфликты не будут возникать
слишком часто, то может быть и не стоит платить за то, чтобы их обойти.
Как правило, можно разработать неконвейерное, или не полностью
конвейерное устройство, имеющее меньшую общую задержку, чем
полностью конвейерное. Например, разработчики устройств с плавающей
точкой компьютеров CDC7600 и MIPS R2010 предпочли иметь меньшую
задержку выполнения операций вместо полной их конвейеризации.

Рис. 5.6, а. Пример структурного конфликта при реализации памяти с


одним портом

Команда Номер такта


1 2 3 4 5 6 7 8 9 10
21
MEM WB

Команда загрузки IF ID EX

EX MEM WB

Команда 1 IF ID

ID EX MEM WB

Команда 2 IF

stall IF ID EX MEM WB
Команда 3

Команда 4
IF ID EX MEM WB

Команда 5
IF ID EX MEM

Команда 6

IF ID EX
Рис. 5.6, б. Диаграмма работы конвейера при структурном конфликте
21

20.2. Конфликты по данным, остановы конвейера и реализация


механизма обходов

Одним из факторов, который оказывает существенное влияние на


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

EX MEM WB

ADD R1,R2,R3 IF ID

SUB R4,R1,R5 IF ID EX MEM WB


21

IF ID EX MEM WB

AND R6,R1,R7

IF ID EX MEM WB
OR R8,R1,R9
21

XOR R10,R1,R11
IF ID EX MEM WB
Рис. 5.7, а. Последовательность команд в конвейере и ускоренная пересылка
данных
(data forwarding, data bypassing, short circuiting)
EX MEM WB

ADD R1,R2,R3 IF ID

ID EX MEM WB

SUB R4,R1,R5 IF

AND R6,R1,R7 IF ID EX MEM WB


21

IF ID EX MEM WB
OR R8,R1,R9

XOR R10,R1,R11
IF ID EX MEM WB

W
21

Рис. 5.7, б. Совмещение чтения и записи регистров в одном такте


В этом примере все команды, следующие за командой ADD, используют
результат ее выполнения. Команда ADD записывает результат в регистр R1, а
команда SUB читает это значение. Если не предпринять никаких мер для
того, чтобы предотвратить этот конфликт, команда SUB прочитает
неправильное значение и попытается его использовать. На самом деле
значение, используемое командой SUB, является даже неопределенным: хотя
логично предположить, что SUB всегда будет использовать значение R1,
которое было присвоено какой-либо командой, предшествовавшей ADD, это
не всегда так. Если произойдет прерывание между командами ADD и SUB,
то команда ADD завершится, и значение R1 в этой точке будет
соответствовать результату ADD. Такое непрогнозируемое поведение
очевидно неприемлемо.
Проблема, поставленная в этом примере, может быть разрешена с помощью
достаточно простой аппаратной техники, которая называется пересылкой или
продвижением данных (data forwarding), обходом (data bypassing), иногда
закороткой (short-circuiting). Эта аппаратура работает следующим образом.
Результат операции АЛУ с его выходного регистра всегда снова подается
назад на входы АЛУ. Если аппаратура обнаруживает, что предыдущая
операция АЛУ записывает результат в регистр, соответствующий источнику
операнда для следующей операции АЛУ, то логические схемы управления
выбирают в качестве входа для АЛУ результат, поступающий по цепи
"обхода" , а не значение, прочитанное из регистрового файла (рис. 5.8).
21

Рис. 5.8. АЛУ с цепями обхода и ускоренной пересылки


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

Лекция 21
Классификация конфликтов по данным
Вопросы
1. Конфликты по данным, приводящие к приостановке конвейера
2. Методика планирования компилятора для устранения конфликтов по
данным
3. Сокращение потерь на выполнение команд перехода и
минимизация конфликтов по управлению
21

Сокращение потерь на выполнение команд перехода и минимизация


конфликтов по управлению

Конфликт возникает везде, где имеет место зависимость между командами, и


они расположены по отношению друг к другу достаточно близко так, что
совмещение операций, происходящее при конвейеризации, может привести к
изменению порядка обращения к операндам. В нашем примере был
проиллюстрирован конфликт, происходящий с регистровыми операндами, но
для пары команд возможно появление зависимостей при записи или чтении
одной и той же ячейки памяти. Однако, если все обращения к памяти
выполняются в строгом порядке, то появление такого типа конфликтов
предотвращается.
Известны три возможных конфликта по данным в зависимости от порядка
операций чтения и записи. Рассмотрим две команды i и j, при этом i
предшествует j. Возможны следующие конфликты:
 RAW (чтение после записи) - j пытается прочитать операнд-источник
данных прежде, чем i туда запишет. Таким образом, j может
некорректно получить старое значение. Это наиболее общий тип
конфликтов, способ их преодоления с помощью механизма "обходов"
рассмотрен ранее.
 WAR (запись после чтения) - j пытается записать результат в приемник
прежде, чем он считывается оттуда командой i, так что i может
некорректно получить новое значение. Этот тип конфликтов как
правило не возникает в системах с централизованным управлением
потоком команд, обеспечивающих выполнение команд в порядке их
поступления, так как последующая запись всегда выполняется позже,
чем предшествующее считывание. Особенно часто конфликты такого
рода могут возникать в системах, допускающих выполнение команд не
в порядке их расположения в программном коде.
21
 WAW (запись после записи) - j пытается записать операнд прежде, чем
будет записан результат команды i, т.е. записи заканчиваются в
неверном порядке, оставляя в приемнике значение, записанное
командой i, а не j. Этот тип конфликтов присутствует только в
конвейерах, которые выполняют запись со многих ступеней (или
позволяют команде выполняться даже в случае, когда предыдущая
приостановлена).

21.1. Конфликты по данным, приводящие к приостановке конвейера

К сожалению не все потенциальные конфликты по данным могут


обрабатываться с помощью механизма "обходов". Рассмотрим следующую
последовательность команд (рис. 5.9):
MEM WB

Команда IF ID EX

EX MEM WB

LW R1,32(R6) IF ID

ID stall EX MEM WB

ADD R4,R1,R7 IF

SUB R5,R1,R8 IF stall ID EX MEM WB


21

AND R6,R1,R7 stall IF ID EX MEM WB


Рис. 5.9. Последовательность команд с приостановкой конвейера
Этот случай отличается от последовательности подряд идущих команд АЛУ.
Команда загрузки (LW) регистра R1 из памяти имеет задержку, которая не
может быть устранена обычной "пересылкой". Вместо этого нам нужна
дополнительная аппаратура, называемая аппаратурой внутренних
блокировок конвейера (pipeline interlook), чтобы обеспечить корректное
выполнение примера. Вообще такого рода аппаратура обнаруживает
конфликты и приостанавливает конвейер до тех пор, пока существует
конфликт. В этом случае эта аппаратура приостанавливает конвейер начиная
с команды, которая хочет использовать данные в то время, когда предыдущая
команда, результат которой является операндом для нашей, вырабатывает
этот результат. Эта аппаратура вызывает приостановку конвейера или
появление "пузыря" точно также, как и в случае структурных конфликтов.

21.2. Методика планирования компилятора


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

Многие типы приостановок конвейера могут происходить достаточно часто.


Например, для оператора А = B + С компилятор скорее всего сгенерирует
следующую последовательность команд (рис.5.10):
MEM WB

LW R1,В IF ID EX

LW R2,С IF ID EX MEM WB
22

ID stall EX MEM WB
ADD R3,R1,R2 IF

SW A,R3 IF stall ID EX MEM WB


Рис. 5.10. Конвейерное выполнение оператора А = В + С
Очевидно, выполнение команды ADD должно быть приостановлено до тех
пор, пока не станет доступным поступающий из памяти операнд C.
Дополнительной задержки выполнения команды SW не произойдет в случае
применения цепей обхода для пересылки результата операции АЛУ
непосредственно в регистр данных памяти для последующей записи.
Для данного простого примера компилятор никак не может улучшить
ситуацию, однако в ряде более общих случаев он может реорганизовать
последовательность команд так, чтобы избежать приостановок конвейера.
Эта техника, называемая планированием загрузки конвейера (pipeline
scheduling) или планированием потока команд (instruction scheduling),
использовалась начиная с 60-х годов и стала особой областью интереса в 80-
х годах, когда конвейерные машины стали более распространенными.
Пусть, например, имеется последовательность операторов: a = b + c; d = e - f;
Как сгенерировать код, не вызывающий остановок конвейера? Предполагается, что задержка
загрузки из памяти составляет один такт. Ответ очевиден (рис. 5.11):

Неоптимизированная Оптимизированная
последовательность команд последовательность команд
LW Rb,b LW Rb,b
LW Rc,c LW Rc,c
ADD Ra,Rb,Rc LW Re,e
SW a,Ra ADD Ra,Rb,Rc
LW Re,e LW Rf,f
22
LW Rf,f SW a,Ra
SUB Rd,Re,Rf SUB Rd,Re,Rf
SW d,Rd SW d,Rd
Рис. 5.11. Пример устранения конфликтов компилятором
В результате устранены обе блокировки (командой LW Rc,c команды ADD
Ra,Rb,Rc и командой LW Rf,f команды SUB Rd,Re,Rf). Имеется зависимость
между операцией АЛУ и операцией записи в память, но структура конвейера
допускает пересылку результата с помощью цепей "обхода". Заметим, что
использование разных регистров для первого и второго операторов было
достаточно важным для реализации такого правильного планирования. В
частности, если переменная e была бы загружена в тот же самый регистр, что
b или c, такое планирование не было бы корректным. В общем случае
планирование конвейера может требовать увеличенного количества
регистров. Такое увеличение может оказаться особенно существенным для
машин, которые могут выдавать на выполнение несколько команд в одном
такте.
Многие современные компиляторы используют технику планирования
команд для улучшения производительности конвейера. В простейшем
алгоритме компилятор просто планирует распределение команд в одном и
том же базовом блоке. Базовый блок представляет собой линейный участок
последовательности программного кода, в котором отсутствуют команды
перехода, за исключением начала и конца участка (переходы внутрь этого
участка тоже должны отсутствовать). Планирование такой
последовательности команд осуществляется достаточно просто, поскольку
компилятор знает, что каждая команда в блоке будет выполняться, если
выполняется первая из них, и можно просто построить граф зависимостей
этих команд и упорядочить их так, чтобы минимизировать приостановки
конвейера. Для простых конвейеров стратегия планирования на основе
базовых блоков вполне удовлетворительна. Однако когда конвейеризация
22
становится более интенсивной и действительные задержки конвейера растут,
требуются более сложные алгоритмы планирования.
К счастью, существуют аппаратные методы, позволяющие изменить порядок
выполнения команд программы так, чтобы минимизировать приостановки
конвейера. Эти методы получили общее название методов динамической
оптимизации (в англоязычной литературе в последнее время часто
применяются также термины "out-of-order execution" - неупорядоченное
выполнение и "out-of-order issue" - неупорядоченная выдача). Основными
средствами динамической оптимизации являются:
1. Размещение схемы обнаружения конфликтов в возможно более низкой
точке конвейера команд так, чтобы позволить команде продвигаться по
конвейеру до тех пор, пока ей реально не потребуется операнд,
являющийся также результатом логически более ранней, но еще не
завершившейся команды. Альтернативным подходом является
централизованное обнаружение конфликтов на одной из ранних
ступеней конвейера.
2. Буферизация команд, ожидающих разрешения конфликта, и выдача
последующих, логически не связанных команд, в "обход" буфера. В
этом случае команды могут выдаваться на выполнение не в том
порядке, в котором они расположены в программе, однако аппаратура
обнаружения и устранения конфликтов между логически связанными
командами обеспечивает получение результатов в соответствии с
заданной программой.

3. Соответствующая организация коммутирующих магистралей,


обеспечивающая засылку результата операции непосредственно в
буфер, хранящий логически зависимую команду, задержанную из-за
конфликта, или непосредственно на вход функционального устройства
до того, как этот результат будет записан в регистровый файл или в
память (short-circuiting, data forwarding, data bypassing - методы,
которые были рассмотрены ранее).
22
Еще одним аппаратным методом минимизации конфликтов по данным
является метод переименования регистров (register renaming). Он получил
свое название от широко применяющегося в компиляторах метода
переименования - метода размещения данных, способствующего
сокращению числа зависимостей и тем самым увеличению
производительности при отображении необходимых исходной программе
объектов (например, переменных) на аппаратные ресурсы (например, ячейки
памяти и регистры).
При аппаратной реализации метода переименования регистров выделяются
логические регистры, обращение к которым выполняется с помощью
соответствующих полей команды, и физические регистры, которые
размещаются в аппаратном регистровом файле процессора. Номера
логических регистров динамически отображаются на номера физических
регистров посредством таблиц отображения, которые обновляются после
декодирования каждой команды. Каждый новый результат записывается в
новый физический регистр. Однако предыдущее значение каждого
логического регистра сохраняется и может быть восстановлено в случае, если
выполнение команды должно быть прервано из-за возникновения
исключительной ситуации или неправильного предсказания направления
условного перехода.
В процессе выполнения программы генерируется множество временных
регистровых результатов. Эти временные значения записываются в
регистровые файлы вместе с постоянными значениями. Временное значение
становится новым постоянным значением, когда завершается выполнение
команды (фиксируется ее результат). В свою очередь, завершение
выполнения команды происходит, когда все предыдущие команды успешно
завершились в заданном программой порядке.
Программист имеет дело только с логическими регистрами. Реализация
физических регистров от него скрыта. Как уже отмечалось, номера
логических регистров ставятся в соответствие номерам физических
22
регистров. Отображение реализуется с помощью таблиц отображения,
которые обновляются после декодирования каждой команды. Каждый новый
результат записывается в физический регистр. Однако до тех пор, пока не
завершится выполнение соответствующей команды, значение в этом
физическом регистре рассматривается как временное.
Метод переименования регистров упрощает контроль зависимостей по
данным. В машине, которая может выполнять команды не в порядке их
расположения в программе, номера логических регистров могут стать
двусмысленными, поскольку один и тот же регистр может быть назначен
последовательно для хранения различных значений. Но поскольку номера
физических регистров уникально идентифицируют каждый результат, все
неоднозначности устраняются.

21.3. Сокращение потерь на выполнение команд перехода и


минимизация конфликтов по управлению

Конфликты по управлению могут вызывать даже большие потери


производительности конвейера, чем конфликты по данным. Когда
выполняется команда условного перехода, она может либо изменить, либо не
изменить значение счетчика команд. Если команда условного перехода
заменяет счетчик команд значением адреса, вычисленного в команде, то
переход называется выполняемым; в противном случае, он называется
невыполняемым.
Простейший метод работы с условными переходами заключается в
приостановке конвейера как только обнаружена команда условного перехода
до тех пор, пока она не достигнет ступени конвейера, которая вычисляет
новое значение счетчика команд (рис. 5.12). Такие приостановки конвейера
из-за конфликтов по управлению должны реализовываться иначе, чем
приостановки из-за конфликтов по данным, поскольку выборка команды,
следующей за командой условного перехода, должна быть выполнена как
22
можно быстрее, как только мы узнаем окончательное направление команды
условного перехода.
EX MEM WB

Команды перехода IF ID

stall stall IF ID EX MEM WB


Следующая команда IF

Следующая команда +1 stall stall stall IF ID EX MEM WB


Следующая команда +2 stall stall stall IF ID EX MEM

Следующая команда +3
stall stall stall IF ID EX

Следующая команда +4
stall stall stall IF ID

Следующая команда +5

stall stall stall IF


Рис. 5.12. Приостановка конвейера при выполнении команды условного
перехода
Например, если конвейер будет приостановлен на три такта на каждой
команде условного перехода, то это может существенно отразиться на
производительности машины. При частоте команд условного перехода в
программах, равной 30% и идеальном CPI, равным 1, машина с
приостановками условных переходов достигает примерно только половины
ускорения, получаемого за счет конвейерной организации. Таким образом,
22
снижение потерь от условных переходов становится критическим вопросом.
Число тактов, теряемых при приостановках из-за условных переходов, может
быть уменьшено двумя способами:
1. Обнаружением является ли условный переход выполняемым или
невыполняемым на более ранних ступенях конвейера.
2. Более ранним вычислением значения счетчика команд для
выполняемого перехода (т.е. вычислением целевого адреса перехода).

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


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

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


22
Имеется несколько методов сокращения приостановок конвейера,
возникающих из-за задержек выполнения условных переходов. В данном
разделе обсуждаются четыре простые схемы, используемые во время
компиляции. В этих схемах прогнозирование направления перехода
выполняется статически, т.е. прогнозируемое направление перехода
фиксируется для каждой команды условного перехода на все время
выполнения программы. После обсуждения этих схем мы исследуем вопрос о
правильности предсказания направления перехода компиляторами,
поскольку все эти схемы основаны на такой технологии. В следующей главе
мы рассмотрим более мощные схемы, используемые компиляторами (такие,
например, как разворачивание циклов), которые уменьшают частоту команд
условных переходов при реализации циклов, а также динамические,
аппаратно реализованные схемы прогнозирования.
Метод выжидания
Простейшая схема обработки команд условного перехода заключается в
замораживании или подавлении операций в конвейере, путем блокировки
выполнения любой команды, следующей за командой условного перехода, до
тех пор, пока не станет известным направление перехода. Рис. 5.12 отражал
именно такой подход. Привлекательность такого решения заключается в его
простоте.
Метод возврата
Более хорошая и не на много более сложная схема состоит в том, чтобы
прогнозировать условный переход как невыполняемый. При этом аппаратура
должна просто продолжать выполнение программы, как если бы условный
переход вовсе не выполнялся. В этом случае необходимо позаботиться о том,
чтобы не изменить состояние машины до тех пор, пока направление перехода
не станет окончательно известным. В некоторых машинах эта схема с
невыполняемыми по прогнозу условными переходами реализована путем
продолжения выборки команд, как если бы условный переход был обычной
командой. Поведение конвейера выглядит так, как будто ничего необычного
22
не происходит. Однако, если условный переход на самом деле выполняется,
то необходимо просто очистить конвейер от команд, выбранных вслед за
командой условного перехода и заново повторить выборку команд (рис.
5.14).
EX MEM WB

Невыполняемый условный переход IF ID

ID EX MEM WB

Команда i+1 IF

IF ID EX MEM WB

Команда i+2

IF ID EX MEM WB
Команда i+3

Команда i+4
IF ID EX MEM WB
22
EX MEM WB

Выполняемый
IF ID
условный переход

ID EX MEM WB

Команда i+1 IF

stall IF ID EX MEM WB
Команда i+2

Команда i+3 stall IF ID EX MEM WB

Команда i+4
stall IF ID EX MEM
Рис. 5.14. Диаграмма работы модернизированного конвейера
Альтернативная схема прогнозирует переход как выполняемый. Как только
команда условного перехода декодирована и вычислен целевой адрес
перехода, мы предполагаем, что переход выполняемый, и осуществляем
выборку команд и их выполнение, начиная с целевого адреса. Если мы не
знаем целевой адрес перехода раньше, чем узнаем окончательное
направление перехода, у этого подхода нет никаких преимуществ. Если бы
условие перехода зависело от непосредственно предшествующей команды,
то произошла бы приостановка конвейера из-за конфликта по данным для
регистра, который является условием перехода, и мы бы узнали сначала
целевой адрес. В таких случаях прогнозировать переход как выполняемый
было бы выгодно. Дополнительно в некоторых машинах (особенно в
машинах с устанавливаемыми по умолчанию кодами условий или более
мощным (а потому и более медленным) набором условий перехода) целевой
23
адрес перехода известен раньше окончательного направления перехода, и
схема прогноза перехода как выполняемого имеет смысл.
Задержанные переходы
Четвертая схема, которая используется в некоторых машинах называется
"задержанным переходом". В задержанном переходе такт выполнения с
задержкой перехода длиною n есть:

Команды 1 - n находятся в слотах (временных интервалах) задержанного


перехода. Задача программного обеспечения заключается в том, чтобы
сделать команды, следующие за командой перехода, действительными и
полезными. Аппаратура гарантирует реальное выполнение этих команд
перед выполнением собственно перехода. Здесь используются несколько
приемов оптимизации.
На рис. 5.15, а показаны три случая, при которых может планироваться
задержанный переход. В верхней части рисунка для каждого случая показана
исходная последовательность команд, а в нижней части - последовательность
команд, полученная в результате планирования. В случае (а) слот задержки
заполняется независимой командой, находящейся перед командой условного
перехода. Это наилучший выбор. Стратегии (b) и (c) используются, если
применение стратегии (a) невозможно.
В последовательностях команд для случаев (b) и (c) использование
содержимого регистра R1 в качестве условия перехода препятствует
перемещению команды ADD (которая записывает результат в регистр R1) за
команду перехода. В случае (b) слот задержки заполняется командой,
находящейся по целевому адресу команды перехода. Обычно такую команду
приходится копировать, поскольку к ней возможны обращения и из других
частей программы. Стратегии (b) отдается предпочтение, когда с высокой
23
вероятностью переход является выполняемым, например, если это переход
на начало цикла.
Наконец, слот задержки может заполняться командой, находящейся между
командой невыполняемого перехода и командой, находящейся по целевому
адресу, как в случае (c). Чтобы подобная оптимизация была законной,
необходимо, чтобы можно было все-таки выполнить команду SUB, если
переход пойдет не по прогнозируемому направлению. При этом мы
предполагаем, что команда SUB выполнит ненужную работу, но вся
программа при этом будет выполняться корректно. Это, например, может
быть в случае, если регистр R4 используется только для временного хранения
промежуточных результатов вычислений, когда переход выполняется не по
прогнозируемому направлению.

Рис. 5.15, а. Требования к переставляемым командам при планировании


задержанного перехода
Рис. 5.15, б показывает различные ограничения для всех этих схем
планирования условных переходов, а также ситуации, в которых они дают
выигрыш. Компилятор должен соблюдать требования при подборе
23
подходящей команды для заполнения слота задержки. Если такой команды
не находится, слот задержки должен заполняться пустой операцией.
Рассматриваемый Когда увеличивается
Требования
случай производительность
Команда условного
перехода не должна
(a) Всегда
зависеть от переставляемой
команды
Выполнение
переставляемой команды
Когда переход выполняется.
должно быть корректным,
Может увеличивать размер
(b) даже если переход не
программы в случае
выполняется
копирования команды
Может потребоваться
копирование команды
Выполнение
переставляемой команды
(c) должно быть корректным, Когда переход не выполняется
даже если переход
выполняется
Рис. 5.15, б
Планирование задержанных переходов осложняется (1) наличием
ограничений на команды, размещение которых планируется в слотах
задержки и (2) необходимостью предсказывать во время компиляции, будет
ли условный переход выполняемым или нет. Рис. 5.16 дает общее
представление об эффективности планирования переходов для простейшего
конвейера с одним слотом задержки перехода при использовании простого
алгоритма планирования. Он показывает, что больше половины слотов
задержки переходов оказываются заполненными. При этом почти 80%
заполненных слотов оказываются полезными для выполнения программы.
23
Это может показаться удивительным, поскольку условные переходы
являются выполняемыми примерно в 53% случаев. Высокий процент
использования заполненных слотов объясняется тем, что примерно половина
из них заполняется командами, предшествовавшими команде условного
перехода (стратегия (a)), выполнение которых необходимо независимо от
того, выполняется ли переход, или нет.

Рис. 5.16. Частота заполнения одного слота задержки условного перехода


Имеются небольшие дополнительные затраты аппаратуры на реализацию
задержанных переходов. Из-за задержанного эффекта условных переходов,
для корректного восстановления состояния в случае появления прерывания
нужны несколько счетчиков команд (один плюс длина задержки).
Статическое прогнозирование условных переходов: использование
технологии компиляторов
Имеются два основных метода, которые можно использовать для
статического предсказания переходов: метод исследования структуры
программы и метод использования информации о профиле выполнения
программы, который собран в результате предварительных запусков
23
программы. Использование структуры программы достаточно просто: в
качестве исходной точки можно предположить, например, что все идущие
назад по программе переходы являются выполняемыми, а идущие вперед по
программе - невыполняемыми. Однако эта схема не очень эффективна для
большинства программ. Основываясь только на структуре программы просто
трудно сделать лучший прогноз.
Альтернативная техника для предсказания переходов основана на
информации о профиле выполнения программы, собранной во время
предыдущих прогонов. Ключевым моментом, который делает этот подход
заслуживающим внимания, является то, что поведение переходов при
выполнении программы часто повторяется, т.е. каждый отдельный переход в
программе часто оказывается смещенным в одну из сторон: он либо
выполняемый, либо невыполняемый. Проведенные многими авторами
исследования показывают достаточно успешное предсказания переходов с
использованием этой стратегии.
В следующей главе мы рассмотрим использование схем динамического
прогнозирования, основанного на поведении программы во время ее работы.
Мы также рассмотрим несколько методов планирования кода во время
компиляции. Эта методика требует статического предсказания переходов,
таким образом идеи этого раздела являются важными.
Проблемы реализации точного прерывания в конвейере
Обработка прерываний в конвейерной машине оказывается более сложной
из-за того, что совмещенное выполнение команд затрудняет определение
возможности безопасного изменения состояния машины произвольной
командой. В конвейерной машине команда выполняется по этапам, и ее
завершение осуществляется через несколько тактов после выдачи для
выполнения. Еще в процессе выполнения отдельных этапов команда может
изменить состояние машины. Тем временем возникшее прерывание может
вынудить машину прервать выполнение еще не завершенных команд.
23
Как и в неконвейерных машинах двумя основными проблемами при
реализации прерываний являются: (1) прерывания возникают в процессе
выполнения некоторой команды; (2) необходим механизм возврата из
прерывания для продолжения выполнения программы. Например, для
нашего простейшего конвейера прерывание по отсутствию страницы
виртуальной памяти при выборке данных не может произойти до этапа
выборки из памяти (MEM). В момент возникновения этого прерывания в
процессе обработки уже будут находиться несколько команд. Поскольку
подобное прерывание должно обеспечить возврат для продолжения
программы и требует переключения на другой процесс (операционную
систему), необходимо надежно очистить конвейер и сохранить состояние
машины таким, чтобы повторное выполнение команды после возврата из
прерывания осуществлялось при корректном состоянии машины. Обычно это
реализуется путем сохранения адреса команды (PC), вызвавшей прерывание.
Если выбранная после возврата из прерывания команда не является командой
перехода, то сохраняется обычная последовательность выборки и обработки
команд в конвейере. Если же это команда перехода, то мы должны оценить
условие перехода и в зависимости от выбранного направления начать
выборку либо по целевому адресу команды перехода, либо следующей за
переходом команды. Когда происходит прерывание, для корректного
сохранения состояния машины необходимо выполнить следующие шаги:
1. В последовательность команд, поступающих на обработку в конвейер,
принудительно вставить команду перехода на прерывание.
2. Пока выполняется команда перехода на прерывание, погасить все
требования записи, выставленные командой, вызвавшей прерывание, а
также всеми следующими за ней в конвейере командами. Эти действия
позволяют предотвратить все изменения состояния машины
командами, которые не завершились к моменту начала обработки
прерывания.
23
3. После передачи управления подпрограмме обработки прерываний
операционной системы, она немедленно должна сохранить значение
адреса команды (PC), вызвавшей прерывание. Это значение будет
использоваться позже для организации возврата из прерывания.

Если используются механизмы задержанных переходов, состояние машины


уже невозможно восстановить с помощью одного счетчика команд,
поскольку в процессе восстановления команды в конвейере могут оказаться
вовсе не последовательными. В частности, если команда, вызвавшая
прерывание, находилась в слоте задержки перехода и переход был
выполненным, то необходимо заново повторить выполнение команд из слота
задержки плюс команду, находящуюся по целевому адресу команды
перехода. Сама команда перехода уже выполнилась и ее повторения не
требуется. При этом адреса команд из слота задержки перехода и целевой
адрес команды перехода естественно не являются последовательными.
Поэтому необходимо сохранять и восстанавливать несколько счетчиков
команд, число которых на единицу превышает длину слота задержки. Это
выполняется на третьем шаге обработки прерывания.
После обработки прерывания специальные команды осуществляют возврат
из прерывания путем перезагрузки счетчиков команд и инициализации
потока команд. Если конвейер может быть остановлен так, что команды,
непосредственно предшествовавшие вызвавшей прерывание команде,
завершаются, а следовавшие за ней могут быть заново запущены для
выполнения, то говорят, что конвейер обеспечивает точное прерывание. В
идеале команда, вызывающая прерывание, не должна менять состояние
машины, и для корректной обработки некоторых типов прерываний
требуется, чтобы команда, вызывающая прерывание, не имела никаких
побочных эффектов. Для других типов прерываний, например, для
прерываний по исключительным ситуациям плавающей точки, вызывающая
прерывание команда на некоторых машинах записывает свои результаты еще
23
до того момента, когда прерывание может быть обработано. В этих случаях
аппаратура должна быть готовой для восстановления операндов-источников,
даже если местоположение результата команды совпадает с
местоположением одного из операндов-источников.
Поддержка точных прерываний во многих системах является обязательным
требованием, а в некоторых системах была бы весьма желательной,
поскольку она упрощает интерфейс операционной системы. Как минимум в
машинах со страничной организацией памяти или с реализацией
арифметической обработки в соответствии со стандартом IEEE средства
обработки прерываний должны обеспечивать точное прерывание либо
целиком с помощью аппаратуры, либо с помощью некоторой поддержки со
стороны программных средств.
Необходимость реализации в машине точных прерываний иногда оспаривается из-за некоторых
проблем, которые осложняют повторный запуск команд. Повторный запуск сложен из-за того, что
команды могут изменить состояние машины еще до того, как они гарантировано завершают свое
выполнение (иногда гарантированное завершение команды называется фиксацией команды или
фиксацией результатов выполнения команды). Поскольку команды в конвейере могут быть
взаимозависимыми, блокировка изменения состояния машины может оказаться непрактичной,
если конвейер продолжает работать. Таким образом, по мере увеличения степени
конвейеризации машины возникает необходимость отката любого изменения состояния,
выполненного до фиксации команды. К счастью, в простых конвейерах, подобных
рассмотренному, эти проблемы не возникают. На рис. 5.17 показаны ступени рассмотренного
конвейера и причины прерываний, которые могут возникнуть на соответствующих ступенях при
выполнении команд.

Ступень
Причина прерывания
конвейера
Ошибка при обращении к странице памяти при выборке
IF команды; невыровненное обращение к памяти; нарушение
защиты памяти
ID Неопределенный или запрещенный код операции
EX Арифметическое прерывание
MEM Ошибка при обращении к странице памяти при выборке
23
данных; невыровненное обращение к памяти; нарушение
защиты памяти
WB Отсутствует
Рис. 5.17. Причины прерываний в простейшем конвейере

Обработка многотактных операций и механизмы обходов в длинных


конвейерах

В рассмотренном нами конвейере стадия выполнения команды (EX)


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

3. Устройство сложения с плавающей точкой.


23
4. Устройство деления целочисленных операндов и операндов с
плавающей точкой.

Рис. 5.18. Конвейер с дополнительными функциональными устройствами


Целочисленное устройство обрабатывает все команды загрузки и записи в
память при работе с двумя наборами регистров (целочисленных и с
плавающей точкой), все целочисленные операции (за исключением команд
умножения и деления) и все команды переходов. Если предположить, что
стадии выполнения других функциональных устройств неконвейерные, то
рис. 5.18 показывает структуру такого конвейера. Поскольку стадия EX
является неконвейерной, никакая команда, использующая функциональное
устройство, не может быть выдана для выполнения до тех пор, пока
предыдущая команда не покинет ступень EX. Более того, если команда не
может поступить на ступень EX, весь конвейер за этой командой будет
приостановлен.
В действительности промежуточные результаты возможно не используются
циклически ступенью EX, как это показано на рис. 5.18, и ступень EX имеет
задержки длительностью более одного такта. Мы можем обобщить структуру
конвейера плавающей точки, допустив конвейеризацию некоторых ступеней
и параллельное выполнение нескольких операций. Чтобы описать работу
24
такого конвейера, мы должны определить задержки функциональных
устройств, а также скорость инициаций или скорость повторения операций.
Это скорость, с которой новые операции данного типа могут поступать в
функциональное устройство. Например, предположим, что имеют место
следующие задержки функциональных устройств и скорости повторения
операций:
Функциональное устройство Задержка Скорость повторения
Целочисленное АЛУ 11
Сложение с ПТ 42
Умножение с ПТ (и целочисленное) 6 3
Деление с ПТ (и целочисленное) 15 15
На рис. 5.19 представлена структура подобного конвейера. Ее реализация
требует введения конвейерной регистровой станции EX1/EX2 и
модификации связей между регистрами ID/EX и EX/MEM.

Рис. 5.19. Конвейер с многоступенчатыми функциональными устройствами

Конфликты и ускоренные пересылки в длинных конвейерах


24
Имеется несколько различных аспектов обнаружения конфликтов и
организации ускоренной пересылки данных в конвейерах, подобных
представленному на рис. 5.19:
1. Поскольку устройства не являются полностью конвейерными, в данной
схеме возможны структурные конфликты. Эти ситуации необходимо
обнаруживать и приостанавливать выдачу команд.
2. Поскольку устройства имеют разные времена выполнения, количество
записей в регистровый файл в каждом такте может быть больше 1.

3. Возможны конфликты типа WAW, поскольку команды больше не


поступают на ступень WB в порядке их выдачи для выполнения.
Заметим, что конфликты типа WAR невозможны, поскольку чтение
регистров всегда осуществляется на ступени ID.

4. Команды могут завершаться не в том порядке, в котором они были


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

Прежде чем представить общее решение для реализации схем обнаружения


конфликтов, рассмотрим вторую и третью проблемы.
Если предположить, что файл регистров с ПТ имеет только один порт записи, то
последовательность операций с ПТ, а также операция загрузки ПТ совместно с операциями ПТ
может вызвать конфликты по порту записи в регистровый файл. Рассмотрим последовательность
команд, представленную на рис. 5.20. В такте 10 все три команды достигнут ступени WB и должны
произвести запись в регистровый файл. При наличии только одного порта записи в регистровый
файл машина должна обеспечить последовательное завершение команд. Этот единственный
регистровый порт является источником структурных конфликтов. Чтобы решить эту проблему,
можно увеличить количество портов в регистровом файле, но такое решение может оказаться
неприемлемым, поскольку эти дополнительные порты записи скорее всего будут редко
использоваться. Однако в установившемся состоянии максимальное количество необходимых
портов записи равно 1. Поэтому в реальных машинах разработчики предпочитают отслеживать
обращения к порту записи в регистры и рассматривать одновременное к нему обращение как
структурный конфликт.
24
Команда Номер такта
1 2 3 4 5 6 7 8 9 10
MULTD F0,F4,F6 IF ID EX11 EX12 EX13 EX21 EX22 EX23 MEM WB
EX MEM WB

... IF ID

ADDD F2,F4,F6 IF ID EX11 EX12 EX21 EX22 MEM WB


IF ID EX MEM WB

...

IF ID EX MEM WB
...

LD F8,0(R2)
IF ID EX MEM WB
Рис. 5.20. Пример конфликта по записи в регистровый файл
Имеется два способа для обхода этого конфликта. Первый заключается в
отслеживании использования порта записи на ступени ID конвейера и
приостановке выдачи команды как при структурном конфликте. Схема
обнаружения такого конфликта обычно реализуется с помощью сдвигового
регистра. Альтернативная схема предполагает приостановку конфликтующей
команды, когда она пытается попасть на ступень MEM конвейера.
Преимуществом такой схемы является то, что она не требует обнаружения
конфликта до входа на ступень MEM, где это легче сделать. Однако
подобная реализация усложняет управление конвейером, поскольку
приостановки в этом случае могут возникать в двух разных местах
конвейера.
24
Другой проблемой является возможность конфликтов типа WAW. Можно
рассмотреть тот же пример, что и на рис. 5.20. Если бы команда LD была
выдана на один такт раньше и имела в качестве месторасположения
результата регистр F2, то возник бы конфликт типа WAW, поскольку эта
команда выполняла бы запись в регистр F2 на один такт раньше команды
ADDD. Имеются два способа обработки этого конфликта типа WAW.
Первый подход заключается в задержке выдачи команды загрузки до
момента передачи команды ADDD на ступень MEM. Второй подход
заключается в подавлении результата операции сложения при обнаружении
конфликта и изменении управления таким образом, чтобы команда сложения
не записывала свой результат. Тогда команда LD может выдаваться для
выполнения сразу же. Поскольку такой конфликт является редким, обе схемы
будут работать достаточно хорошо. В любом случае конфликт может быть
обнаружен на ранней стадии ID, когда команда LD выдается для выполнения.
Тогда приостановка команды LD или установка блокировки записи
результата командой ADDD реализуются достаточно просто.
Таким образом, для обнаружения возможных конфликтов необходимо
рассматривать конфликты между командами ПТ, а также конфликты между
командами ПТ и целочисленными командами. За исключением команд
загрузки/записи с ПТ и команд пересылки данных между регистрами ПТ и
целочисленными регистрами, команды ПТ и целочисленные команды
достаточно хорошо разделены, и все целочисленные команды работают с
целочисленными регистрами, а команды ПТ - с регистрами ПТ. Таким
образом, для обнаружения конфликтов между целочисленными командами и
командами ПТ необходимо рассматривать только команды загрузки/записи с
ПТ и команды пересылки регистров ПТ. Это упрощение управления
конвейером является дополнительным преимуществом поддержания
отдельных регистровых файлов для хранения целочисленных данных и
данных с ПТ. (Главное преимущество заключается в удвоении общего
количества регистров и увеличении пропускной способности без увеличения
24
числа портов в каждом наборе). Если предположить, что конвейер выполняет
обнаружение всех конфликтов на стадии ID, перед выдачей команды для
выполнения в функциональные устройства должны быть выполнены три
проверки:
1. Проверка наличия структурных конфликтов. Ожидание освобождения
функционального устройства и порта записи в регистры, если он
потребуется.
2. Проверка наличия конфликтов по данным типа RAW. Ожидание до тех
пор, пока регистры-источники операндов указаны в качестве регистров
результата на конвейерных станциях ID/EX (которая соответствует
команде, выданной в предыдущем такте), EX1/EX2 или EX/MEM.

3. Проверка наличия конфликтов типа WAW. Проверка того, что


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

Хотя логика обнаружения конфликтов для многотактных операций ПТ


несколько более сложная, концептуально она не отличается от такой же
логики для целочисленного конвейера. То же самое касается логики для
ускоренной пересылки данных. Логика ускоренной пересылки данных может
быть реализована с помощью проверки того, что указанный на конвейерных
станциях EX/MEM и MEM/WB регистр результата является регистром
операнда команды ПТ. Если происходит такое совпадение, для пересылки
данных разрешается прием по соответствующему входу мультиплексора.
Многотактные операции ПТ создают также новые проблемы для механизма
прерывания.
24
Поддержка точных прерываний

Другая проблема, связанная с реализацией команд с большим временем


выполнения, может быть проиллюстрирована с помощью следующей
последовательности команд:
DIVF F0,F2,F4
ADDF F10,F10,F8
SUBF F12,F12,F14
Эта последовательность команд выглядит очень просто. В ней отсутствуют
какие-либо зависимости. Однако она приводит к появлению новых проблем
из-за того, что выданная раньше команда может завершиться после команды,
выданной для выполнения позже. В данном примере можно ожидать, что
команды ADDF и SUBF завершаться раньше, чем завершится команда DIVF.
Этот эффект является типичным для конвейеров команд с большим временем
выполнения и называется внеочередным завершением команд (out-of-order
completion). Тогда, например, если команда DIVF вызовет арифметическое
прерывание после завершения команды ADDF, мы не сможем реализовать
точное прерывание на уровне аппаратуры. В действительности, поскольку
команда ADDF меняет значение одного из своих операндов, невозможно
даже с помощью программных средств восстановить состояние, которое
было перед выполнением команды DIVF.
Имеются четыре возможных подхода для работы в условиях внеочередного
завершения команд. Первый из них просто игнорирует проблему и
предлагает механизмы неточного прерывания. Этот подход использовался в
60-х и 70-х годах и все еще применяется в некоторых суперкомпьютерах, в
которых некоторые классы прерываний запрещены или обрабатываются
аппаратурой без остановки конвейера. Такой подход трудно использовать в
современных машинах при наличии концепции виртуальной памяти и
стандарта на операции с плавающей точкой IEEE, которые требуют
реализации точного прерывания путем комбинации аппаратных и
24
программных средств. В некоторых машинах эта проблема решается путем
введения двух режимов выполнения команд: быстрого, но с возможно не
точными прерываниями, и медленного, гарантирующего реализацию точных
прерываний.
Второй подход заключается в буферизации результатов операции до момента
завершения выполнения всех команд, предшествовавших данной. В
некоторых машинах используется этот подход, но он становится все более
дорогостоящим, если отличия во времени выполнения разных команд
велики, поскольку становится большим количество результатов, которые
необходимо буферизовать. Более того, результаты из этой буферизованной
очереди необходимо пересылать для обеспечения продолжения выдачи
новых команд. Это требует большого количества схем сравнения и
многовходовых мультиплексоров. Имеются две вариации этого основного
подхода. Первая называется буфером истории (history file),
использовавшемся в машине CYBER 180/990. Буфер истории отслеживает
первоначальные значения регистров. Если возникает прерывание и состояние
машины необходимо откатить назад до точки, предшествовавшей некоторым
завершившимся вне очереди командам, то первоначальное значение
регистров может быть восстановлено из этого буфера истории. Подобная
методика использовалась также при реализации автоинкрементной и
автодекрементной адресации в машинах типа VAX. Другой подход
называется буфером будущего (future file). Этот буфер хранит новые
значения регистров. Когда все предшествующие команды завершены,
основной регистровый файл обновляется значениями из этого буфера. При
прерывании основной регистровый файл хранит точные значения регистров,
что упрощает организацию прерывания. В следующей главе будут
рассмотрены некоторые расширения этой идеи.
Третий используемый метод заключается в том, чтобы разрешить в ряде
случаев неточные прерывания, но при этом сохранить достаточно
информации, чтобы подпрограмма обработки прерывания могла выполнить
24
точную последовательность прерывания. Это предполагает наличие
информации о находившихся в конвейере командах и их адресов. Тогда
после обработки прерывания, программное обеспечение завершает
выполнение всех команд, предшествовавших последней завершившейся
команде, а затем последовательность может быть запущена заново.
Рассмотрим следующий наихудший случай:
Команда 1 - длинная команда, которая в конце концов вызывает прерывание
Команда 2, ... , Команда n-1 - последовательность команд, выполнение
которых не завершилось
Команда n - команда, выполнение которой завершилось
Имея значения адресов всех команд в конвейере и адрес возврата из
прерывания, программное обеспечение может определить состояние
команды 1 и команды n. Поскольку команда n завершила выполнение,
хотелось бы продолжить выполнение с команды n+1. После обработки
прерывания программное обеспечение должно смоделировать выполнение
команд с 1 по n-1. Тогда можно осуществить возврат из прерывания на
команду n+1. Наибольшая неприятность такого подхода связана с
усложнением подпрограммы обработки прерывания. Но для простых
конвейеров, подобных рассмотренному нами, имеются и упрощения. Если
команды с 2 по n все являются целочисленными, то мы просто знаем, что в
случае завершения выполнения команды n, все команды с 2 по n-1 также
завершили выполнение. Таким образом, необходимо обрабатывать только
операцию с плавающей точкой. Чтобы сделать эту схему работающей,
количество операций ПТ, выполняющихся с совмещением, может быть
ограничено. Например, если допускается совмещение только двух операций,
то только прерванная команда должна завершаться программными
средствами. Это ограничение может снизить потенциальную пропускную
способность, если конвейеры плавающей точки являются достаточно
длинными или если имеется значительное количество функциональных
устройств. Такой подход использовался в архитектуре SPARC, позволяющей
24
совмещать выполнение целочисленных операций с операциями плавающей
точки.
Четвертый метод представляет собой гибридную схему, которая позволяет
продолжать выдачу команд только если известно, что все команды,
предшествовавшие выдаваемой, будут завершены без прерывания. Это
гарантирует, что в случае возникновения прерывания ни одна следующая за
ней команда не будет завершена, а все предшествующие будут завершены.
Иногда это означает необходимость приостановки машины для поддержки
точных прерываний. Чтобы эта схема работала, необходимо, чтобы
функциональные устройства плавающей точки определяли возможность
появления прерывания на самой ранней стадии выполнения команд так,
чтобы предотвратить завершение выполнения следующих команд. Такая
схема используется, например, в микропроцессорах R2000/R3000 и R4000
компании MIPS.

Параллелизм на уровне выполнения команд, планирование загрузки


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

В предыдущей главе мы рассмотрели средства конвейеризации, которые


обеспечивают совмещенный режим выполнения команд, когда они являются
независимыми друг от друга. Это потенциальное совмещение выполнения
команд называется параллелизмом на уровне команд. В данной главе мы
рассмотрим ряд методов развития идей конвейеризации, основанных на
увеличении степени параллелизма, используемой при выполнении команд.
Мы начнем с рассмотрения методов, позволяющих снизить влияние
конфликтов по данным и по управлению, а затем вернемся к теме
расширения возможностей процессора по использованию параллелизма,
заложенного в программах. Затем мы обсудим современные технологии
компиляторов, используемые для увеличения степени параллелизма уровня
команд.
24
Для начала запишем выражение, определяющее среднее количество тактов
для выполнения команды в конвейере:
CPI конвейера = CPI идеального конвейера +
+ Приостановки из-за структурных конфликтов +
+ Приостановки из-за конфликтов типа RAW +
+ Приостановки из-за конфликтов типа WAR +
+ Приостановки из-за конфликтов типа WAW +
+ Приостановки из-за конфликтов по управлению
CPI идеального конвейера есть не что иное, как максимальная пропускная
способность, достижимая при реализации. Уменьшая каждое из слагаемых в
правой части выражения, мы минимизируем общий CPI конвейера и таким
образом увеличиваем пропускную способность команд. Это выражение
позволяет также охарактеризовать различные методы, которые будут
рассмотрены в этой главе, по тому компоненту общего CPI, который
соответствующий метод уменьшает. На рис. 6.1 показаны некоторые методы,
которые будут рассмотрены, и их воздействие на величину CPI.
Прежде, чем начать рассмотрение этих методов, необходимо определить
концепции, на которых эти методы построены.

Параллелизм уровня команд: зависимости и конфликты по данным

Все рассматриваемые в этой главе методы используют параллелизм,


заложенный в последовательности команд. Как мы установили выше этот
тип параллелизма называется параллелизмом уровня команд или ILP.
Степень параллелизма, доступная внутри базового блока (линейной
последовательности команд, переходы из вне которой разрешены только на
ее вход, а переходы внутри которой разрешены только на ее выход)
достаточно мала. Например, средняя частота переходов в целочисленных
программах составляет около 16%. Это означает, что в среднем между двумя
переходами выполняются примерно пять команд. Поскольку эти пять команд
25
возможно взаимозависимые, то степень перекрытия, которую мы можем
использовать внутри базового блока, возможно будет меньше чем пять.
Чтобы получить существенное улучшение производительности, мы должны
использовать параллелизм уровня команд одновременно для нескольких
базовых блоков.
Метод Снижает
Разворачивание циклов Приостановки по управлению
Базовое планирование конвейера Приостановки RAW
Динамической планирование с
Приостановки RAW
централизованной схемой управления
Динамическое планирование с
Приостановки WAR и WAW
переименованием регистров
Динамическое прогнозирование переходов Приостановки по управлению
Выдача нескольких команд в одном такте Идеальный CPI
Идеальный CPI и
Анализ зависимостей компилятором
приостановки по данным
Программная конвейеризация и планирование Идеальный CPI и
трасс приостановки по данным
Все приостановки по данным и
Выполнение по предположению
управлению
Динамическое устранение неоднозначности Приостановки RAW,
памяти связанные с памятью
Рис. 6.1.
Самый простой и общий способ увеличения степени параллелизма,
доступного на уровне команд, является использование параллелизма между
итерациями цикла. Этот тип параллелизма часто называется параллелизмом
уровня итеративного цикла. Ниже приведен простой пример цикла,
выполняющего сложение двух 1000-элементных векторов, который является
полностью параллельным:
for (i = 1; i <= 1000; i = i + 1)
x[i] = x[i] + y[i];
25
Каждая итерация цикла может перекрываться с любой другой итерацией,
хотя внутри каждой итерации цикла практическая возможность перекрытия
небольшая.
Имеется несколько методов для превращения такого параллелизма уровня
цикла в параллелизм уровня команд. Эти методы основаны главным образом
на разворачивании цикла либо статически, используя компилятор, либо
динамически с помощью аппаратуры. Ниже в этом разделе мы рассмотрим
подробный пример разворачивания цикла.
Важным альтернативным методом использования параллелизма уровня
команд является использование векторных команд. По существу векторная
команда оперирует с последовательностью элементов данных. Например,
приведенная выше последовательность на типичной векторной машине
может быть выполнена с помощью четырех команд: двух команд загрузки
векторов x и y из памяти, одной команды сложения двух векторов и одной
команды записи вектора-результата. Конечно, эти команды могут быть
конвейеризованными и иметь относительно большие задержки выполнения,
но эти задержки могут перекрываться. Векторные команды и векторные
машины заслуживают отдельного рассмотрения, которое выходит за рамки
данного курса. Хотя разработка идей векторной обработки предшествовала
появлению большинства методов использования параллелизма, которые
рассматриваются в этой главе, машины, использующие параллелизм уровня
команд постепенно заменяют машины, базирующиеся на векторной
обработке. Причины этого сдвига технологии обсуждаются более детально
позже в данном курсе.

Зависимости

Чтобы точно определить, что мы понимаем под параллелизмом уровня цикла


и параллелизмом уровня команд, а также для количественного определения
степени доступного параллелизма, мы должны определить, что такое
25
параллельные команды и параллельные циклы. Начнем с объяснения того,
что такое пара параллельных команд. Две команды являются параллельными,
если они могут выполняться в конвейере одновременно без приостановок,
предполагая, что конвейер имеет достаточно ресурсов (структурные
конфликты отсутствуют).
Поэтому, если между двумя командами существует взаимозависимость, то
они не являются параллельными. Имеется три типа зависимостей:
зависимости по данным, зависимости по именам и зависимости по
управлению. Команда j зависит по данным от команды i, если имеет место
любое из следующих условий:
 команда i вырабатывает результат, который использует команда j
 команда j является зависимой по данным от команды k, а команда k
является зависимой по данным от команды i

Второе условие просто означает, что одна команда зависит от другой, если
между этими двумя командами имеется цепочка зависимостей первого типа.
Эта цепочка зависимостей может быть длиною во всю программу.
Если две команды являются зависимыми по данным, они не могут
выполняться одновременно или полностью совмещено. Зависимость по
данным предполагает, что между двумя командами имеется цепочка из
одного или нескольких конфликтов типа RAW. Одновременное выполнение
таких команд требует создания машины с внутренними схемами блокировок
конвейера, обеспечивающих обнаружение конфликтов и уменьшение
времени приостановок или полное устранение перекрытия. В машине без
внутренних блокировок, которые базируются на программном планировании
работы конвейера компилятором, компилятор не может спланировать
зависимые команды так, чтобы они полностью совмещались, поскольку в
противном случае программа не будет выполняться правильно. Наличие
зависимостей по данным в последовательности команд отражает зависимость
по данным в исходном тексте программы, на основании которого она
25
генерировалась. Эффект первоначальной зависимости по данным должен
сохраняться.
Зависимости являются свойством программ. Приведет ли данная зависимость
к обнаруживаемому конфликту и вызовет ли данный конфликт реальную
приостановку конвейера, зависит от организации конвейера. Действительно,
многие методы, рассматриваемые в этой главе, позволяют обойти конфликты
или обойти необходимость приостановки конвейера в случае возникновения
конфликта, при сохранении зависимости. Важность зависимостей по данным
заключается в том, что именно они устанавливают верхнюю границу степени
параллелизма, который вероятно может быть использован. Наличие
зависимостей по данным означает также, что результаты должны
вычисляться в определенном порядке, поскольку более поздняя команда
зависит от результата предыдущей.
Данные могут передаваться от команды к команде либо через регистры, либо
через ячейки памяти. Когда данные передаются через регистры, обнаружение
зависимостей значительно упрощается, поскольку имена регистров
зафиксированы в командах (хотя этот процесс становится более сложным,
если вмешиваются условные переходы). Зависимости по данным, которые
передаются через ячейки памяти, обнаружить значительно сложнее,
поскольку два адреса могут относиться к одной и той же ячейке памяти, но
внешне выглядят по разному (например, 100(R4) и 20(R6) могут определять
один и тот же адрес). Кроме того, эффективный адрес команды загрузки или
записи может меняться от одного выполнения команды к другому (так что
20(R4) и 20(R4) будут определять разные адреса), еще больше усложняя
обнаружение зависимости. В этой главе мы рассмотрим как аппаратные, так
и программные методы обнаружения зависимостей по данным, которые
связаны с ячейками памяти. Методы компиляции для обнаружения таких
зависимостей являются очень важными при выявлении параллелизма уровня
цикла.
25
Вторым типом зависимостей в программах являются зависимости по
именам. Зависимости по именам возникают когда две команды используют
одно и то же имя (либо регистра, либо ячейки памяти), но при отсутствии
передачи данных между командами. Имеется два типа зависимости имен
между командой i, которая предшествует команде j в программе:
1. Антизависимость между командой i и командой j возникает тогда,
когда команда j записывает в регистр или ячейку памяти, который(ую)
команда i считывает и команда i выполняется первой. Антизависимость
соответствует конфликту типа WAR, и обнаружение конфликтов типа
WAR означает упорядочивание выполнения пары команд с
антизависимостью.
2. Зависимость по выходу возникает когда команда i и команда j
записывают результат в один и тот же регистр или в одну и ту же
ячейку памяти. Порядок выполнения этих команд должен сохраняться.
Зависимости по выходу сохраняются путем обнаружения конфликтов
типа WAW.

Как антизависимости, так и зависимости по выходу являются зависимостями


по именам, в отличие от истинных зависимостей по данным, поскольку в них
отсутствует передача данных от одной команды к другой. Это означает, что
команды, связанные зависимостью по именам, могут выполняться
одновременно или могут быть переупорядочены, если имя (номер регистра
или адрес ячейки памяти), используемое в командах изменяется так, что
команды не конфликтуют. Это переименование может быть выполнено более
просто для регистровых операндов и называется переименованием регистров
(register renaming). Переименование регистров может выполняться либо
статически компилятором, или динамически аппаратными средствами.
В качестве примера рассмотрим следующую последовательность команд:
ADD R1,R2,R3
SUB R2,R3,R4
25
AND R5,R1,R2
OR R1,R3,R4
В этой последовательности имеется антизависимость по регистру R2 между
командами ADD и SUB, которая может привести к конфликту типа WAR. Ее
можно устранить путем переименования регистра результата команды SUB,
например, на R6 и изменения всех последующих команд, которые
используют результат команды вычитания, для использования этого регистра
R6 (в данном случае это только последний операнд в команде AND).
Использование R1 в команде OR приводит как к зависимости по выходу с
командой ADD, так и к антизависимости между командами ADD и AND. Обе
зависимости могут быть устранены путем замены регистра результата либо
команды ADD, либо команды OR. В первом случае должна измениться
каждая команда, которая использует результат команды ADD прежде чем
команда OR запишет в регистр R1 (а именно, второй операнд команды AND
в данном примере). Во втором случае при замене регистра результата
команды OR, все последующие команды, использующие ее результат,
должны также измениться. Альтернативой переименованию в процессе
компиляции является аппаратное переименование регистров, которое может
быть использовано в ситуациях, когда возникают условные переходы,
которые возможно сложны или невозможны для анализа компилятором; в
следующем разделе эта методика обсуждается более подробно.
Последним типом зависимостей являются зависимости по управлению.
Зависимости по управлению определяют порядок команд по отношению к
команде условного перехода так, что команды, не являющиеся командами
перехода, выполняются только когда они должны выполняться. Каждая
команда в программе является зависимой по управлению от некоторого
набора условных переходов и, в общем случае, эти зависимости по
управлению должны сохраняться. Одним из наиболее простых примеров
зависимости по управлению является зависимость операторов, находящихся
25
в части "then" оператора условного перехода if. Например, в
последовательности кода:
if p1 {
S1;
};
if p2 {
S2;
}
S1 является зависимым по управлению от p1, а S2 зависит по управлению от
p2 и не зависит от p1.
Имеются два ограничения, связанные с зависимостями по управлению:
1. Команда, которая зависит по управлению от условного перехода, не
может быть в результате перемещения поставлена перед командой
условного перехода так, что ее выполнение более не управлялось бы
этим условным переходом. Например, мы не можем взять команду из
части "then" оператора if и поставить ее перед оператором if.
2. Команда, которая не является зависимой по управлению от команды
условного перехода, не может быть поставлена после команды
условного перехода так, что ее выполнение станет управляться этим
условным переходом. Например, мы не можем взять оператор, стоящий
перед оператором if и перенести его в часть "then" условного
оператора.

Следующий пример иллюстрирует эти два ограничения:


ADD R1,R2,R3
BEQZ R12,skipnext
SUB R4,R5,R6
skipnext: OR R7,R1,R9
MULT R13,R1,R4
25
В этой последовательности команд имеются следующие зависимости по
управлению (предполагается, что переходы не задерживаются). Команда
SUB зависит по управлению от команды BEQZ, поскольку изменение
порядка следования этих команд изменит и результат вычислений. Если
поставить команду SUB перед командой условного перехода, результат
команды MULT не будет тем же самым, что и в случае, когда условный
переход является выполняемым. Аналогично, команда ADD не может быть
поставлена после команды условного перехода, поскольку это приведет к
изменению результата команды MULT, когда переход является
выполняемым. Команда OR не является зависимой по управлению от
условного перехода, поскольку она выполняется независимо от того,
является ли переход выполняемым или нет. Поскольку команда OR не
зависит по данным от предшествующих команд и не зависит по управлению
от команды условного перехода, она может быть поставлена перед командой
условного перехода, что не приведет к изменению значения, вычисляемого
этой последовательностью команд. Конечно это предполагает, что команда
OR не вызывает никаких побочных эффектов (например, возникновения
исключительной ситуации). Если мы хотим переупорядочить команды с
подобными потенциальными побочными эффектами, требуется
дополнительный анализ компилятором или дополнительная аппаратная
поддержка.
Обычно зависимости по управлению сохраняются посредством двух свойств
простых конвейеров, подобных рассмотренным в предыдущей главе. Во-
первых, команды выполняются в порядке, предписанном программой. Это
гарантирует, что команда, стоящая перед командой условного перехода,
выполняется перед переходом; таким образом, команда ADD в выше
приведенной последовательности будет выполняться перед условным
переходом. Во-вторых, средства обнаружения конфликтов по управлению
или конфликтов условных переходов гарантируют, что команда, зависимая
по управлению от условного перехода, не будет выполняться до тех пор, пока
25
не известно направление условного перехода. В частности команда SUB не
будет выполняться до тех пор, пока машина не определит, что условный
переход является невыполняемым.
Хотя сохранение зависимостей по управлению является полезным и простым
способом обеспечения корректности программы, сама по себе зависимость
по управлению не является фундаментальным ограничением
производительности. Возможно мы были бы рады выполнять команды,
которые не должны выполняться, тем самым нарушая зависимости по
управлению, если бы могли это делать не нарушая корректность программы.
Зависимость по управлению не является критическим свойством, которое
должно сохраняться. В действительности, двумя свойствами, которые
являются критичными с точки зрения корректности программы и которые
обычно сохраняются посредством зависимостей по управлению, являются
поведение исключительных ситуаций (exception behavior) и поток данных
(data flow).
Сохранение поведения исключительных ситуаций означает, что любые
изменения в порядке выполнения команд не должны менять условия
возникновения исключительных ситуаций в программе. Часто это требование
можно смягчить: переупорядочивание выполнения команд не должно
приводить к появлению в программе новых исключительных ситуаций.
Простой пример показывает как поддержка зависимостей по управлению
может сохранить эти ситуации. Рассмотрим кодовую последовательность:
BEQZ R2,L1
LW R1,0(R2)
L1:
В данном случае, если мы игнорируем зависимость по управлению и ставим
команду загрузки перед командой условного перехода, команда загрузки
может вызвать исключительную ситуацию по защите памяти. Заметим, что
здесь зависимость по данным, которая препятствует перестановке команд
BEQZ и LW, отсутствует, это только зависимость по управлению. Подобная
25
ситуация может возникнуть и при выполнении операции с ПТ, которая может
вызвать исключительную ситуацию. В любом случае, если переход
выполняется, то исключительная ситуация не возникнет, если команда не
ставится выше команды условного перехода. Чтобы разрешить
переупорядочивание команд мы хотели бы как раз игнорировать
исключительную ситуацию, если переход не выполняется. В разд. 6.7 мы
рассмотрим два метода, выполнение по предположению и условные
команды, которые позволяют нам справиться с этой проблемой.
Вторым свойством, сохраняемым с помощью поддержки зависимостей по
управлению, является поток данных. Поток данных представляет собой
действительный поток данных между командами, которые вырабатывают
результаты, и командами, которые эти результаты используют. Условные
переходы делают поток данных динамическим, поскольку они позволяют
данным для конкретной команды поступать из многих точек (источников).
Рассмотрим следующую последовательность команд:
ADD R1,R2,R3
BEQZ R4,L
SUB R1,R5,R6
L: OR R7,R1,R8
В этом примере значение R1, используемое командой OR, зависит от того,
выполняется или не выполняется условный переход. Одной зависимости по
данным не достаточно для сохранения корректности программы, поскольку
она имеет дело только со статическим порядком чтения и записи. Таким
образом, хотя команда OR зависит по данным как от команды ADD, так и от
команды SUB, этого недостаточно для корректного выполнения. Когда
выполняются команды, должен сохраняться поток данных: если переход не
выполняется, то команда OR должна использовать значение R1, вычисленное
командой SUB, а если переход выполняется - значение R1, вычисленное
командой ADD. Перестановка команды SUB на место перед командой
условного перехода не меняет статической зависимости, но она определенно
26
повлияет на поток данных и таким образом приведет к некорректному
выполнению. При сохранении зависимости по управлению команды SUB от
условного перехода, мы предотвращаем незаконное изменение потока
данных. Выполнение команд по предположению и условные команды,
которые помогают решить проблему исключительных ситуаций, позволяют
также изменить зависимость по управлению, поддерживая при этом
правильный поток данных (разд. 6.7).
Иногда мы можем определить, что устранение зависимости по управлению,
не может повлиять на поведение исключительных ситуаций, либо на поток
данных. Рассмотрим слегка модифицированную последовательность команд:
ADD R1,R2,R3
BEQZ R12,skipnext
SUB R4,R5,R6
ADD R5,R4,R9
skipnext: OR R7,R8,R9
Предположим, что мы знаем, что регистр результата команды SUB (R4) не
используется после команды, помеченной меткой skipnext. (Свойство,
определяющее, будет ли значение использоваться последующими
командами, называется живучестью (liveness) и мы вскоре определим его
более формально). Если бы регистр R4 не использовался, то изменение
значения R4 прямо перед выполнением условного перехода не повлияло бы
на поток данных. Таким образом, если бы регистр R4 не использовался и
команда SUB не могла выработать исключительную ситуацию, мы могли бы
поместить команду SUB на место перед командой условного перехода,
поскольку на результат программы это изменение не влияет. Если переход
выполняется, команда SUB выполнится и будет бесполезна, но она не
повлияет на результат программы. Этот тип планирования кода иногда
называется планированием по предположению (speculation), поскольку
компилятор в основном делает ставку на исход условного перехода; в данном
случае предполагается, что условный переход обычно является
26
невыполняемым. Более амбициозные механизмы планирования по
предположению в компиляторах обсуждаются в разд. 6.7.
Механизмы задержанных переходов, которые мы рассматривали в
предыдущей главе, могут использоваться для уменьшения простоев,
возникающих по вине условных переходов, и иногда позволяют использовать
планирование по предположению для оптимизации задержек переходов.
Зависимости по управлению сохраняются путем реализации схемы
обнаружения конфликта по управлению, которая приводит к приостановке
конвейера по управлению. Приостановки по управлению могут устраняться
или уменьшаться множеством аппаратных и программных методов.
Например, задержанные переходы могут уменьшать приостановки,
возникающие в результате конфликтов по управлению. Другие методы
уменьшения приостановок, вызванных конфликтами по управлению
включают разворачивание циклов, преобразование условных переходов в
условно выполняемые команды и планирование по предположению,
выполняемое с помощью компилятора или аппаратуры. В данной главе будут
рассмотрены большинство этих методов.

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

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


текста программы или близкого к нему, в то время как анализ параллелизма
уровня команд главным образом выполняется, когда команды уже
сгенерированы компилятором. Анализ на уровне циклов включает
определение того, какие зависимости существуют между операндами в цикле
в пределах одной итерации цикла. Теперь мы будем рассматривать только
зависимости по данным, которые возникают, когда операнд записывается в
некоторой точке и считывается в некоторой более поздней точке. Мы
обсудим коротко зависимости по именам. Анализ параллелизма уровня цикла
фокусируется на определении того, зависят ли по данным обращения к
26
данным в последующей итерации от значений данных, вырабатываемых в
более ранней итерации.
Рассмотрим следующий цикл:
for (i=1; i<=100; i=i+1) {
A[i+1] = A[i] + C[i]; /* S1 */
B[i+1] = B[i] + A[i+1];} /*S2*/
}
Предположим, что A, B и C представляют собой отдельные,
неперекрывающиеся массивы. (На практике иногда массивы могут быть теми
же самыми или перекрываться. Поскольку массивы могут передаваться в
качестве параметров некоторой процедуре, которая содержит этот цикл,
определение того, перекрываются ли массивы или они совпадают, требует
изощренного, межпроцедурного анализа программы). Какие зависимости по
данным имеют место между операторами этого цикла?
Имеются две различных зависимости:
1. S1 использует значение, вычисляемое оператором S1 на более ранней
итерации, поскольку итерация i вычисляет A[i+1], которое считывается
в итерации i+1. То же самое справедливо для оператора S2 для B[i] и
B[i+1].
2. S2 использует значение A[i+1], вычисляемое оператором S1 в той же
самой итерации.

Эти две зависимости отличаются друг от друга и имеют различный эффект.


Чтобы увидеть, чем они отличаются, предположим, что в каждый момент
времени существует только одна из этих зависимостей. Рассмотрим
зависимость оператора S1 от более ранней итерации S1. Эта зависимость
(loop-carried dependence) означает, что между различными итерациями цикла
существует зависимость по данным. Более того, поскольку оператор S1
зависит от самого себя, последовательные итерации оператора S1 должны
выполняться упорядочено.
26
Вторая зависимость (S2 зависит от S1) не передается от итерации к итерации.
Таким образом, если бы это была единственная зависимость, несколько
итераций цикла могли бы выполняться параллельно, при условии, что каждая
пара операторов в итерации поддерживается в заданном порядке.
Имеется третий тип зависимостей по данным, который возникает в циклах,
как показано в следующем примере.
Рассмотрим цикл:
for (i=1; i<=100; i=i+1) {
A[i] = A[i] + B[i]; /* S1 */
B[i+1] = C[i] + D[i]; /* S2 */
}
Оператор S1 использует значение, которое присваивается оператором S2 в
предыдущей итерации, так что имеет место зависимость между S2 и S1
между итерациями.
Несмотря на эту зависимость, этот цикл может быть сделан параллельным.
Как и в более раннем цикле эта зависимость не циклическая: ни один из
операторов не зависит сам от себя и хотя S1 зависит от S2, S2 не зависит от
S1. Цикл является параллельным, если только отсутствует циклическая
зависимость.
Хотя в вышеприведенном цикле отсутствуют циклические зависимости,
чтобы выявить параллелизм, он должен быть преобразован в другую
структуру. Здесь следует сделать два важных замечания:
1. Зависимость от S1 к S2 отсутствует. Если бы она была, то в
зависимостях появился бы цикл и цикл не был бы параллельным.
Вследствие отсутствия других зависимостей, перестановка двух
операторов не будет влиять на выполнение оператора S2.
2. В первой итерации цикла оператор S1 зависит от значения B[1],
вычисляемого перед началом цикла.
26
Эти два замечания позволяют нам заменить выше приведенный цикл
следующей последовательностью:
A[1] = A[1] + B[1];
for (i=1; i<=99; i=i+1) {
B[i+1] = C[i] + D[i];
A[i+1] = A[i+1] + B[i+1];
}
B[101] = C[100] + D[100];
Теперь итерации цикла могут выполняться с перекрытием, при условии, что
операторы в каждой итерации выполняются в заданном порядке. Имеется
множество такого рода преобразований, которые реструктурируют цикл для
выявления параллелизма.
Основное внимание в оставшейся части этой главы сосредоточено на
методах выявления параллелизма уровня команд. Зависимости по данным в
откомпилированных программах представляют собой ограничения, которые
оказывают влияние на то, какая степень параллелизма может быть
использована. Вопрос заключается в том, чтобы подойти к этому пределу
путем минимизации действительных конфликтов и связанных с ними
приостановок конвейера. Методы, которые мы изучаем становятся все более
изощренными в стремлении использования всего доступного параллелизма
при поддержании истинных зависимостей по данным в коде программы. Как
компилятор, так и аппаратура здесь играют свою роль: компилятор старается
устранить или минимизировать зависимости, в то время как аппаратура
старается предотвратить превращение зависимостей в приостановки
конвейера.
Основы планирования загрузки конвейера и разворачивание циклов
Для поддержания максимальной загрузки конвейера должен использоваться
параллелизм уровня команд, основанный на выявлении последовательностей
несвязанных команд, которые могут выполняться в конвейере с
совмещением. Чтобы избежать приостановки конвейера зависимая команда
26
должна быть отделена от исходной команды на расстояние в тактах, равное
задержке конвейера для этой исходной команды. Способность компилятора
выполнять подобное планирование зависит как от степени параллелизма
уровня команд, доступного в программе, так и от задержки функциональных
устройств в конвейере. В рамках этой главы мы будем предполагать
задержки, показанные на рис. 6.2, если только явно не установлены другие
задержки. Мы предполагаем, что условные переходы имеют задержку в один
такт, так что команда следующая за командой перехода не может быть
определена в течение одного такта после команды условного перехода. Мы
предполагаем, что функциональные устройства полностью конвейеризованы
или дублированы (столько раз, какова глубина конвейера), так что операция
любого типа может выдаваться для выполнения в каждом такте и
структурные конфликты отсутствуют.
Команда, вырабатывающая Команда, использующая Задержка в
результат результат тактах
Другая операция АЛУ с
Операция АЛУ с ПТ 3
ПТ
Операция АЛУ с ПТ Запись двойного слова 2
Другая операция АЛУ с
Загрузка двойного слова 1
ПТ
Загрузка двойного слова Запись двойного слова 0
Рис. 6.2.
В данном коротком разделе мы рассмотрим вопрос о том, каким образом
компилятор может увеличить степень параллелизма уровня команд путем
разворачивания циклов. Для иллюстрации этих методов мы будем
использовать простой цикл, который добавляет скалярную величину к
вектору в памяти; это параллельный цикл, поскольку зависимость между
итерациями цикла отсутствует. Мы предполагаем, что первоначально в
регистре R1 находится адрес последнего элемента вектора (например,
элемент с наибольшим адресом), а в регистре F2 - скалярная величина,
которая должна добавляться к каждому элементу вектора. Программа для
26
машины, не рассчитанная на использование конвейера, будет выглядеть
примерно так:
Loop: LD F0,0(R1) ;F0=элемент вектора
ADDD F4,F0,F2 ;добавляет скаляр из F2
SD 0(R1),F4 ;запись результата
SUBI R1,R1,#8 ;пересчитать указатель
;8 байт (в двойном слове)
BNEZ R1, Loop ;переход R1!=нулю
Для упрощения мы предполагаем, что массив начинается с ячейки 0. Если бы
он находился в любом другом месте, цикл потребовал бы наличия одной
дополнительной целочисленной команды для выполнения сравнения с
регистром R1.
Рассмотрим работу этого цикла при выполнении на простом конвейере с
задержками, показанными на рис. 6.2.
Если не делать никакого планирования, работа цикла будет выглядеть
следующим образом:
Такт выдачи
Loop: LD F0,0(R1) 1
приостановка 2
ADDD F4,F0,F2 3
приостановка 4
приостановка 5
SD 0(R1),F4 6
SUBI R1,R1,#8 7
BNEZ R1,Loop 8
приостановка 9
Для его выполнения потребуется 9 тактов на итерацию: одна приостановка
для команды LD, две для команды ADDD, и одна для задержанного
перехода. Мы можем спланировать цикл так, чтобы получить
Loop: LD F0,0(R1) 1
26
приостановка 2
ADDD F4,F0,F2 3
SUBI R1,R1,#8 4
BNEZ R1,Loop ;задержанный переход 5
SD 8(R1),F4 ;команда изменяется, когда 6
;меняется местами с командой SUB1
Время выполнения уменьшилось с 9 до 6 тактов.
Заметим, что для планирования задержанного перехода компилятор должен
определить, что он может поменять местами команды SUB1 и SD путем
изменения адреса в команде записи SD: Адрес был равен 0(R1), а теперь
равен 8(R1). Это не тривиальная задача, поскольку большинство
компиляторов будут видеть, что команда SD зависит от SUB1, и откажутся от
такой перестановки мест. Более изощренный компилятор смог бы рассчитать
отношения и выполнить перестановку. Цепочка зависимостей от команды LD
к команде ADDD и далее к команде SD определяет количество тактов,
необходимое для данного цикла.
В вышеприведенном примере мы завершаем одну итерацию цикла и
выполняем запись одного элемента вектора каждые 6 тактов, но
действительная работа по обработке элемента вектора отнимает только 3 из
этих 6 тактов (загрузка, сложение и запись). Оставшиеся 3 такта составляют
накладные расходы на выполнение цикла (команды SUB1, BNEZ и
приостановка). Чтобы устранить эти три такта нам нужно иметь больше
операций в цикле относительно числа команд, связанных с накладными
расходами. Одним из наиболее простых методов увеличения числа команд по
отношению к команде условного перехода и команд, связанных с
накладными расходами, является разворачивание цикла. Такое
разворачивание выполняется путем многократной репликации (повторения)
тела цикла и коррекции соответствующего кода конца цикла.
Разворачивание циклов может также использоваться для улучшения
планирования. В этом случае, мы можем устранить приостановку, связанную
26
с задержкой команды загрузки путем создания дополнительных независимых
команд в теле цикла. Затем компилятор может планировать эти команды для
помещения в слот задержки команды загрузки. Если при разворачивании
цикла мы просто реплицируем команды, то результирующие зависимости по
именам могут помешать нам эффективно спланировать цикл. Таким образом,
для разных итераций хотелось бы использовать различные регистры, что
увеличивает требуемое число регистров.
Представим теперь этот цикл развернутым так, что имеется четыре копии
тела цикла, предполагая, что R1 первоначально кратен 4. Устраним при этом
любые очевидные излишние вычисления и не будем пользоваться повторно
никакими регистрами.
Ниже приведен результат, полученный путем слияния команд SUB1 и
выбрасывания ненужных операций BNEZ, которые дублируются при
разворачивании цикла.
Loop: LD F0,0(R1)
ADDD F4,F0,F2
SD 0(R1),F4 ;выбрасывается SUB1 и BNEZ
LD F6,-8(R1)
ADDD F8,F6,F2
SD -8(R1),F8 ;выбрасывается SUB1 и BNEZ
LD F10,-16(R1)
ADDD F12,F10,F2
SD -16(R1),F12 ;выбрасывается SUB1 и BNEZ
LD F14,-24(R1)
ADDD F16,F14,F2
SD -24(R1),F16
SUB1 R1,R1,#32
BNEZ R1, Loop
Мы ликвидировали три условных перехода и три операции
декрементирования R1. Адреса команд загрузки и записи были
26
скорректированы так, чтобы позволить слить команды SUB1 в одну команду
по регистру R1. При отсутствии планирования за каждой командой здесь
следует зависимая команда и это будет приводить к приостановкам
конвейера. Этот цикл будет выполняться за 27 тактов (на каждую команду
LD потребуется 2 такта, на каждую команду ADDD - 3, на условный переход
- 2 и на все другие команды 1 такт) или по 6.8 такта на каждый из четырех
элементов. Хотя эта развернутая версия в такой редакции медленнее, чем
оптимизированная версия исходного цикла, после оптимизации самого
развернутого цикла ситуация изменится. Обычно разворачивание циклов
выполняется на более ранних стадиях процесса компиляции, так что
избыточные вычисления могут быть выявлены и устранены оптимизатором.
В реальных программах мы обычно не знаем верхней границы цикла.
Предположим, что она равна n и мы хотели бы развернуть цикл так, чтобы
иметь k копий тела цикла. Вместо единственного развернутого цикла мы
генерируем пару циклов. Первый из них выполняется (n mod k) раз и имеет
тело первоначального цикла. Развернутая версия цикла окружается внешним
циклом, который выполняется (n div k) раз.
В вышеприведенном примере разворачивание цикла увеличивает
производительность этого цикла путем устранения команд, связанных с
накладными расходами цикла, хотя оно заметно увеличивает размер
программного кода. Насколько увеличится производительность, если цикл
будет оптимизироваться?
Ниже представлен развернутый цикл из предыдущего примера после
оптимизации.
Loop: LD F0,0(R1)
LD F6,-8(R1)
LD F10,-16(R1)
LD F14,-24(R1)
ADDD F4,F0,F2
ADDD F8,F6,F2
27
ADDD F12,F10,F2
ADDD F16,F14,F2
SD 0(R1),F4
SD -8(R1),F8
SD -16(R1),F12
SUB1 R1,R1,#32
BNEZ R1, Loop
SD 8(R1),F16 ; 8 - 32 = -24
Время выполнения развернутого цикла снизилось до 14 тактов или до 3.5
тактов на элемент, по сравнению с 6.8 тактов на элемент до оптимизации, и
по сравнению с 6 тактами при оптимизации без разворачивания цикла.
Выигрыш от оптимизации развернутого цикла даже больше, чем от
оптимизации первоначального цикла. Это произошло потому, что
разворачивание цикла выявило больше вычислений, которые могут быть
оптимизированы для минимизации приостановок конвейера; приведенный
выше программный код выполняется без приостановок. При подобной
оптимизации цикла необходимо осознавать, что команды загрузки и записи
являются независимыми и могут чередоваться. Анализ зависимостей по
данным позволяет нам определить, являются ли команды загрузки и записи
независимыми.
Разворачивание циклов представляет собой простой, но полезный метод
увеличения размера линейного кодового фрагмента, который может
эффективно оптимизироваться. Это преобразование полезно на множестве
машин от простых конвейеров, подобных рассмотренному ранее, до
суперскалярных конвейеров, которые обеспечивают выдачу для выполнения
более одной команды в такте. В следующем разделе рассмотрены методы,
которые используются аппаратными средствами для динамического
планирования загрузки конвейера и сокращения приостановок из-за
конфликтов типа RAW, аналогичные рассмотренным выше методам
компиляции.
27

Лекция № 22 .
Компьютерные сети
Вопросы:
1.Основные понятия
2.Классификация ИВС

Сети ЭВМ и телекоммуникации явились результатом эволюции вычислительных


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

Сети ЭВМ отличаются наибольшей автономностью своих подсистем. Связь между


ними осуществляется по средствам сообщений, передаваемые через сетевые адаптеры и
протяженные каналы связи.
27
Операционные системы этих ЭВМ видоизменены, для формирования запросов
добавлены программные клиенты, а для обслуживания запросов программные серверы.
Вычислительная сеть-это сложный комплекс территориально рассредоточенных ЭВМ
и терминальных устройств, связанных каналами передачи данных.
В ИВС взаимосвязано и согласованно функционируют:
1.сети доступа(access network)
2.магистральная сеть (магистраль)-core network
3.сетевые операционные системы
4.сетевые приложения, базы данных и другие ресурсы
УК- узлы коммутации
СПД - сеть передачи данных
С-сервер
П - пользователь
МИ- межсетевой интерфейс
27
Магистральная сеть- это ядро ИВС, связывающее через сети доступа рабочие станции и
серверы, сети друг с другом.
Магистральная сеть служит для транзита трафика по высокоскоростным каналам.
Передает суммарный поток данных.
Сети доступа по средствам абонентских каналов подключают к рабочим станциям,
серверы к узлу коммуникации. Они служат для концентрации информационных
потоков.

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

1. Введение. Основные понятия и принципы организации компьютерных


сетей.

Компьютерная сеть представляет собой совокупность компьютеров, а


так же различных электронных систем и устройств, подключаемых к
компьютерам, обеспечивающую управление и обмен информацией
между компьютерами в сети без каких – либо промежуточных
носителей информацией. Из этого следует, что главное назначение
компьютерных вычислительных сетей в том чтобы упростить и
ускорить процесс взаимодействия между конечными пользователями,
т.е. клиентами сети, а так же организация доступа пользователей к
общим сетевым ресурсам.
Компьютерные сети бывают различных видов: например по их
масштабу и территории они подразделяются на локальные(LAN) и
глобальные(WAN), по уровню организации: одноранговые и на основе
сервера, по скорости передачи информации на низко-, средне- и
высокоскоростные, по типу соединения: на коаксиальные, на витой
паре, оптоволоконные, с передачей информации по радиоканалу и в
инфракрасном диапазоне, по топологии сети т.е. структуре связей
между ее основными функциональными элементами: звездная, шинная,
кольцевая.
Функции компьютеров, входящих в сеть можно разделить на три вида:
- Организация доступа к сети,
27
- Управление передачей информации,
- Предоставление вычислительных ресурсов и услуг абонентам сети.

Любая компьютерная сеть характеризуется: топологией, протоколами,


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

При этом многообразии характеристик и устройств различных сетей


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

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


27
систем.

Строгое определение протокола выглядит как формализованный набор


правил, используемый ПК для коммуникаций.
Из-за сложности коммуникаций между системами и необходимости
соблюдения различных коммуникационных требований протоколы
разделяются на модульные уровни. Каждый уровень выполняет
конкретную функцию для расположенного выше уровня.
В современных компьютерных сетях как правило используется много
различных видов сетевых протоколов, и даже в рамках одной сети
применяют несколько из них. Потребность в расширении,
модернизации, а так же необходимость упрощения процессов
разработки и усовершенствования вычислительных сетей показала
необходимость в стандартизации принципов и процедур
взаимодействия между абонентами сетей. С этой целью была
разработана так называемая Эталонная модель взаимодействия
открытых систем, состоящая из семи уровней. (OSI, Open Systems
Interconnection), разработана международной организацией
стандартизации (ISO, International Standards Organization). Реализация
модели OSI напоминает различные уровни обычного почтового адреса
– от страны, региона до города, дома, улицы и фамилии конечного
получателя. Для доставки информации соответствующему получателю
устройства на маршруте передачи используют разные уровни
детализации. Каждый из уровней представляет определенную группу
функций, необходимых для работы компьютерной сети.

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


то есть уровень, обеспечивающий выполнение прикладных процессов
пользователей. Наряду с прикладными протоколами, он определяет
протоколы передачи файлов, виртуального терминала, электронной
27
почты.
Следующим по значимости является представительный (шестой)
уровень (уровень представления данных). Он определяет единый для
всех систем синтаксис передаваемой информации. Необходимость
данного уровня обусловлена различной формой представления
информации в сети передачи данных и компьютерах. Этот уровень
играет важную роль в обеспечении «открытости» систем, позволяя им
общаться между собой независимо от их внутреннего языка.
Следующий уровень (пятый) называется сеансовым, так как основное
его назначение – это организация сеансов связи между прикладными
процессами различных рабочих станций. На этом уровне создаются
порты для приема и передачи сообщений и организуются соединения
— логические каналы между процессами. Необходимость протоколов
этого уровня определяется относительной сложностью сети передачи
данных и стремлением обеспечить достаточно высокую надежность
передачи информации.
Четвертый, транспортный уровень (уровень сквозной передачи) служит
для передачи данных между двумя взаимодействующими открытыми
системами и организации процедуры сопряжения абонентов сети с
системой передачи данных. На этом уровне определяется
взаимодействие рабочих станций — источника и адресата данных,
организуется и поддерживается логический канал (транспортное
соединение) между абонентами.
Третий, сетевой уровень, предназначен для маршрутизации
информации и управления сетью передачи данных. В отличие от
предыдущих, этот уровень в большей степени ориентирован на сеть
передачи данных. Здесь решаются вопросы управления сетью передачи
данных, в том числе маршрутизация и управление информационными
потоками. Этот уровень выполняет в основном технические функции
передачи и управления информацией.
27
Канальный уровень обеспечивает функциональные и процедурные
средства для установления, поддержания и расторжения соединений на
уровне каналов передачи данных. Процедуры канального уровня
обеспечивают обнаружение и, возможно, исправление ошибок,
возникающих на физическом уровне.
Физический уровень обеспечивает механические, электрические,
функциональные и процедурные средства организации физических
соединений при передаче бит данных между физическими объектами.
Последние четыре уровня образуют транспортную службу
компьютерной сети, которая обеспечивает передачу
(«транспортировку») информации между рабочими станциями,
освобождая более высокие уровни от решения этих задач. В свою
очередь, три верхних уровня, обеспечивающие логическое
взаимодействие прикладных процессов, функционально объединяются
в абонентскую службу.
В рамках эталонной модели также определяются услуги, которые
должны обеспечивать ее уровни. Услуги, по сути дела, представляют
собой функции, выполняемые на соответствующем уровне эталонной
модели.
В частности, физический уровень должен обеспечивать такие виды
услуг, как установление и идентификация физических соединений,
организация последовательностей передачи бит информации,
оповещение об окончании связи.
Канальный уровень обеспечивает организацию нужной
последовательности блоков данных и их передачу, управление
потоками между смежными узлами, идентификацию конечных пунктов
канальных соединений, обнаружение и исправления ошибок,
оповещение об ошибках, которые не исправлены на канальном уровне.
Сетевой уровень в числе основных услуг осуществляет
идентификацию конечных точек сетевых соединений, организацию
28
сетевых соединений, управление потоками блоков данных,
обеспечение последовательностей доставки блоков данных,
обнаружение ошибок и формирование сообщений о них, разъединение
сетевых соединений.
Транспортный уровень обеспечивает установление и разъединение
транспортных соединений, формирование блоков данных, обеспечение
взаимодействия сеансовых соединении с транспортными
соединениями, управление последовательностью передачи блоков
данных, обеспечение целостности блоков данных во время передачи,
обнаружение и устранение ошибок, сообщение о неисправленных
ошибках, предоставление приоритетов в передаче блоков, передачу
подтверждений о принятых блоках, ликвидацию тупиковых ситуаций.
На сеансовом уровне предоставляются услуги, связанные с
обслуживанием сеансов и обеспечением передачи данных в
диалоговом режиме, установлением сеансового соединения, обменом
данными; управлением обменом; синхронизацией сеансового
соединения, сообщениями об исключительных ситуациях,
отображением сеансового соединения на транспортный уровень,
завершением сеансового соединения.
Представительный уровень обеспечивает выбор вида представления
данных, интерпретацию и преобразование передаваемой информации к
виду, удобному для прикладных процессов, преобразование синтаксиса
данных, формирование блоков данных.
Прикладной уровень обеспечивает широкий набор услуг, в том числе:
управление терминалами, управление файлами, управление диалогом,
управление задачами, управление сетью в целом. К дополнительным
услугам уровня относятся услуги по организации электронной почты,
передачи массивов сообщений и т.п.
Услуги различных уровней определяются с помощью протоколов
эталонной модели взаимодействия открытых систем. В соответствии с
28
семиуровневой моделью взаимодействия открытых систем вводятся
семь типов протоколов, которые именуются так же, как уровни.

3. Сетевые протоколы.

Сетевыми протоколами называют протоколы первого и второго


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

Стандарт IEEE 802.1 является общим документом, который определяет


архитектуру и прикладные процессы системного управления сетью,
методы объединения сетей на подуровне управления доступом к
передающей среде. В соответствии с данным стандартом канальный
уровень разбит на два подуровня: УЛК — управления логическим
каналом и УДС — управления доступом к физической среде.
Стандарт IEEE 802.2 определяет протоколы управления логическим
каналом, в том числе специфицирует интерфейсы с сетевым уровнем и
подуровнем управления доступом к передающей среде. Каждый из
остальных стандартов, начиная с IEEE 802.3, определяет метод доступа
и специфику физического уровня для конкретного типа локальной
компьютерной сети. Так, стандарт IEEE 802.3 описывает
характеристики и процедуры множественного доступа с контролем
передачи и обнаружением столкновений. Стандарт IEEE 802.4
определяет протокол маркерного доступа к моноканалу. Процедуры и
характеристики маркерного метода доступа к кольцевой сети
28
определяется стандартом IEEE 802.5. Для локальных сетей,
охватывающих площадь радиусом до 25 км и использующих
технические средства кабельного телевидения, разработан стандарт
IEEE 802.6. Этот стандарт предусматривает передачу данных, речи,
изображений и позволяет создавать так называемые городские
локальные сети. В настоящее время продолжаются работы по
стандартизации локальных компьютерных сетей. Так, в подкомитете
IEEE 802.11 разрабатывается стандарт на радиосети для мобильных
компьютеров, а в комитете IEEE 802.12 рассматривается стандарт на
высокоскоростные компьютерные сети “lOOVG-AnyLAN.

3.1. Транспортные протоколы.

Для обеспечения надежной связи в процессе обмена информацией


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

3.2. Межсетевые протоколы.


28

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


основном используются сетевой и транспортный уровни. В настоящее
время используются два основных подхода к формированию
межсетевого взаимодействия: это объединение сетей в рамках сети
Internet в соответствии с межсетевым протоколом IP и объединение
сетей коммутации пакетов (Х.25) в соответствии с Рекомендацией
МККТТХ.75.
Основное различие этих подходов заключается в следующем: протокол
IP относится к протоколам без установления логического соединения
(дейтаграммным), а Рекомендация Х.75 предполагает организацию
виртуального соединения (канала).
Становление корпоративных компьютерных сетей тесно связано с
сетью Internet, в рамках которой были реализованы основные
принципы и протоколы межсетевых соединений. С сетью Internet
связано появление новой группы протоколов — так называемых
межсетевых протоколов, или IP-протоколов (сокращение от Internet
Protocol). Территориально располагаясь на сетевом уровне Эталонной
модели, межсетевой протокол согласовывает транспортную и сетевую
службы различных компьютерных сетей.
По мере развития различных компьютерных сетей стала очевидной
потребность в их объединении. В связи с этим, начиная с 1973г.,
агентство ARPA начало осуществлять программу Internetting Project.
Следовало определить, как связать сети между собой с учетом того, что
каждая из них использует различные протоколы передачи информации.
Для этой цели был предложен протокол TCP/IP (Transmission Control
Protocol/ Internet Protocol). Собственно протокол TCP/IP состоит из
двух протоколов: TCP и IP. Протокол TCP является стандартным
транспортным протоколом и предоставляет сервис для надежной
передачи информации между клиентами сети. Протокол IP
28
обеспечивает сервис доставки пакетов между узлами сети Internet
отвечает за адресацию сетевых узлов. В процессе своего
функционирования протокол IP постоянно взаимодействует с
протоколом межсетевых управляющих сообщений (ICMP —
сокращение от Internet Control Message Protocol), образуя с ним так
называемый межсетевой модуль (IP-модуль).
Протоколы TCP и IР располагаются в середине Эталонной модели
взаимодействия открытых систем и тесно связаны с протоколами
других уровней. В связи с этим термин «TCP/IP» обычно охватывает
все, что связано с протоколами TCP и IP. Сюда входит целое семейство
протоколов, прикладные программы и даже сама сеть.

3.3. Протоколы прикладного уровня.

Три верхних уровня Эталонной модели взаимодействия открытых


систем — сеансовый, представительный и прикладной уровень
определяют протоколы, ориентированные на приложения. Протоколы
верхних уровней устанавливают стандартные для компьютерной сети
процедуры выполнения прикладных функций.
Так, протокол передачи, доступа и управления файлом (File, Transfer,
Access and Management — FTAM) и соответствующая ему прикладная
служба определяется стандартом ISO 8571 Международной
организации стандартов. Стандартизация обеспечивает взаимодействие
пользователей файловых систем в процессе передачи, доступа или
управления хранящейся информацией таким образом, как если бы
файлы хранились в самих этих системах. В качестве пользователя
файловых систем выступает прикладной процесс, называемый процесс-
клиент. Процесс, с помощью которого организуется доступ к
удаленному накопителю файлов (файл-серверу), получил название
процесс файл-сервер. В качестве поставщика средств, с помощью
28
которых процесс-клиент получает доступ к удаленному накопителю
файлов, выступает специальный элемент прикладной службы
передачи, доступа и управления файлом.
С целью предоставления возможности подключения различных
терминалов к компьютерной сети была разработана концепция
виртуального терминала. Виртуальный терминал представляет собой
некоторый гипотетический терминал, обобщающий в себе характерные
свойства заданного класса устройств (терминалов). Виртуальный
терминал реализуется с помощью специального элемента прикладной
службы, определенного в документе ISO/DIS 9040.2 Международной
организации стандартов. При этом оконечная сторона (пользователь
сети) преобразовывает информацию своего терминала в формат
виртуального терминала для передачи в компьютерную сеть. Правила
преобразования задаются с помощью протокола виртуального
терминала (Virtual Terminal Protocol — VTP), изложенного в документе
ISO/DIS 9041.2. Целью этого стандарта является определение
алгоритмов взаимодействия протокольных модулей для обеспечения
базисного класса службы виртуального терминала. Стандарт
определяет следующие основные функции протокола виртуального
терминала: установление и завершение ассоциации виртуального
терминала, согласование, управление диалогом, передача данных,
управление доставкой, обработка ошибок. Кроме того, стандарт
специфицирует: наборы процедур для ориентированной на соединение
передачи данных и управляющей информации, синхронный и
асинхронный режимы работы, средства согласования процедур и
параметров службы, а также форматы и правила формирования блоков
данных.
Особое место среди служб прикладного уровня занимает система
обработки сообщений (Massage Handling Systems — MHS),
предназначенная для обеспечения надежной передачи информации
28
между абонентами компьютерной сети. Работа данной системы
осуществляется следующим образом: сообщение, сформированное с
помощью специальной прикладной программы процесса, называемой
агентом пользователя, пересылается подключенному к нему агенту
передачи сообщений, при этом используются стандартные примитивы
службы обработки сообщений. Агент передачи сообщений
представляет собой виртуальный почтовый сервер. Используя
стандартные протоколы обмена, агенты передачи сообщений
обеспечивают передачу информации между агентами пользователя.
Основная структура передаваемых сообщений состоит из так
называемого конверта и содержимого сообщения. Конверт содержит
необходимую для передачи адресную и управляющую информацию.
Содержимое сообщения фактически является той информацией,
которую отправитель хочет передать получателю.
Совокупность всех агентов пользователя и агентов передачи
сообщений представляет собой систему обработки сообщений. В свою
очередь, система обработки сообщений совместно с пользователями
образует среду обработки сообщений. Функционирование системы
обработки сообщений поддерживается службой передачи сообщений.
Различают пять категорий услуг, предоставляемых службой передачи
сообщений. Прежде всего, это базовая служба передачи сообщений,
предоставляющая услуги по индикации и управлению передачей
сообщений. Следующая категория услуг определяет услуги подачи и
доставки, предоставляя пользователю возможность выбора категории
доставки и ряд сервисных