К Т П           План занятия                                                              1                                           Страницы  | 1 | | 2 | | 3 | | 4 | | 5 | | 6 | | 7 | | 8 | | 9 |

4. Восстановление заблокированного процесса

После обнаружения тупика должно быть выполнено восстановление процесса, которое заключается в разблокировании потоков этого процесса. Существуют три подхода к восстановлению заблокированного процесса:
- прекращение работы заблокированных потоков (termination);
- перераспределение ресурсов (preemption);
- откат на контрольную точку (rollback).

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

Если это возможно, то лучше всего разблокировать процесс путем перераспределения ресурсов между потоками этого процесса. То есть забрать ресурс у одного из заблокированных потоков и передать его другому заблокированному потоку, который ждет этот ресурс. В этом случае все потоки, за исключением одного, продолжат свою работу. Кроме того, поток, у которого забрали ресурс, также продолжит свою работу, после того как этот ресурс станет свободным. Этот подход является самым лучшим с концептуальной точки зрения, но он не всегда может быть реализован на практике по той причине, что не каждый ресурс является перераспределяемым.

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

Для реализации этого подхода в программе устанавливаются такие точки, в которых запоминается состояние контекста потока. Эти точки называются контрольными точками потока. Изменение контекста потока между двумя контрольными точками называется транзакцией (tranzaction). Транзакция может быть зафиксирована или отменена. Отмена транзакции называется откатом (rollback). При откате контекст потока возвращается на контрольную точку, в которой не было тупика. При этом выполняется освобождение ресурсов, захваченных после прохождения контрольной точки, и восстановление контекста потока на момент прохождения контрольной точки. Если транзакция зафиксирована, то откат невозможен. Очевидно, что после выполнения отката одного из заблокированных потоков, остальные заблокированные потоки получат доступ к освобожденным этими потоками ресурсам и, следовательно, будут разблокированы.

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

 

 


Предыдущая        В начало страницы       Следующая
4