- •5. Взаимодействие и синхронизация процессов
- •5.1. Взаимодействие процессов (Лекция 9)
- •5.1.1. Способы взаимодействия процессов
- •5.1.1.1. Проблема синхронизации
- •5.1.1.2. Критические секции, средства коммуникации процессов
- •5.1.1.3. Способы взаимодействия процессов, понятия взаимного исключения, взаимной блокировки, голодания процессов
- •5.1.2. Взаимные исключения
- •5.1.2.1. Требования к взаимным исключениям
- •5.1.2.2. Алгоритмы Деккера и Петерсона реализации взаимного исключения
- •5.2. Семафоры и другие средства синхронизации (Лекция 10)
- •5.2.1. Синхронизация задач с помощью семафоров
- •5.2.1.1. Семафоры Дейкстры
- •5.2.1.2. Условная синхронизация с помощью семафоров
- •5.2.1.3. Планирование очереди процессов, ожидающих у семафора
- •5.2.2. Другие средства синхронизации: счётчики событий, секвенсоры, мониторы, передача сообщений
- •5.2.2.1. Счетчики событий и секвенсоры
- •5.2.2.2. Объекты синхронизации, регламентированные posix
- •5.2.2.3. Мониторы Хоара
- •5.2.2.4. Передача сообщений
- •5.3. Классические проблемы межпроцессного взаимодействия (Лекция 11)
- •5.3.1. Проблема "обедающих философов"
- •5.3.1.1. Описание проблемы "обедающих философов"
- •5.3.1.2. Решение (алгоритм) проблемы "обедающих философов"
- •5.3.2. Проблема "спящего брадобрея" (задача о парикмахерской)
- •5.3.2.1. Описание задачи о парикмахерской
- •5.3.2.2. Решение (алгоритм) задачи о парикмахерской
- •5.3.3. Задача "читателей и писателей"
- •5.3.3.1. Описание задачи читателей и писателей
- •5.3.3.2. Решение (алгоритм) задачи читателей и писателей
- •5.4. Взаимоблокировки (Лекция 12)
- •5.4.1. Возникновение взаимоблокировок
- •5.4.1.1. Проблема взаимоблокировок
- •5.4.2. Устранение взаимоблокировок
- •5.4.2.1. Запрещение запуска процесса
- •5.4.2.2. Запрет выделения ресурса
- •5.4.3. Обнаружение взаимоблокировок
- •5.4.3.1. Алгоритм обнаружения взаимоблокировок
- •5.4.3.2. Действия, выполняемые после обнаружения взаимоблокировки
5.4.2. Устранение взаимоблокировок
5.4.2.1. Запрещение запуска процесса
Рассмотрим n процессов иm различных типов ресурсов. Определим следующие векторы и матрицы:
Ресурс = (R1, R2, …, Rm) – общее количество каждого ресурса в системе;
Доступность = (V1, V2, …, Vm) – общее количество каждого ресурса, не выделенного процессам;
Требования = – запросы каждого процесса на каждый из ресурсов;
Распределение = – текущее распределение ресурсов.
Матрица требований, в которой каждая строка описывает один из процессов, указывает максимальные требования каждого процесса к разным ресурсам, т.е. Сij – требование процессомi ресурсаj. Эта информация объявляется заранее.Aij – текущее количество ресурсаj, выделенное процессуi.
Должны выполняться следующие соотношения:
1. .
2. , ни один процесс не может потребовать ресурс, превышающий его общее количество в системе.
3. , ни один процесс не может получить ресурсов больше, чем их было затребовано им.
Новый процесс Pn+1 запускается, только если
.
Эта стратегия не является оптимальной, так как предполагает худшее, что все процессы предъявляют максимальные требования одновременно.
5.4.2.2. Запрет выделения ресурса
Данная стратегия известна как алгоритм банкира. Пусть существует система с фиксированным количеством процессов и фиксированным количеством ресурсов. Состояние системы представляет собой текущее распределение ресурсов по процессам. Следовательно, состояние представляется как два вектора и две матрицы (см. п. 5.4.2.1).
Безопасным называется такое состояние, в котором имеется хотя бы одна последовательность, не приводящая к взаимоблокировке (т.е. все процессы могут быть выполнены до завершения). Состояние, не являющееся безопасным, называется опасным.
Ниже алгоритм рассмотрен на примере (рис. 7).
Рис. 7
Общее количество ресурсов R1, R2, R3 соответственно 9, 3,6 единиц. В результате сделанного к этому моменту распределения ресурсов по процессам доступными оказались по одной единице ресурсовR2 иR3. Безопасно ли это состояние? Для ответа на этот вопрос нужно задаться другим вопросом: может ли какой-либо из четырех процессов быть выполнен до завершения при данных доступных ресурсах. ДляP1 – невозможно, но если выделить процессуP2одну единицуR3, он может быть завершен. Пусть после завершенияP2 выполняются требованияP1, затемP3 иP4. Следовательно, исходное состояние – безопасное.
Описанная концепция автоматически приводит к стратегии устранения взаимоблокировок, которая гарантирует, что система процессов и ресурсов всегда находится в безопасном состоянии. Когда процесс делает запрос к некоторому множеству ресурсов, предполагается, что запрос удовлетворен, после чего определяется, является ли обновленное состояние безопасным. С другой стороны, опасное состояние не является взаимоблокировкой. Оно лишь может привести к ней. Таким образом, описанная стратегия не занимается точным предсказанием взаимоблокировок, а предвидит их возможность и устраняет её.
Использование метода устранения взаимоблокировок требует выполнения следующих условий:
1) Должны быть заранее указаны максимальные требования каждого процесса к каждому виду ресурса;
2) Рассмотренные процессы должны быть независимы, т.е. порядок их выполнения не должен ограничиваться какими-либо требованиями синхронизации;
3) Должно иметься фиксированное количество распределяемых ресурсов;
4) Ни один процесс не должен завершаться в состоянии захвата ресурса.