Ответ 2
Тупик:
Тупик - это ситуация, когда два или более конкурирующих действия ждут другого, и, следовательно, никогда не будет. Он также может быть определен как набор заблокированных процессов, каждый из которых содержит ресурс и ожидает получения ресурса, хранящегося другим процессом в наборе.
Например, если есть система с двумя дисками. Если есть два процесса P1 и P2, каждый из них имеет один дисковод и каждый из них нуждается в другом, то возникает ситуация тупика.
Следующие условия будут выполняться одновременно в случае тупика:
• Взаимное исключение: только один процесс за раз может использовать ресурс
• Удержание и ожидание: процесс, содержащий хотя бы один ресурс, ожидает получения дополнительных ресурсов, удерживаемых другими процессами.
• Отсутствие предохранения: ресурс может быть освобожден только добровольно посредством процесса, выполняющего его, после того, как этот процесс завершил свою задачу.
• Циклическое ожидание: существует множество {P0, P1,..., Pn} ожидающих процессов, так что P0 ждет ресурса, который удерживается P1, P1 ждет ресурса, который удерживается P2,..., Pn-1 ждет ресурса, который удерживается Pn, а Pn ждет ресурса, который удерживается P0.
Различия между предотвращением, предотвращением и обнаружением тупиков заключаются в следующем:
Профилактика
• Цель состоит в том, чтобы гарантировать, что хотя бы одно из необходимых условий для тупика никогда не может быть выполнено.
• Предотвращение тупика часто невозможно реализовать.
• Система не требует дополнительной априорной информации относительно общего потенциального использования каждого ресурса для каждого процесса.
• Для того, чтобы система могла предотвратить условие взаимоблокировки, ему не нужно знать все детали всех имеющихся ресурсов, доступных и запрошенных.
• Методы предотвращения блокировки включают в себя неблокирующие алгоритмы синхронизации, сериализацию токенов, алгоритм Дейкстраса и т.д.
• Стратегия распределения ресурсов для предотвращения тупиковой ситуации является консервативной, она в соответствии с ресурсами.
• Все ресурсы запрашиваются сразу.
• В некоторых случаях вытеснения более чем часто необходимы.
Избежание:
• Цель предотвращения взаимоблокировки заключается в том, что система не должна входить в небезопасное состояние.
• Уклонение от тупика часто невозможно реализовать.
• Система требует дополнительной априорной информации об общем потенциальном использовании каждого ресурса для каждого процесса.
• Для того, чтобы система могла определить, будет ли следующее состояние безопасным или небезопасным, оно должно заранее знать в любое время количество и тип всех имеющихся ресурсов, доступных и запрошенных.
• Методы избегания тупика включают алгоритм банкиров, Wait/Die, Wound/Wait и т.д.
• Стратегия распределения ресурсов для избежания взаимоблокировки выбирается на полпути между обнаружением и предотвращением.
• Необходимо манипулировать до тех пор, пока не будет найден один безопасный путь.
• Претензии нет.
Обнаружение:
• Цель состоит в том, чтобы обнаружить тупик после его возникновения или до его возникновения.
• Обнаружение возможности тупика до его возникновения намного сложнее и, по сути, вообще неразрешимо. Однако в определенных средах, используя специальные средства блокировки ресурсов, обнаружение взаимоблокировки может быть разрешимым.
• Система не требует дополнительной априорной информации, касающейся общего потенциального использования каждого ресурса для каждого процесса во всех случаях.
• Для того, чтобы система обнаружила условие взаимоблокировки, ему не нужно знать все детали всех имеющихся ресурсов, доступных и запрошенных.
• Метод обнаружения взаимоблокировки включает, но не ограничивается, проверку модели. Этот подход создает модель конечного состояния, на которой он выполняет анализ прогресса и находит все возможные терминальные множества в модели.
• Стратегия распределения ресурсов для обнаружения тупика очень либеральна. Ресурсы предоставляются по запросу.
• Необходимо периодически вызывать проверку для тупика.
• Наблюдается преемственность.