Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОС_модуль1.doc
Скачиваний:
10
Добавлен:
25.08.2019
Размер:
276.48 Кб
Скачать

Мьютексы

mutex, сокращенное от mutual exclusion (взаимное исключение) – упрощенная версия семафора.

Два состояния:

  1. блокирован (Значение устанавливается процедурой mutex_lock).

  2. не блокирован (Значение устанавливается процедурой mutex_unlock).

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

При входе в критическую область процесс или поток вызывает mutex_lock и блокирует другие потоки или процессы. При выходе он запускает процедуру mutex_unlock. Если мьютекс блокирует несколько потоков, из них случайным образом выбирается один.

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

Недостатки семафоров и мьютексов – сложность программирования.

Мониторы

Способ решения проблемы взаимных исключений с помощью языков высокого уровня (ЯВУ). Реализацию взаимного исключения в этом случае выполняет компилятор языка.

Можно быть уверенным, что процессы, организованные как мониторы, не попадут в критические области одновременно.

Один из языков, поддерживающих мониторы – Java.

Взаимные блокировки

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

1 пример. Покажем, как это становится возможным. В компьютерных системах много устройств, каждое из которых может использоваться одновременно только одним процессом. Пусть в системе существует два процесса, которым необходимо отсканировать документ и записать его на компакт-диск. Процесс А запрашивает разрешение на использование сканера и получает его. Процесс В запрограммирован по-другому, и запрашивает сначала CD ROM, и тоже получает разрешение на его использование. Затем процесс А обращается к CD ROM и получает отказ, поскольку устройство уже занято процессом В, и переходит в состояние ожидания. Процесс В запрашивает сканер, и тоже получает отказ, и тоже переходит в состояние ожидания. В таком положении оба процесса заблокированы, и могут оставаться в нем бесконечно.

2 пример. Взаимоблокировки могут происходить во множестве других ситуаций, кроме операций ввода-вывода. Например, взаимоблокировка – это типичная сбойная ситуация при работе с базами данных или общими таблицами. Например, процесс А блокирует запись R1, а процесс В – запись R2. Затем процесс А пытается получить доступ к записи R2, а процесс В – к записи R1. Происходит взаимная блокировка.

Для возникновения тупика нужно одновременное наличие 4-х условий:

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

  2. Условие выжидания ресурсов. (Процессы ждут дополнительные ресурсы не освобождая уже занятые).

  3. Условие неперераспределяемости. (У процесса нельзя забрать захваченные им ресурсы).

  4. Условие кругового ожидания (процессы ждут ресурсы, занятые другими процессом).