Понедельник, Июль 5th, 2010

Операционные системы, среды и оболочки

? Пусть имеется три процесса Пр1, Пр2 и ПрЗ, которые вырабатывают сообщения Ml, M2 и МЗ, соответственно. Эти сообщения представляют собой ресурсы типа CR. Пусть процесс Пр1 является потребителем сообщения МЗ, процесс Пр2 должен получить сообщение Ml, а ПрЗ — сообщение М2 от процесса Пр2. Таким образом, каждый из этих трех процессов является и поставщиком, и потребителем одновременно, и вместе они образуют кольцевую систему (рис. 7.2) передачи сообщений через почтовые ящики (ПЯ).
? Если связь с помощью этих сообщений со стороны каждого процесса устанавлива­ется программным кодом в порядке, когда они сначала посылают сообщение следующему процессу, а затем ожидают от предыдущего, то никаких проблем не возникает. Но перестановка этих двух процедур (сначала — ожидают, затем — посылают свое) в каждом из процессов вызывает тупик.

Пример тупика на ресурсах типа CR и SR
? Пусть процесс Пр1 должен обменяться сообщениями с процессом Пр2 и каждый из них запрашивает ресурс R, причем Пр1 требует три единицы этого ресурса для своей работы, а Пр2 — две единицы и только на время обработки сообщения. Всего же имеется только четыре единицы ресурса R. Запрос и освобождение ресурса можно реализовать через соответствующий монитор с процедурами запроса N единиц ресурса R, и освобождения (возврата) N единиц ресурса R. Обмен сообщениями осуществляется через почтовый ящик MB.

? Эти два процесса всегда будут попадать в состояние тупика. Процесс Пр2, выполняясь первым, сначала будет ожидать сообщения от процесса Пр1, затем будет заблокирован при запросе ресурса R, часть которого уже отдана процессу Пр1.
? Процесс Пр1, завладев частью ресурса R, будет заблокирован ожиданием ответа от Пр2, которого никогда не получит, так как для этого Пр2 нужно получить ресурс R, находящийся в распоряжении Пр1.
? Тупика можно избежать лишь при условии, что на время ожидания ответа от Пр2 процесс Пр1 отдаст хотя бы одну из единиц ресурса R, которыми он владеет.
? В данном примере, как и в предыдущем, причиной тупика являются ошибки программирования.
Пример тупика на ресурсах типа SR – не рассматриваем, но возможен.
? Для возникновения тупиковой ситуации необходимо одновременное выполнение следующих четырех условий:
? взаимного исключения, при котором процессы осуществляют монопольный доступ к ресурсам;
? ожидания, при котором процесс, запросивший ресурс, ждет до тех пор, пока запрос не будет удовлетворен, при этом удерживая ранее полученные ресурсы;
? отсутствия перераспределения, при котором ресурсы нельзя отобрать у процесса, если они ему уже выделены;
? кругового ожидания, при котором существует замкнутая цепь процессов, каждый из которых ждет ресурс, удерживаемый его предшественником в цепи.

38. Методы борьбы с тупиками
? Борьба с тупиковыми ситуациями основывается на одной из трех стратегий:
? предотвращение тупика;
? обход тупика;
? распознавание тупика с последующим восстановлением.
Предотвращение тупиков

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37

Категория: Лекции