Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Системное программное обеспечение. Учебник

.pdf
Скачиваний:
0
Добавлен:
08.09.2026
Размер:
2 Мб
Скачать
☆
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;
Таким образом, здесь цикл расщепляется на параллельные цепочки. При этом метод разбиения цикла обычно дает более высокую степень параллелизма, чем количество процессоров. Поэтому операционная система с учетом аппаратных средств
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]