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

2.3. Проблема тупика

Проблема тупика - одна из наиболее сложных проблем, решаемых при разработке программных систем в мультипрограммной среде.

Говорят, что процесс находится в состоянии тупика (дедлока или клинча), если он ожидает некоторого события, которое не может произойти без вмешательства извне, то есть если не будут приняты “чрезвычайные меры”. Например, процесс оказывается заблокированным в результате таких запросов на ресурсы, которые не могут быть удовлетворены, если не перераспределить принудительно ресурсы, “отобрав” их у других процессов, или не снять с выполнения эти процессы до нормального их завершения, процесс может быть также заблокирован в результате ожидания сигнала, который не может быть ему передан другим процессом.

Тупик может быть результатом ошибки при разработке программ для выполнения их в многопрограммной среде с динамическим распределением ресурсов.

Особенно большое значение решение проблемы тупика приобретает в системах реального времени, в вычислительных сетях.

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

  • предотвращение тупиков;

  • обход тупиков;

  • распознавание тупиков;

  • вывод системы из тупика и восстановление ее работоспособности.

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

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

Задачи предотвращения и обхода тупиков иногда объединяют и рассматривают как единственную задачу предотвращения тупика. В действительности для решения этих задач используются разные методы: решение задачи предотвращения тупика основывается на знании необходимых условий возникновения тупика в системе, а решение задачи обхода тупика базируется на прогнозировании поведения системы путем распознавания возможности возникновения тупика на основе определения наличия в системе достаточных условий его возникновения.

Прогнозирование поведения системы при решении задачи обхода тупика основано на тех же методах, что и решение задачи распознавания тупика.

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

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

2.3.1. Определение тупика

Более точное определение тупика требует использования математической модели ВС.

Определим систему как пару

= { , },

где  = {S1 , S2 , ...} - множество состояний системы,  = { p1 , p2 , ...} - множество процессов, протекающих в системе.

В системе, которая определяется таким образом, процесс pi   представляет собой частичную функцию, отображающую состояния системы в непустые подмножества ее же состояний:

pi :   {  }.

Процесс pi может быть определен не для всех состояний.

Если pi определен на состоянии Sl, то pi(Sl) - область его значений, то есть процесс pi может изменить состояние системы из Sl в состояние Sk  pi(Sl ). Для перевода системы из состояния Sl в состояние Sk процесс должен выполнить некоторую операцию. Для обозначения перевода процессом pi системы  из состояния Sl в состояние Sk введем обозначение

pi

Sl  Sk.

Состояние системы может измениться только при выполнении процессом одной из следующих операций:

  • запрос на ресурс;

  • приобретение ресурса;

  • освобождение ресурса.

Введем еще одно обозначение: нотация

*

Sl  Sn

означает

(a) Sl = Sn или

pi

(b)  pi : Sl  Sn или

pi *

(c)  Sk &  pi : (Sl  Sk) & (Sk  Sn).

То есть система может быть переведена из состояния Sl в состояние Sn посредством h операций (h  0), которые могут быть выполнены m различными процессами (m  0).

Используя введенные обозначения, определим состояние тупика.

Процесс pi заблокирован в состоянии Sl, если не существует ни одного такого состояния Sk , что

pi

Sl  Sk .

То есть заблокированный процесс не может выполнить никакой операции по изменению состояния системы.

Процесс pi находится в тупике в состоянии Sl, если для любого состояния Sk, такого что

*

Sl  Sk

процесс pi будет заблокирован в этом состоянии. То есть процесс находится в тупике в состоянии Sl, если он заблокирован в этом состоянии и останется заблокированным в любом другом состоянии Sk, в которое система может перейти из этого состояния Sl при выполнении любых операций любыми другими процессами (процесс останется заблокированным, как бы ни изменялось состояние системы в будущем).

Состояние Sl называется тупиковым, если существует процесс pi, находящийся в тупике в этом состоянии.

Состояние Sl называется безопасным, если любое состояние Sk, такое что

*

Sl  Sk,

не будет состоянием тупика.

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

Рассмотрим пример системы, в которой есть как тупиковое, так и безопасное состояние. Пусть  = {S1, S2, S3, S4, S5} - множество состояний системы,  = {p1, p2} - множество выполняющихся в ней процессов (рис.2.9).

p1 p2

p2 p1

S 1 S2 p1 S3 S4 p1 S5

Р ис.2.9. Пример системы с тупиковым и безопасным состоянием

Состояние S1 является состоянием тупика. Состояния S4 и S5 являются безопасными состояниями. Состояния S2 и S3 не являются безопасными состояниями, но не являются и тупиковыми.