Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Тема6.doc
Скачиваний:
8
Добавлен:
01.05.2025
Размер:
118.78 Кб
Скачать
      1. Использование блокировки памяти. Алгоритм Деккера

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

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

      1. Семафорные примитивы. Мьютексы. Задачи "поставщик-потребитель", "читатели-писатели"

Понятие семафорных механизмов было введено Дейкстрой.

Семафор – это переменная специального типа, над которой определены две операции – закрытие семафора ( P) и открытие семафора (V). Обобщённый смысл операции Р состоит в декрементации числового поля семафора и в проверке значения этого поля семафора. Если это значение оказывается меньше некоторой величины (чаще всего нуля), процесс, вызвавший данную операцию блокируется и помещается в очередь к семафору.. В противном случае процесс продолжает своё выполнение. Операция V связана с инкрементацией числового поля семафора. При этом, если выполняется некоторое условие, один из ранее заблокированных процессов деблокируется, т. е. покидает очередь к семафору и переходит в состояние готовности. Обычно семафор логически связывается с некоторым критическим ресурсом. Поэтому заблокированные процессы, находящиеся в очереди к семафору, косвенно ожидают доступа к критическому ресурсу.

Операции P и V являются неделимыми операциями, т. е. их выполнение не может прерываться. Действия по блокированию и деблокированию процессов реализуют модули из состава ядра ОС.

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

На практике используется много различных видов семафорных механизмов, отличающихся начальным значением и диапазоном изменения значений семафора, логикой действия семафорных операций, количеством семафоров, доступных для обработки при использовании отдельного примитива. Допустимыми значениями семафора являются только целые числа. Если максимально возможное значение семафора равно 1, то семафор называется двоичным или мьютексом. В противном случае семафоры называют N-ичными. Возможны варианты реализации, в которых семафорные переменные не могут быть отрицательными, в других – отрицательные значения могут указывать на длину очереди процессов, стоящих в состоянии ожидания открытия семафора.

Использование средств взаимного исключения позволяет взаимодействующим процессам корректно обмениваться данными, чтобы правильно выполнялась их общая работа. Типичным примером взаимодействующих процессов, использующих разделяемые ресурсы, является задача ПОСТАВЩИК-ПОТРЕБИТЕЛЬ.

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

      1. Объекты синхронизации Windows NT/2000/XP (Процесс, поток, задание, файл, консольный ввод, изменение в файловой системе, события с автосбросом или сбросом вручную, ожидаемый таймер с автосбросом или сбросом вручную, семафор, мьютекс, критическая секция)

Выполнить самостоятельно

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]