Тупики.


ЛЕКЦИЯ №8

4. Семафор – контролирует доступность нескольких однотипных ресурсов.

Семафор открыт, если счетчик > 0 и закрыт, если 0.

Функциональная спецификация:

- захватить семафор(если счетчик > 0, то он уменьшится на единицу, если счетчик = 0 – процесс находится в состоянии ожидания до тех пор, пока счетчик не стане равен 1 и, отнимая ее, продолжит работу)

- освободить семафор

 

Тупик(взаимная блокировка) – это ситуация, когда два или более процессов не могут продолжить свое выполнение без внешнего вмешательства.

Пример:

Для того, что бы в системе мог быть тупик, в обязательном порядке должны быть выполнены следующие условия:

1) в системе должен быть уникальные ресурсы

2) операционная система не может забрать у процесса ресурс, которым он владеет

3) владея уникальными ресурсами, процесс продолжает запрашивать другие ресурсы

4) в системе должен существовать цикл(на графе) из процессов, требующих ресурсов друг у друга

 

Что можно делать с тупиками:

1. избавиться от тупиков вообще(нарушить условия)

убрать циклы

заставить процесс запрашивать все и сразу

можно нарушить со стороны процесса

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

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

2. Пытаться обойти тупик(потенциально возможно)

3. Тупик может быть, осталось только из него выйти.

если тупик есть, то пусть будет

если тупик есть в системе, то существует цикл. Находим линейный набор процессов, которые можно «убить» и все хорошо

использовать механизм контрольных точек.