Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Системное программное обеспечение. Учебник
.pdf
101
Глава 4. Параллелизм в операционных системах
марная производительность снизится. Векторные операции
обеспечивают идеальную возможность полной загрузки вычислительного конвейера.
При выполнении векторной команды одна и та же операция применяется ко всем элементам вектора (или чаще всего
к соответствующим элементам пары векторов). Для настройки конвейера на выполнение конкретной операции может потребоваться некоторое установочное время, однако затем операнды могут поступать в конвейер с максимальной скоростью,
допускаемой возможностями памяти. При этом не возникает
пауз ни в связи с выборкой новой команды, ни в связи с определением ветви вычислений при условном переходе. Таким
образом, главный принцип вычислений на векторной машине
состоит в выполнении некоторой элементарной операции или
комбинации из нескольких элементарных операций, которые
должны повторно применяться к некоторому блоку данных.
Таким операциям в исходной программе соответствуют небольшие компактные циклы.
2. Машины типа SIMD. Машины типа SIMD состоят из
большого числа идентичных процессорных элементов, имеющих собственную память. Все процессорные элементы в такой
машине выполняют одну и ту же программу. Очевидно, что
такая машина, составленная из большого числа процессоров,
может обеспечить очень высокую производительность только
на тех задачах, при решении которых все процессоры могут
делать одну и ту же работу. Модель вычислений для машины
SIMD очень похожа на модель вычислений для векторного
процессора: одиночная операция выполняется над большим
блоком данных.
В отличие от ограниченного конвейерного функционирования векторного процессора, матричный процессор (синоним
для большинства SIMD-машин) может быть значительно более
гибким. Обрабатывающие элементы таких процессоров – это
универсальные программируемые ЭВМ, так что задача, решаемая параллельно, может быть достаточно сложной и содержать ветвления. Обычное проявление этой вычислительной
модели в исходной программе примерно такое же, как и в случае векторных операций: циклы на элементах массива, в ко-

СИСТЕМНОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ
102
торых значения, вырабатываемые на одной итерации цикла,
не используются на другой итерации цикла.
Модели вычислений на векторных и матричных ЭВМ настолько схожи, что эти ЭВМ часто рассматриваются как эквивалентные.
3. Машины типа MIMD. Термин «мультипроцессор» распро-
страняется на большинство машин типа MIMD (подобно тому,
как термин «матричный процессор» применяется к машинам
типа SIMD) и часто используется в качестве синонима для машин типа MIMD. В мультипроцессорной системе каждый процессорный элемент (ПЭ) выполняет свою программу достаточно
независимо от других процессорных элементов. Процессорные
элементы, конечно, должны как-то связываться друг с другом,
что делает необходимым более подробную классификацию машин типа MIMD. В мультипроцессорах с общей памятью (сильносвязанных мультипроцессорах) имеется память данных и команд, доступная всем ПЭ. С общей памятью ПЭ связываются
с помощью общей шины или сети обмена. В противоположность
этому варианту в слабосвязанных многопроцессорных системах
(машинах с локальной памятью) вся память делится между процессорными элементами и каждый блок памяти доступен только связанному с ним процессору. Сеть обмена связывает процессорные элементы друг с другом.
Базовой моделью вычислений на MIMD-мультипроцессоре
является совокупность независимых процессов, эпизодически
обращающихся к разделяемым данным. Существует большое
количество вариантов этой модели. На одном конце спектра –
модель распределенных вычислений, в которой программа
делится на довольно большое число параллельных задач, состоящих из множества подпрограмм. На другом конце спектра –
модель потоковых вычислений, в которых каждая операция
в программе может рассматриваться как отдельный процесс. Такая операция ждет своих входных данных (операндов), которые
должны быть переданы ей другими процессами. При их получении операция выполняется и полученное значение передается
тем процессам, которые в нем нуждаются.
4. Многопроцессорные машины с SIMD-процессорами.
Многие современные супер-ЭВМ представляют собой многопро-

103
Глава 4. Параллелизм в операционных системах
цессорные системы, в которых в качестве процессоров используются векторные процессоры или процессоры типа SIMD. Такие машины относятся к машинам класса MSIMD.
Языки программирования и соответствующие компиляторы для машин типа MSIMD обычно обеспечивают языковые
конструкции, которые позволяют программисту описывать
«крупнозернистый» параллелизм. В пределах каждой задачи компилятор автоматически векторизует подходящие циклы [6]. Машины типа MSIMD, как можно себе представить,
дают возможность использовать лучший из этих двух принципов декомпозиции: векторные операции («мелкозернистый»
параллелизм) для тех частей программы, которые подходят
для этого, и гибкие возможности MIMD-архитектуры для других частей программы.
4.3. Концепция форм параллелизма
Одна из форм параллелизма имеет место в так называемых
мультипрограммных операционных системах. Работа этих ОС
связана с реализацией многозадачного и многопоточного режимов, которые выше были рассмотрены более подробно. Основной особенностью мультипрограммных операционных систем
является то, что в их среде параллельно развивается несколько
последовательных процессов.
Последовательный процесс (иногда называемый задачей) – это выполнение отдельной программы с ее данными
на последовательном процессоре. В концепции, которая получила распространение в 1970-е годы, задача (task) – это совокупность связанных между собой и образующих единое целое
программных модулей и данных, требующая ресурсов вычислительной системы для своей реализации. Далее задачей стали называть единицу работы, для выполнения которой предоставляется центральный процессор. Вычислительный процесс
может включать несколько задач. С точки зрения внешнего
наблюдателя, эти последовательные вычислительные процессы выполняются одновременно. Поэтому в этом случае также
допустимо применение понятия «параллелизм» [4].
Концептуально процессор рассматривается в двух аспектах: во-первых, он является носителем данных, во-вторых,

СИСТЕМНОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ
104
он (одновременно) выполняет операции, связанные с их обработкой. Процессами может быть редактирование какого-либо
текста, трансляция исходной программы, ее компоновка, исполнение. Причем трансляция какой-нибудь исходной программы является одним процессом, а трансляция следующей
исходной программы – другим процессом, поскольку, хотя
транслятор как объединение программных модулей здесь выступает как одна и та же программа, но данные, которые он
обрабатывает, являются разными.
Определение концепции процесса преследует цель выработать механизм распределения и управления ресурсами (см. подраздел 1.5). Как отмечалось в подразделе 1.5, введение в состав
вычислительной машины специальных контроллеров позволило совместить во времени (распараллелить) операции вывода
данных и последующие вычисления на центральном процессоре. Однако, поскольку центральный процессор продолжал
долго и часто простаивать, дожидаясь завершения очередной
операции ввода-вывода, было предложено организовать так называемый мультизадачный (мультипрограммный) режим работы вычислительной системы. Выигрыш во времени достигается
за счет того, что пока один вычислительный процесс или задача
ожидает завершения очередной операции ввода-вывода, другая задача может быть поставлена на решение. Как отмечено
выше, именно благодаря совмещению во времени процедур выполнения двух операций общее время выполнения обеих задач
получается меньше, чем если бы мы выполняли их по очереди.
Тем не менее время каждой операции увеличивается.
Анализируя работу вычислительного комплекса в этом ракурсе, можем сделать следующий вывод: при мультипрограммировании повышается пропускная способность системы, но
отдельный процесс не выполняется быстрее по сравнению с тем
случаем, когда он выполнялся бы в однопрограммном режиме. Таким образом, на практике подтверждается известный
факт, что всякое разделение ресурсов замедляет работу одного
из участников за счет дополнительных затрат времени на ожидание освобождения ресурсов.
Как уже было сказано, операционная система поддерживает мультипрограммирование (многопроцессность) и стара-

105
Глава 4. Параллелизм в операционных системах
ется эффективно использовать ресурсы путем организации
к ним очередей запросов, составляемых тем или иным способом. Выполнение этого требования достигается поддержанием
в памяти более одного процесса, готового использовать другие
ресурсы, как только последние станут доступными. При необходимости использовать какой-либо ресурс (оперативную память, устройство ввода-вывода, массив данных и т. п.) задача
обращается к супервизору операционной системы. Суперви-
зор – это центральный управляющий модуль, который, в свою
очередь, может состоять из нескольких модулей, например
супервизор ввода-вывода, супервизор прерываний, супервизор программ, диспетчер задач и т.д. Задача сообщает супервизору о своем требовании посредством специальных вызовов
(команд, директив). При этом указывается вид ресурса и, если
надо, его объем (например, количество адресуемых ячеек оперативной памяти, объем выводимых данных и т.д.). Директива обращения к операционной системе передает ей управление, переводя процессор в привилегированный режим. Ресурс
может быть выделен задаче, если:
• он свободен и в системе нет запросов от задач более высо-
кого приоритета к этому же ресурсу;
• текущий запрос и ранее выданные запросы допускают со-
вместное использование ресурсов;
• ресурс используется задачей низшего приоритета и мо-
жет быть временно отобран (разделяемый ресурс).
Когда операционная система получает запрос от задачи,
то она либо удовлетворяет его и возвращает управление задаче, выдавшей данный запрос, либо, если ресурс занят, ставит
задачу в очередь к ресурсу, переводя ее в состояние ожидания
(блокируя). Очередь к ресурсу может быть организована несколькими способами, но чаще всего осуществляется с помощью списковой структуры. После окончания работы с ресурсами задача опять с помощью специального вызова супервизора
сообщает об отказе от ресурса или операционная система забирает ресурс сама.
Таким образом, под параллельными процессами понимаются не только процессы, одновременно развивающиеся на различных процессорах, каналах и устройствах ввода-вывода, но и те

СИСТЕМНОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ
106
последовательные процессы, которые разделяют центральный
процессор и хотя бы частично перекрываются во времени. Поэтому можно определить такие параллельные процессы как некоторые последовательные процессы, которые одновременно
находятся в каком-либо активном состоянии. Причем два параллельных процесса могут быть независимыми или взаимодействующими. Независимыми являются процессы, множества
переменных которых не пересекаются. Взаимодействующие
процессы совместно используют некоторые общие переменные,
когда выполнение одного процесса может повлиять на выполнение другого [4].
4.4. Параллелизм многопроцессорных систем
Многопроцессорные системы за годы развития вычислительной техники претерпели ряд этапов своего развития. Исторически первой стала осваиваться технология SIMD. Однако в настоящее время наметился устойчивый интерес к архитектурам
MIMD [6, 12, 15].
Архитектура MIMD дает большую гибкость: при наличии
адекватной поддержки со стороны аппаратных средств и программного обеспечения MIMD может работать как однопользовательская система, обеспечивая высокопроизводительную
обработку данных для одной прикладной задачи, как многопрограммная машина, выполняющая множество задач параллельно, и как некоторая комбинация этих возможностей.
Архитектура MIMD может использовать все преимущества
современной микропроцессорной технологии на основе строгого учета соотношения стоимость/производительность. В действительности практически все современные многопроцессорные системы строятся на тех же микропроцессорах, которые
можно найти в персональных компьютерах, рабочих станциях
и небольших однопроцессорных серверах.
Одной из отличительных особенностей многопроцессорной
вычислительной системы является сеть обмена, с помощью которой процессоры соединяются друг с другом или с памятью [6,
12, 15]. Модель обмена настолько важна для многопроцессорной
системы, что многие характеристики производительности и другие оценки выражаются отношением времени обработки к вре-

107
мени обмена, соответствующим решаемым задачам. Существуют
две основные модели межпроцессорного обмена: одна основана
на передаче сообщений, другая – на использовании общей па-
мяти. В многопроцессорной системе с общей памятью один процессор осуществляет запись в конкретную ячейку, а другой процессор производит считывание из этой ячейки памяти. Чтобы
обеспечить согласованность данных и синхронизацию процессов, обмен часто реализуется по принципу взаимно исключающего доступа к общей памяти методом «почтового ящика».
Часто, и притом необоснованно, в машинах с общей памятью
и векторных машинах затраты на обмен не учитываются, так
как проблемы обмена в значительной степени скрыты от программиста. Однако накладные расходы на обмен в этих машинах
имеются и определяются конфликтами шин, памяти и процессоров. Чем больше процессоров добавляется в систему, тем больше процессов соперничают при использовании одних и тех же
данных и шины, что приводит к состоянию насыщения. Модель
системы с общей памятью очень удобна для программирования
и иногда рассматривается как высокоуровневое средство оценки
влияния обмена на работу системы, даже если основная система
в действительности реализована с применением локальной памяти и принципа передачи сообщений [6, 12, 15].
Глава 4. Параллелизм в операционных системах
4.5. Операционные системы распределенных
вычислительных систем
Основные достоинства многопроцессорных систем перед
однопроцессорными системами очевидны: производительность
и надежность. Но какой ценой это дается? Есть у многопроцессорных систем и недостатки, основные среди них следующие.
Программное обеспечение (приложения, языки, ОС) сложнее,
чем для однопроцессорных ЭВМ. Кроме того, недостатком является ограниченность физических размеров при наращивании памяти (близость к памяти 64-разрядного процессора).
Языки программирования для многопроцессорных систем
существенно отличаются от таковых для однопроцессорных
систем. Вместо простых, большей частью линейных программ
и алгоритмов мы вынуждены обращаться к чисто функцио-

СИСТЕМНОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ
108
нальным языкам, позволяющим более эффективное использование многопроцессорных систем. Рассмотрим поподробнее
достоинства распределенных систем [4].
Распределенная система – совокупность независимых компьютеров, которая представляется пользователю единым компьютером. Примеры: сеть рабочих станций (выбор процессора
для выполнения программы, единая файловая система), роботизированный завод (роботы связаны с разными компьютерами, но
действуют, как внешние устройства единого компьютера), банк
со множеством филиалов, система резервирования авиабилетов.
Почему создаются распределенные системы? В чем их преимущества перед централизованными ЭВМ?
Первая причина – экономическая. С появлением микропроцессоров закон Гроша перестал действовать – за двойную
цену можно получить тот же процессор с несколько большей
частотой (закон Гроша – быстродействие процессора пропорционально квадрату его стоимости).
Вторая причина – можно достичь такой высокой производительности путем объединения микропроцессоров, которая
недостижима в централизованном компьютере.
Третья причина – естественная распределенность (банк,
поддержка совместной работы группы пользователей).
Четвертая причина – надежность (выход из строя нескольких узлов незначительно снизит производительность).
Пятая причина – наращиваемость производительности.
4.6. Асинхронные параллельные процессы
Итак, процессы называются параллельными, если они существуют одновременно. Параллельные процессы могут работать
независимо друг от друга или они могут быть асинхронными.
Это значит, что им необходимо периодически синхронизироваться и взаимодействовать [2, 5]. Решение этих проблем осуществляется с применением параллельных программ, написанных
на таких языках программирования, как нотация параллельного Паскаля, язык Ада, язык Модула, разработанный Н. Виртом.
В языках программирования предусматриваются специальные конструкции для указания параллелизма, обычно это парные операторы:

109
Глава 4. Параллелизм в операционных системах
• первый оператор указывает, что последовательное течение программы должно быть разделено на несколько параллельных последовательностей;
• второй оператор указывает, что параллельно выполняемые
последовательности должны слиться воедино и должно возобновиться последовательное выполнение программы.
Например [2, 5]: parbegin/parend («начало/конец параллельного выполнения») и cobegin/coend («начало/конец совмещенного выполнения»). Если необходимо решить квадратное уравнение:
X: = (-b+ (b**2–4*a*c) **.5) / (2*a),
то можно использовать конструкцию параллельного Паскаля:
parbegin
Оператор 1;
Оператор 2;
.........
Оператор N
parend.
Конструкции для указания параллелизма в данном примере будут выглядеть следующим образом:
1 parbegin
temp1: = -b;
temp2: = b**2;
temp3: = 4*c;
temp4: = 2*a;
parend;
2 temp5: = temp 3*c;
3 temp5: = temp 2-temp 5;
4 temp5: = temp 5**.5;
5 temp5: = temp 1 + temp 5;
6 x: = temp 5 / temp 4.
Программы, которые пишутся с ориентацией на параллельное, совмещенное выполнение, являются более редкими. Отладка их сложна. Языки параллельного программирования менее
распространены, чем обычные, по следующим причинам [1]:
• люди мыслят последовательными категориями;
• аппаратные средства ориентированы на последовательную
работу;

СИСТЕМНОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ
110
• доказывать корректность параллельных программ и от-
лаживать их гораздо сложнее, чем последовательных.
Параллелизм в программах может быть либо явным, либо
неявным (скрытым). Явный параллелизм программист указывает в своей программе с помощью специальных конструкций,
обозначающих параллельное вычисление, например [2, 5]:
COBEGIN;
ОПЕРАТОР 1;
ОПЕРАТОР 2;
. . . . . . . . .
ОПЕРАТОР N;
COEND;
Но здесь легко не заметить параллелизма или допустить другие ошибки. Поэтому гораздо эффективнее использовать автоматическое обнаружение неявного параллелизма, присущего алгоритму. В компиляторы, операционные системы и аппаратные
средства компьютеров включаются специальные механизмы распараллеливания. Это с гораздо большей вероятностью, чем явное указание параллелизма, обеспечивает создание корректных
и быстро выполняющихся программ. Известны два способа, реализуемые в компиляторах для использования неявного параллелизма программ: расщепление цикла и редукция дерева [1].
При расщеплении цикла в мультипроцессорной системе,
например, вместо цикла:
FOR I=1 TO 4 DO
A (I) = B (I)+C (I)
можно выполнить при помощи четырех процессоров следующий цикл:
COBEGIN;
A (1) =B (1) + C (1);
A (2) =B (2) + C (2);
A (3) =B (3) + C (3);
A (4) =B (4) + C (4);
COEND;
Таким образом, здесь цикл расщепляется на параллельные
цепочки. При этом метод разбиения цикла обычно дает более
высокую степень параллелизма, чем количество процессоров.
Поэтому операционная система с учетом аппаратных средств
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
