- •Н.В.Вдовикина, а.В.Казунин, и.В.Машечкин, а.Н.Терехин Системное программное обеспечение: взаимодействие процессов.
- •Часть I. Теоретические основы. 5
- •Часть II. Реализация процессов. 34
- •Часть III. Реализация взаимодействия процессов. 62
- •6.4Семафоры. 116
- •Часть I. Теоретические основы.
- •Введение.
- •Понятие процесса.
- •Некоторые типы процессов.
- •«Полновесные процессы»
- •«Легковесные процессы»
- •Жизненный цикл процесса.
- •Синхронизация параллельных процессов.
- •Способы реализации взаимного исключения.
- •Запрещение прерываний и специальные инструкции.
- •Алгоритм Петерсона.
- •Активное ожидание.
- •Семафоры.
- •Мониторы.
- •Дополнительная синхронизация: переменные-условия.
- •Обмен сообщениями.
- •Синхронизация.
- •Адресация.
- •Длина сообщения.
- •Классические задачи синхронизации процессов.
- •«Обедающие философы»
- •Задача «читателей и писателей»
- •Задача о «спящем парикмахере»
- •Часть II. Реализация процессов.
- •Реализация процессов в ос unix
- •Понятие процесса в unix.
- •Контекст процесса.
- •Тело процесса.
- •Аппаратный контекст.
- •Системный контекст.
- •Аппарат системных вызов в oc unix.
- •Порождение новых процессов.
- •Порождение сыновнего процесса. Идентификаторы процессов.
- •Порождение сыновнего процесса. Одновременное выполнение.
- •Механизм замены тела процесса.
- •Запуск на выполнение команды ls.
- •Вызов программы компиляции.
- •Использование схемы fork-exec
- •Завершение процесса.
- •Использование системного вызова wait()
- •Использование системного вызова wait()
- •Жизненный цикл процесса в ос unix.
- •Начальная загрузка. Формирование о и 1 процессов.
- •Планирование процессов в ос unix.
- •Планирование процессов.
- •Принципы организация свопинга.
- •Часть III. Реализация взаимодействия процессов.
- •Элементарные средства межпроцессного взаимодействия.
- •Сигналы.
- •Обработка сигнала.
- •Удаление временных файлов при завершении программы.
- •Программа “Будильник”.
- •Двухпроцессный вариант программы “Будильник”.
- •Надежные сигналы.
- •Работа с сигнальной маской.
- •Использование надежных сигналов.
- •Программные каналы
- •Использование канала.
- •Реализация конвейера.
- •Совместное использование сигналов и каналов – «пинг-понг».
- •Именованные каналы (fifo)
- •Модель «клиент-сервер».
- •Нелокальные переходы.
- •Использование нелокальных переходов.
- •Трассировка процессов.
- •Общая схема использования механизма трассировки.
- •Трассировка процессов.
- •Средства межпроцессного взаимодействия System V.
- •Организация доступа и именования в разделяемых ресурсах.
- •Именование разделяемых объектов.
- •Генерация ключей: функция ftok().
- •Общие принципы работы с разделяемыми ресурсами.
- •Очередь сообщений.
- •Доступ к очереди сообщений.
- •Отправка сообщения.
- •Получение сообщения.
- •Управление очередью сообщений.
- •Использование очереди сообщений.
- •Основной процесс.
- •Очередь сообщений. Модель «клиент-сервер»
- •Разделяемая память
- •Создание общей памяти.
- •Доступ к разделяемой памяти.
- •Открепление разделяемой памяти.
- •Управление разделяемой памятью.
- •Общая схема работы с общей памятью в рамках одного процесса.
- •Семафоры.
- •Доступ к семафору
- •Операции над семафором
- •Управление массивом семафоров.
- •Работа с разделяемой памятью с синхронизацией семафорами.
- •1Й процесс:
- •2Й процесс:
- •Взаимодействие процессов в сети.
- •Механизм сокетов.
- •Типы сокетов. Коммуникационный домен.
- •Создание и конфигурирование сокета. Создание сокета.
- •Связывание.
- •Предварительное установление соединения. Сокеты с установлением соединения. Запрос на соединение.
- •Сервер: прослушивание сокета и подтверждение соединения.
- •Прием и передача данных.
- •Завершение работы с сокетом.
- •Резюме: общая схема работы с сокетами.
- •Работа с локальными сокетами.
- •Пример работы с сокетами в рамках сети.
- •Среда параллельного программирования mpi
- •Краткий обзор параллельных архитектур.
- •Системы с распределенной памятью – mpp.
- •Системы с общей памятью – smp.
- •Системы с неоднородным доступом к памяти – numa.
- •Кластерные системы.
- •Модель программирования mpi.
- •Функции общего назначения. Общая структура программы.
- •Коммуникаторы и группы.
- •Обрамляющие функции. Инициализация и завершение.
- •Синхронизация: барьеры.
- •Использование барьерной синхронизации.
- •Прием и передача данных. Общие замечания.
- •Сообщения и их атрибуты.
- •Поддержка типов данных в mpi.
- •Коммуникации «точка-точка». Блокирующий режим.
- •Отправка сообщений в блокирующем режиме.
- •Режимы буферизации.
- •Прием сообщений в блокирующем режиме.
- •Mpi: прием сообщения, размер которого неизвестен заранее.
- •Коммуникации «точка-точка». Неблокирующий режим.
- •Отсылка и прием сообщений в неблокирующем режиме.
- •Работа с квитанциями.
- •Mpi: коммуникации «точка-точка». «Пинг-понг».
- •Коллективные коммуникации.
- •Коллективный обмен данными.
- •Коллективный обмен, совмещенный с обработкой данных.
- •Mpi: применение коллективных коммуникаций.
- •Алфавитный указатель упоминаемых библиотечных функций и системных вызовов.
- •Список литературы
-
Среда параллельного программирования mpi
Еще одним программным механизмом, позволяющим организовать взаимодействие параллельных процессов вне зависимости от их взаимного расположения (т.е. исполняются ли они на одной машине (процессоре) или на разных), является библиотека MPI.
Как следует из ее названия14, библиотека MPI представляет собой набор функций, позволяющих программисту организовать обмен данными между процессами в терминах передачи сообщений. При этом ответственность за то, чтобы этот обмен был реализован оптимальным образом, в зависимости от конкретной вычислительной системы, на которой исполняется приложение, и от взаимного расположения обменивающихся процессов, ложится на саму библиотеку. Например, очевидно, что для процессов, исполняющихся на одном процессоре, наиболее эффективной будет реализация с использованием разделяемой памяти, в то время как в случае исполнения процессов на разных процессорах могут использоваться сокеты или другие механизмы (подробнее об особенностях различных архитектур мы поговорим чуть ниже).
Таким образом, MPI представляет собой более высокоуровневое средство программирования, нежели рассмотренные выше механизмы, такие как сокеты и разделяемая память, и в то же время в реализации библиотеки MPI могут использоваться все эти средства.
Кроме того, важно отметить, что в отличие от всех рассмотренных выше средств, MPI предоставляет возможность создавать эффективные программы, не только для работы в условиях псевдопараллелизма, когда параллельные процессы в реальности исполняются на единственном процессоре, но и для выполнения на многопроцессорных системах с реальным параллелизмом.
-
Краткий обзор параллельных архитектур.
Прежде чем вдаваться в детали программирования для параллельных архитектур, рассмотрим на примерах некоторые особенности, общие для всего многообразия этих систем, и дадим некоторую их классификацию.
Очевидно, что главное отличие любой параллельной вычислительной системы от классической фон-неймановской архитектуры заключается в наличии нескольких процессоров, на которых одновременно могут выполняться независимые или взаимодействующие между собой задачи. При этом параллельно работающие процессы конкурируют между собой за остальные ресурсы системы, а также могут осуществлять взаимодействие аналогично тому, как это происходит в однопроцессорной системе. Рассматривая подробнее особенности различных многопроцессорных систем, мы обратим особое внимание на те механизмы, которые позволяют организовать на них взаимодействие параллельных процессов.
Основным параметром, позволяющим разбить все множество многопроцессорных архитектур на некоторые классы, является доступ к памяти. Существуют системы с общей памятью, обладающие определенным массивом блоков памяти, которые одинаково доступны всем процессорам, и системы с распределенной памятью, в которых у каждого процессора имеется в наличии только локальная память, доступ в которую других процессоров напрямую невозможен. Существует и промежуточный вариант между этими двумя классами – это так называемые системы с неоднородным доступом к памяти, или NUMA-системы. Далее мы подробнее остановимся на каждом из этих классов архитектур.