Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

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



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

Пример. Спулер (spooler) Пусть процессу необходимо вывести страницу (или несколько страниц) на печать, он помещает данные для печати в спулер (в зависимости от операционной системы это может быть каталог, файл или область памяти). Другой процесс, отвечающий за печать, по очереди берёт переданные задания и выводит их на принтер. Тем самым снимается конкуренция за использование принтера различными процессами. Кроме того, процесс печати может решать по каким-либо определённым правилам в какой очерёдности следует пускать задания на печать. Заметим, что спулер в данном примере реализует межпроцессное взаимодействие, в котором множество процессов желающих вывести данные на принтер взаимодействуют через общий ресурс (спулер) с печатающим процессом. При этом ресурс "принтер" по сути монопольно занят один единственным печатающим процессом.
 

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

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

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

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

Рисунок 1. Исключение состязательности с использованием критических областей

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

    1. Запрет прерываний.

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

    1. Переменные блокировки

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

Кроме рассмотренных можно назвать распространённые реализации: строгое чередование, алгоритм Петерсона, установка блокировки процессора (TLS, Test and Set Lock).





Дата публикования: 2015-10-09; Прочитано: 512 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.007 с)...