![]() КАТЕГОРИИ:
АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
ВзаимоблокировкаВ компьютерных системах существует большое количество ресурсов, каждый из которых в конкретный момент времени может использоваться только одним процессом. В качестве таких примеров можно привести принтеры, накопители на магнитной ленте и элементы внутренних таблиц системы. Появление двух процессов, одновременно передающих данные на принтер, приведет к печати бессмысленного набора символов. Наличие двух процессов, использующих один и тот же элемент таблицы файловой системы, обязательно станет причиной разрушения файловой системы. Поэтому все операционные системы обладают способностью предоставлять процессу эксклюзивный доступ (по крайней мере, временный) к определенным ресурсам. Часто для выполнения прикладных задач процесс нуждается в исключительном доступе не к одному, а к нескольким ресурсам.
В сложно организованной системе с большим количеством ресурсов и одновременно исполняемых процессов взаимоблокировка весьма вероятна. При этом под ресурсами (понятие ресурса было введено в первом параграфе) можно понимать, в том числе, и сами процессы. Обобщая, ресурсом можно назвать любой объект, к которому может получить доступ процесс. Ресурсы можно разбить на два класса:
Справедливости ради заметим, что взаимная блокировка может возникнуть лишь на втором классе ресурсов, поскольку если в тупиковой ситуации задействованы ресурсы первого класса, ситуацию можно разрешить, принудительно выгрузив ресурс, позаботившись при этом о его дальнейшем восстановлении.
Так как все процессы находятся в состоянии ожидания, ни один из них не будет причиной какого-либо события, которое могло бы активировать любой другой процесс в группе, и все процессы продолжают ждать до бесконечности. В этой модели мы предполагаем, что процессы имеют только один поток и что нет прерываний, способных активизировать заблокированный процесс. Условие отсутствия прерываний необходимо, чтобы предотвратить ситуацию, когда тот или иной заблокированный процесс активизируется, скажем, по сигналу тревоги и затем приводит к событию, которое освободит другие процессы в группе. В большинстве случаев событием, которого ждет каждый процесс, является освобождение какого-либо ресурса, в данный момент занятого другим участником группы. Другими словами, каждый участник в группе процессов, зашедших в тупик, ждет доступа к ресурсу, принадлежащему заблокированному процессу. Ни один из процессов не может работать, ни один из них не может освободить какой-либо ресурс и ни один из них не может возобновиться. Количество процессов и количество и вид ресурсов, имеющихся и запрашиваемых, здесь не важны. Результат остается тем же самым для любого вида ресурсов, аппаратных и программных. Необходимые условия возникновения взаимоблокировки — условия Коффмана (Coffman):
Указанные условия являются необходимыми. То есть, если хоть одно из них не выполняется, то взаимоблокировка никогда не возникнет. Достаточность не имеет места быть: если выполняются все четыре условия, взаимоблокировка может и не произойти, например, если в системе нет процессов, претендующих на одновременное использование одних и тех же ресурсов. Следует отметить, что каждое условие относится к правилам, установленным в данной конкретной операционной системе. К сожалению, практически невозможно спроектировать операционную систему так, чтобы полностью исключить хоть одно из условий Коффмана заранее. Однако существуют варианты разрушения взаимоблокировок, основанные на принудительном исключении какого-либо из этих условий. Отслеживать возникновение взаимоблокировок удобно на диаграммах Холта (Holt). Диаграмма Холта представляет собой направленный граф[10], имеющий два типа узлов: процессы (показываются кружочками) и ресурсы (показываются квадратиками). Тот факт, что ресурс получен процессом и в данный момент занят этим процессом, указывается ребром (стрелкой) от ресурса к процессу. Ребро, направленное от процесса, к ресурсу, означает, что процесс в данный момент блокирован и находится в состоянии ожидания доступа к соответствующему ресурсу.
В операционных системах реализуются следующие стратегии обработки взаимоблокировок (возможных или произошедших): 1. Игнорирование. Не предполагается что-либо делать для предотвращения взаимоблокировки или её разрушения, если она возникла. 2. Обнаружение и восстановление. Если взаимоблокировка произошла, обнаружить её и предпринять какие-либо действия. 3. Динамическое избежание. Распределять ресурсы системы так, чтобы избежать взаимоблокировок. Всякий раз решение о распределении принимается исходя из текущего состояния системы. 4. Предотвращение. Предполагает структурное опровержение одного из четырёх правил Коффмана.
|