Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Синхронизация и взаимодействие процессов. Почтовые ящики. Разделяемая память. Программные каналы.




Если процессы независимы – то синхронизация не требуется. Синхронизация требуется в случае если процессы используют один ресурс или взаимодействуют между собой:

1) Безопасное взаимодействие – взаимодействие посредствам объекстов взаимодействия предоставляемые ОС, при этом сохраняется целостность информации, за счет отсутствия переключения контекста.

2) Небезопасное взаимодействие – взаимодействие посредствам независимых от систем объектов. При этом целестность информации и неделимость операций с нею должны обеспечиваться программистом.

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

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

 

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

Объекты синхронизации POSIX. Объекты синхронизации типа mutex. Объекты синхронизации типа condvar.

POSIX - portable operating system interface - набор стандартов, описывающих интерфейсы между операционной системой и прикладной программой (системный API), библиотеку языка C и набор приложений и их интерфейсов.

1. Семафоры

2. Очереди сообщений

3. Почтовые ящики

4. Объекты mutex

5. Объекты condvar

Объекты типа mutex - это простейшие двоичные семафоры, которые могут находиться в одном из двух состояний — отмеченном или неотмеченном (открыт и закрыт соответственно). Когда какой-либо поток, принадлежащий любому процессу, становится владельцем объекта mutex, последний переводится в неотмеченное состояние. Если задача освобождает мьютекс, его состояние становится отмеченным. Задача мьютекса — защита объекта от доступа к нему других потоков, отличных от того, который завладел мьютексом. В каждый конкретный момент только один поток может владеть объектом, защищённым мьютексом. Если другому потоку будет нужен доступ к переменной, защищённой мьютексом, то этот поток блокируется до тех пор, пока мьютекс не будет освобождён.

Объект синхронизации типа condvar дает возможность задаче ожидать выполнения неко­торых условий. Фактически он состоит из объекта - события Е (см. раздел 5.3), с одним отличием: при поступлении события (посредством функции Send) только одна из очереди ожидающих события задач активизируется.

Задачи синхронизации.

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

отношение предшествования,

отношение приоритетности,

отношение взаимного исключения.

Эти отношения и определяют существо синхронизирующих правил.

Задача взаимного исключения. Это фундаментальная по своему назначению задача. Любая ОС, управляющая параллельными процессами, должна обеспечить тот или иной вариант реализации ее решения. Необходимо согласовать работу n>1 параллельных процессов при использовании некоторого критического ресурса таким образом, чтобы удовлетворить следующим требованиям:

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

критические области не должны иметь приоритеты в отношении друг друга

остановка какого-либо процесса вне его критической области не должна влиять на дальнейшую работу процессов по использованию критического ресурса

решение о вхождении процессов в их критические области при одинаковом времени поступления запросов на такое вхождение и равноприоритетности процессов не откладывается на неопределенный срок, а является конечным во времени

относительные скорости развития процессов неизвестны и произвольны

любой процесс может переходить в любое состояние, отличное от активного, вне пределов своей критической области

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

 

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

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

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

 

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

 

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

 

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

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

Первый тип — процессы-читатели. Они считывают одновременно информацию из области, если это допускается при работе с конкретным устройством памяти.

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

 

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

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...