Системное программное обеспечение Лекция 8 Тупики Тупик Тупик (deadlock) – множество заблокированных процессов, каждый из которых владеет некоторым ресурсом и ожидает ресурса, которым владеет какой-либо другой процесс из этого множества. Пример тупика: Пусть P1 и P2 – процессы, а R1 и R2 – ресурсы. 2 Модель системы 3 Условия возникновения тупиков 4 Граф распределения ресурсов 5 6 Поиск тупиков по графу 7 Вводы 8 Направления борьбы с тупиками 9 Игнорирование проблемы тупиков 10 Способы предотвращения тупиков 11 Безопасное состояние системы 12 Стратегия безопасного выделения ресурсов 13 Утверждения о безопасных состояниях 14 Алгоритм банкира 15 Структуры данных для алгоритма банкира 16 Алгоритм безопасности 17 Алгоритм запроса ресурсов 18 Пример использования алгоритма банкира Allocation Max Available A B C A B C A B C P0 0 1 0 7 5 3 3 3 2 P1 2 0 0 3 2 2 P2 3 0 P3 2 1 P4 0 0 Need A B C P0 7 4 3 2 9 0 2 P1 1 2 2 1 P2 6 0 0 P3 0 1 1 P4 4 3 1 2 2 2 2 4 3 3 19 Условия к алгоритму банкира 20 Предотвращение тупиков за счет нарушения условий возникновения тупиков 21 Нарушение условия взаимоисключения 22 Нарушение условия ожидания дополнительных ресурсов 23 Нарушение принципа отсутствия перераспределения 24 Нарушение условия кругового ожидания 25 Обнаружение тупиков 26 Граф wait-for граф wait-for: вершины соответствуют процессам, и дуга проводится из вершины Pi в вершину Pj, если процесс Pi ожидает процесса Pj . 27 Описание переменных 28 Алгоритм обнаружения тупиков 29 Пример Allocation P0 P1 P2 P3 P4 Request A B C A B C 0 1 0 0 0 0 2 0 0 2 0 2 3 0 3 0 0 0 2 1 1 1 0 0 0 0 2 0 0 2 Request A B C P0 0 0 0 P1 2 0 1 P2 0 0 1 P3 1 0 0 P4 0 0 2 30 Восстановление после тупика 31 Порядок прекращаемых процессов 32 Желаемые действия при «откате» 33