Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОС_СГTУ new v10.doc
Скачиваний:
148
Добавлен:
12.11.2019
Размер:
4.13 Mб
Скачать

2.4. Взаимодействие процессов

В Windows процессы имеют три типа взаимодействия между собой [3]. Они показаны в табл.4.

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

2) Процессы косвенно осведомлены о наличии друг друга: они не обязательно могут знать идентификаторы друг друга, однако могут разделять доступ к некоторому объекту (буфер ввода/вывода).

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

Взаимодействие процессов Таблица 4.

Степень взаимодействия

Взаимосвязь

Влияние одного процесса на другой

Потенциальная проблема взаимодействия

Не осведомлены

Конкуренция

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

Взаимоисключение, взаимоблокировка, голодание

Косвенно осведомлены

Сотрудничество с использованием разделения ресурса

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

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

Непосредственно осведомлены

Сотрудничество с использованием связей

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

Взаимоблокировка, голодание

Взаимоисключение (mutual exclusion) – это предоставление процессу некоторого ресурса в монопольное использование, например, принтер предоставляется файла для печати, иначе на распечатке будут чередоваться строки различных файлов. Такой ресурс будет называться критическим, а участок программы, который его использует – критической секцией программы.

Взаимоблокировка (deadlock) – пусть в системе 2 процесса П1 и П2 и 2 ресурса Р1 и Р2. Для работы П1 требуется Р1 и Р2 и он уже захватил Р1, а Р2 недоступен. В тоже время, П2 требуется Р1 и Р2, он захватил Р2, а Р1 недоступен, таким образом, процессы оказываются взаимноблокированы.

Голодание - пусть в системе 3 процесса П1, П2 и П3, которые используют ресурс. Возможна ситуация, когда ресурсом владеет П1, а затем передаёт П3. ОС может предоставлять ресурс так, что П2 его не получит, а П1 и П3 будут использовать его попеременно. Таким образом, П2 не получает ресурса, хотя никакой взаимоблокировки нет, т. е. он голодает.

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

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

Такие объекты называются проекциями файлов на оперативную память (file-mapping object). Для создания проекции файла сначала вызывается функция CreateFileMapping(). Ей передается дескриптор (уже открытого) файла или указывается, что нужно использовать page file операционной системы. Кроме этого, в параметрах ей передается флаг защиты, максимальный размер проекции и имя объекта. Затем вызывается функция MapViewOfFile(). Она отображает представление файла (view of a file) в адресное пространство процесса. По окончании работы вызывается функция UnmapViewOfFile(). Она освобождает память и записывает данные в файл (если это не файл подкачки). Чтобы записать данные на диск немедленно, используется функция FlushViewOfFile(). Проекция файла, как и другие объекты ядра, может использоваться другими процессами через наследование, дублирование дескриптора или по имени.

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

Сокет - это абстрактный объект для обозначения одного из концов сетевого соединения, в том числе и через Internet. Сокеты Windows бывают двух типов: сокеты дейтаграмм и сокеты потоков. Интерфейс Windows Sockets (WinSock) основан на BSD-версии сокетов, но в нем имеются также расширения, специфические для Windows.

Для синхронизации в Win API используются (табл.5): уведомление об изменении файла, мьютекс, семафор, события, таймер ожидания.

Механизмы для синхронизации параллельных вычислений Таблица 5

Тип объекта

Определение

Условие перехода в сигнальное состояние

Ожидающие потоки

Процесс

Программа, включающая адресное пространство и ресурсы, требуемые для её выполнения

Завершение последнего потока

Освобождаются все потоки

Поток

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

Завершение работы потока

Освобождаются все потоки

Файлы

Открытый файл или устройство ввода/ вывода

Завершение операций ввода/вывода

Освобождаются все потоки

Консольный ввод

Буфер текстового окна используется для операций I/O в MS-DOS

Имеется введённая информация доступная процессу

Освобождается один поток

Объекты специально для синхронизации

Уведомление об изменении файла

Уведомление о любых изменениях ФС

Изменение в ФС соответствующее заданным объектом фильтру

Освобождается один поток

Мьютекс

Механизм обеспечения взаимоисключений в Win 32

Поток освобождает мьютекс

Освобождается один поток

Семафор

Счётчик, регулирующий количество потоков, которые могут использовать ресурс

Счётчик семафора обнуляется

Освобождается один поток

События

Извещение о наступлении некоторого события в системе

Поток осуществляет событие

Освобождаются все потоки

Таймер ожидания

Счётчик, учитывающий прошедшее время

Наступил указанный момент времени или истёк указанный интервал времени.

Освобождаются все потоки

Семафор – это объект синхронизации, имеющий счетчик целых значенией и над которыми определены три операции:

  • инициализация неотрицательным числом;

  • уменьшения значения семафора: если значение отрицательное, то поток, выполняющий эту операцию блокируется;

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

Каждый объект синхронизации ОС может находиться в сигнальном и несигнальном состоянии, когда объект входит в сигнальное состояние исполняющая система ОС освобождает все потоки, находящиеся в состоянии ожидания этого объекта.

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