Синхронизация и взаимодействие процессов. Почтовые ящики. Разделяемая память. Программные каналы.
⇐ ПредыдущаяСтр 2 из 2 Если процессы независимы – то синхронизация не требуется. Синхронизация требуется в случае если процессы используют один ресурс или взаимодействуют между собой: 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 Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|