
- •2. Процессы и потоки
- •2.5.3.4 Почтовые ящики
- •2 Процессы и потоки
- •2.1 Понятия процесс и поток
- •2.2 Создание процессов и потоков
- •2.3 Состояния потоков
- •2.4 Планирование процессов
- •2.4.1 Основные понятия планирования процессов
- •2.4.2 Алгоритмы планирования, основанные на квантовании
- •2.4.3 Алгоритмы планирования, основанные на приоритетах
- •2.4.4 Планирование в операционных системах пакетной обработки информации
- •2.4.4.1 Критерий эффективности
- •2.4.4.2 Алгоритмы планирования
- •2.4.5 Планирование в интерактивных системах (системах разделения времени)
- •2.4.5.1 Критерий эффективности
- •2.4.5.2 Алгоритмы планирования
- •2.4.6 Планирование в системах реального времени
- •2.5 Взаимодействие между процессами
- •2.5.1 Виды взаимодействий между процессами
- •2.5.2 Синхронизация процессов и потоков
- •2.5.2.1 Состязания (гонки)
- •2.5.2.1.1 Ситуация состязания
- •2.5.2.1.2 Критические секции
- •2.5.3.1.3 Способы реализации взаимного исключения
- •2.5.2.2.1 Ситуация взаимной блокировки
- •2.5.2.2.2 Моделирование взаимоблокировок
- •2.5.2.3 Методы борьбы с тупиками
- •2.5.2.3.2 Обнаружение и устранение взаимоблокировок
- •2.5.2.3.4 Обнаружение взаимоблокировки при наличии нескольких ресурсов каждого типа
- •2.5.2.3.5 Выход из взаимоблокировки
- •2.5.2.4 Динамическое избежание взаимоблокировок
- •2.5.2.4.1 Траектории ресурсов
- •2.5.2.4.2 Безопасные и небезопасные состояния
- •2.5.2.4.3 Алгоритм банкира для одного вида ресурсов
- •2.5.2.4.4 Алгоритм банкира для несколько видов ресурсов
- •2.5.2.6.1 Мьютексы
- •2.5.2.6.2 Системные семафоры
- •2.5.2.6.3 События
- •2.5.2.6.4 Ждущие таймеры
- •2.5.2.6.5 Сигналы
- •2.5.2.6.3 Мониторы Хоара
- •2.5.3.1 Конвейеры (каналы)
- •2.5.3.2 Очереди сообщений
- •2.5.3.3 Разделяемая память
- •2.5.3.4 Почтовые ящики
- •2.5.3.5 Сокеты
2.5.2.2.1 Ситуация взаимной блокировки
Взаимная блокировка
(тупик, клинч, дедлок) – ситуация, когда,
когда несколько процессов борются за
ресурсы, и ни один из них не может
завершить начатую работу.
П
Рис.
2.12 a) фрагменты программ А и В, разделяющих
принтер и диск; б) взаимная блокировка
(клинч); в) очередь к разделяемому диску;
г)
независимое использование ресурсов
В зависимости от соотношения скоростей процессов, они могут либо совершенно независимо использовать разделяемые ресурсы (г), либо образовывать очереди к разделяемым ресурсам (в), либо взаимно блокировать друг друга (б). Тупиковые ситуации надо отличать от простых очередей, хотя и те и другие возникают при совместном использовании ресурсов и внешне выглядят похоже: процесс приостанавливается и ждет освобождения ресурса. Однако очередь - это нормальное явление, неотъемлемый признак высокого коэффициента использования ресурсов при случайном поступлении запросов. Она возникает тогда, когда ресурс недоступен в данный момент, но через некоторое время он освобождается, и процесс продолжает свое выполнение. Тупик же, что видно из его названия, является в некотором роде неразрешимой ситуацией.
В рассмотренных примерах тупик был образован двумя процессами, но взаимно блокировать друг друга могут и большее число процессов.
Проблема тупиков включает в себя следующие задачи:
предотвращение тупиков,
распознавание тупиков,
восстановление системы после тупиков.
Условия, необходимые для возникновения взаимоблокировки:
Условие взаимного исключения - в какой-то момент времени, ресурс занят только одним процессом или свободен.
Условие удержания и ожидания - процесс, удерживающий ресурс может запрашивать новые ресурсы.
Условие отсутствия принудительной выгрузки ресурса.
Условие циклического ожидания - должна существовать круговая последовательность из процессов, каждый, из которого ждет доступа к ресурсу, удерживаемому следующим членом последовательности.
2.5.2.2.2 Моделирование взаимоблокировок
Моделирование тупиков с помощью графов.
Рис. 2.13Условные обозначения
На такой модели очень легко увидетьть, возникает ли взаимоблокировка. Если есть цикл, значит, есть и взаимоблокировка.
Рассмотрим пример:
три процесса A,B,C
три ресурса R,S,T
Последовательное выполнение процессов, взаимоблокировка не возникает
Рассмотрим циклический алгоритм:
три процесса A,B,C
три ресурса R, S, T
Рис. 2.14Возникает взаимоблокировка
Рассмотрим тот же самый случай, но допустим, что система, зная о предстоящей взаимоблокировке, заблокирует процесс B.
Рис. 2.15Взаимоблокировка не возникает