Добавил:
ИВТ Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
экз сливы / Bilety_1-52_Os.doc
Скачиваний:
3
Добавлен:
26.01.2024
Размер:
1.8 Mб
Скачать

№39. Программное решение задачи взаимного исключения.

Задача: создать механизм взаимоисключений для следующих ограничений:

- на машине нет специальных команд взаимоисключение;

- скорости ассинхронных процессов заранее неизвестны;

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

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

Алгоритм Деккера (первый вариант).

Преимущества метода: просто реализуется взаимоисключение

Недостатки метода: сначала должен реализоваться процесс 1

- возможно только поочередное вхождение процессов в критические области

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

Алгоритм Деккера (второй вариант)

П реимущества метода: не надо процессам чередоваться.

Недостатки метода: после условия и перед присвоением значения перменной PR?WNYTRI возможен вход в критическую область обоих процессов.

Алгоритм Деккера (третий вариант, усовершенствование второго).

П реимущества метода: оба процесса одновременно не могут войти в критическую область.

Недостатки метода: возможен тупик (бесконечное ожидание), если оба процесса установят переменные одновременно.

№40.Способы синхронизации процессов.

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

Способы: Критические секции, Семафоры, Мьютексы, События, Таймеры.

№41. Семафоры. Синхронизация и взаимоисключение при помощи семафоров.

Семафоры- это защищенная переменная, которую можно опрашивать и менять только при помощи специальных операций P и V и операции инициализации семафора.

Операция P(S) (вход взаимоисключение):

если S>0

то S := S – 1

иначе ждать на S

Операция V(S) (выход взаимоисключение):

если есть процесс, ожидающий на S, разрешить одному продолжить работу

иначе S := S + 1

Семафоры бывают: 1) Двоичные – 0, 1 , 2)Считающие – N > 0

Их реализация бывает: 1) Аппаратная 2)Программная

Синхронизация при помощи семафоров

PROGRAMM

VAR S: (семафор) LOGICAL;

PROCEDURE 1

BEGIN

начальные операторы

P(S);

остальные операторы

END

END

PROCEDURE 2

BEGIN

начальные операторы

V(S);

остальные операторы

END

END

BEGIN

S := 0;

PARBEGIN

PROCEDURE 1

PROCEDURE 2

PAREND

END

Пусть есть процесс, который

ждет некоторого события

PROCEDURE 1 и PROCEDURE 2,

которая это событие фиксирует.

Тогда надо использовать P и V

следующим образом

Реализация взаимоисключений при помощи семафоров.

PROGRAMM

VAR S: (семафор) LOGICAL;

PROCEDURE 1

BEGIN

WHILE TRUE DO

BEGIN

начальные операторы

P(S);

крититеская область

V(S);

остальные операторы

END

END

PROCEDURE 2

[ то же самое, что и в PROCEDURE 1 ]

BEGIN

инициализция семафора (S,1)

PARBEGIN

PROCEDURE 1

PROCEDURE 2

PAREND

END

Соседние файлы в папке экз сливы