The design of the UNIX Operating System 34 страница



 

 

7. Лекция: Тупики

 

В лекции рассматриваются вопросы взаимоблокировок, тупиковых ситуаций и "зависаний" системы

 

Введение

 

В предыдущих лекциях мы рассматривали способы синхронизации процессов, которые позволяют про-цессам успешно кооперироваться. Однако в некоторых случаях могут возникнуть непредвиденные за-труднения. Предположим, что несколько процессов конкурируют за обладание конечным числом ресур-сов. Если запрашиваемый процессом ресурс недоступен, ОС переводит данный процесс в состояние ожидания. В случае когда требуемый ресурс удерживается другим ожидающим процессом, первый про-цесс не сможет сменить свое состояние. Такая ситуация называется тупиком (deadlock). Говорят, что в мультипрограммной системе процесс находится в состоянии тупика, если он ожидает события, которое никогда не произойдет. Системная тупиковая ситуация, или "зависание системы", является следствием того, что один или более процессов находятся в состоянии тупика. Иногда подобные ситуации называют взаимоблокировками. В общем случае проблема тупиков эффективного решения не имеет.

 

Рассмотрим пример. Предположим, что два процесса осуществляют вывод с ленты на принтер. Один из них успел монополизировать ленту и претендует на принтер, а другой наоборот. После этого оба процес-са оказываются заблокированными в ожидании второго ресурса (см. рис. 7.1).


 

 

Рис. 7.1. Пример тупиковой ситуации


Основы операционных систем 65

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

 

Выше приведен пример взаимоблокировки, возникающей при работе с так называемыми выделенными устройствами. Тупики, однако, могут иметь место и в других ситуациях. Hапример, в системах управле - ния базами данных записи могут быть локализованы процессами, чтобы избежать состояния гонок (см. лекцию 5 "Алгоритмы синхронизации"). В этом случае может получиться так, что один из процессов за-блокировал записи, необходимые другому процессу, и наоборот. Таким образом, тупики могут иметь ме-сто как на аппаратных, так и на программных ресурсах.

 

Тупики также могут быть вызваны ошибками программирования. Например, процесс может напрасно ждать открытия семафора, потому что в некорректно написанном приложении эту операцию забыли пре-дусмотреть . Другой причиной бесконечного ожидания может быть дискриминационная политика по от-ношению к некоторым процессам. Однако чаще всего событие , которого ждет процесс в тупиковой си-туации, – освобождение ресурса, поэтому в дальнейшем будут рассмотрены методы борьбы с тупиками ресурсного типа.

 

Ресурсами могут быть как устройства, так и данные. Hекоторые ресурсы допускают разделение между процессами, то есть являются разделяемыми ресурсами. Например, память, процессор, диски коллек-тивно используются процессами. Другие не допускают разделения, то есть являются выделенными, на-пример лентопротяжное устройство. К взаимоблокировке может привести использование как выделен-ных, так и разделяемых ресурсов. Например , чтение с разделяемого диска может одновременно осущест-вляться несколькими процессами, тогда как запись предполагает исключительный доступ к данным на диске. Можно считать, что часть диска, куда происходит запись , выделена конкретному процессу. По-этому в дальнейшем мы будем исходить из предположения, что тупики связаны с выделенными ресурса-ми , то есть тупики возникают, когда процессу предоставляется эксклюзивный доступ к устройствам, файлам и другим ресурсам.


Дата добавления: 2021-01-21; просмотров: 112; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!