Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Учебное пособие 1461

.pdf
Скачиваний:
7
Добавлен:
30.04.2022
Размер:
1.19 Mб
Скачать

While П2хочетвойти do

If избранныйпроцесс=2 then

Begin

П1хочетвойти:=ложь;

While

избранныйпроцесс=2 do;

П1хочетвойти:=истина

End;

Критический участок 1; Избранныйпроцесс:=2; П1хочетвойти:=ложь; Прочие операторы 1;

End;

End;

Begin

П1хочетвойти:=ложь; П2хочетвойти:=ложь; Ихбранныйпроцесс:=1;

Parbegin

Процесс1; Процесс2;

Parend

End.

2.2.3. Аппаратная реализация взаимоисключения

Главным фактором является наличие одной аппаратной команды, которая осуществляет чтение переменной, запись ее значения в область сохранения и установку нужного конкретного значения этой переменной. Подобная команда, обычно называемая TestAndSet, после запуска выполняет все

41

эти действия до конца без прерываний. Неделимая команда TestAndSet(a,b) читает значение логической переменной b, копирует его в а, а затем устанавливает для b значение “истина”.

Program testandset;

Var активный : boolean; Procedure процесс1;

Var первомувходитьнельзя : boolean; Begin

While истина do Begin

первомувхнельзя:=истина;

While первомувхнельзя do Testandset(первомувхнельзя, активный);

Критическийучастокодин; Активный:=ложь; Прочиеоператоры 1;

End;

End; Begin

Активный:=ложь;

Parbegin

Процесс1; Процесс2;

Parebd End.

2.3. Тупиковые ситуации

Процесс находится в состоянии тупика, если он ожидает события, которое никогда не произойдет. “Зависание” системы

– ситуация, когда один или более процессов находятся в состоянии тупика.

42

Операционная система выполняет по преимуществу функции администратора ресурсов. Она отвечает за распределение обширных наборов ресурсов различных типов. Рассмотрим ресурсы, которые являются “оперативноперераспределяемыми” такие как центральный процессор и основная память. В вычислительной машине самым динамическим ресурсом является центральный процессор. ЦП должен работать в режиме быстрого переключения, обслуживая большое число конкурирующих процессов, чтобы все они могли двигаться в приемлемой скоростью. Если конкретный процесс достигает точки, когда он не может эффективно использовать ЦП, то право управления центральным процессором отбирается у этого процесса и предоставляется другому. Таким образом, организация динамического переключения ресурсов является исключительно важным фактором для обеспечения работы мультипрограммных вычислительных машин.

Четыре необходимых условия возникновения тупика.

1.Процессы требуют предоставления им права монопольного управления ресурсами, которые им выделяются (условие взаимоисключения).

2.Процессы удерживают за собой ресурсы, уже выделенные им, ожидая в то же время дополнительных ресурсов (условие ожидания ресурсов).

3.Ресурсы нельзя отобрать у процессов, удерживающих их, пока эти ресурсы не будут использованы для завершения работы (условие неперераспределяемости).

4.Существует кольцевая цепь процессов, в которой каждый процесс удерживает за собой один или более ресурсов, требующихся следующему процессу цепи (условие кругового ожидания).

43

2.3.1. Предотвращение тупиковых ситуаций

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

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

Стратегические принципы.

1.Каждый процесс должен запрашивать все требуемые ему ресурсы сразу, причем не может начать выполняться, пока все они не будут ему предоставлены.

2.Если процесс, удерживающий определенные ресурсы, получает отказ в удовлетворении запроса на дополнительные ресурсы, то он должен освободить свои первоначальные ресурсы и при необходимости запросить их снова вместе с дополнительными.

3.Введение линейной упорядоченности по типам ресурсов для всех процессов; другими словами, если процессу выделены ресурсы данного типа, в дальнейшем он может запросить только ресурсы более далеких по порядку типов.

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

44

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

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

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

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

45

2.3.2. Обход тупиковых ситуаций

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

Наиболее известным алгоритмом обхода тупиковых ситуаций является алгоритм банкира. (имитирует действия банкира, который располагая определенным источником капитала, выдает ссуды и принимает платежи).

Рассмотрим проблему распределения некоторого количества t идентичных ресурсов между некоторым фиксированным числом процессов u. Каждый процесс заранее указывает максимальное число ресурсов, которое ему потребуется. ОС пронимает запрос процесса в случае, если максимальная потребность этого процесса в устройствах не превышает t. Процесс может занимать или освобождать ресурсы по одному. Возможно, что иногда процессу придется ждать выделения дополнительных ресурсов, однако ОС гарантирует, что ожидание будет конечным. Если ОС в состоянии удовлетворить максимальную потребность процесса в ресурсах, то процесс гарантирует, что эти ресурсы после использования будут возвращены ОС в течение конечного периода времени. Текущее состояние называется надежным если ОС может обеспечить всем текущим процессам завершение их заданий в течение конечного времени. В противном случае состояние ненадежное. Алгоритм банкира говорит о том, что выделять ресурсы процессам можно только в случае, когда после очередного выделения состояние системы остается надежным (табл. 1). Ненадежное состояние –

46

состояние, которое может со временем привести к тупику

(табл. 2).

 

 

 

Таблица 1

 

Пример надежного состояния

 

Текущее

 

Макс. потребность

 

количество

 

 

 

выделенных

 

 

 

устройств

 

 

Пользователь 1

1

 

4

Пользователь 2

4

 

6

Пользователь 3

5

 

8

Резерв

 

2

 

Имеется 12 одинаковых устройств. Это состояние надежное, т.к. дает возможность всем трем пользователям закончить работу. Если 2 резервных устройства дать пользователю 2, то он сможет завершить свою работу и освободить свои 6 устройств.

 

 

 

Таблица 2

 

Пример ненадежного состояния

 

Текущее количество

 

Макс.

 

 

выделенных

 

потребность

 

 

устройств

 

 

 

Пользователь 1

8

 

10

 

 

 

 

 

 

Пользователь 2

2

 

5

 

Пользователь 3

1

 

3

 

 

 

 

 

 

Резерв

 

1

 

 

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

47

состояние” – не предполагает о том, что обязательно возникнет тупиковая ситуация, а говорит о том, что в случае некоторой неблагоприятной последовательности событий система может зайти в тупик.

Распределение ресурсов согласно алгоритму банкира

Распределение ресурсов согласно алгоритму банкира осуществляется при выполнении условия “взаимоисключения”, “ожидания дополнительных ресурсов” и “неперераспределяемости”. То есть процессы могут претендовать на монопольное использование ресурсов, которые им требуются. Процессам реально разрешается удерживать за собой ресурсы, запрашивая и ожидая выделения дополнительных ресурсов, причем система удовлетворяет только те запросы, при которых ее состояние остается надежным. Запрос пользователя, приводящий к переходу системы в ненадежное состояние, откладывается до момента, когда его все же можно будет выполнить.

Недостатки алгоритма банкира

1.Алгоритм банкира исходит из фиксированного количества распределяемых ресурсов. Но поскольку устройства, предоставляющие ресурсы, требуют технического обслуживания, то мы не можем считать, что количество ресурсов всегда остается фиксированным.

2.Алгоритм требует, чтобы число выполняющихся процессов оставалось постоянным. Подобное требование также является нереалистичным. В современных мультипрограммных системах количество работающих процессов непрерывно меняется.

3.Алгоритм требует, чтобы процессы заранее указывали

свои максимальные потребности в ресурсах, но т.к.

48

распределение ресурсов становится более динамичным, то все труднее оценивать максимальные потребности процесса.

2.3.3. Обнаружение тупиков

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

Обнаружение тупика – установление факта, что возникла тупиковая ситуация, и определение процессов и ресурсов, вовлеченных в эту тупиковую ситуацию. Алгоритмы обнаружения тупиков, как правило, применяются в системах, где выполняются первые три необходимых условия возникновения тупиковой ситуации. Эти алгоритмы затем определяют, не создался ли режим кругового ожидания. Одним из способов обнаружения тупиков является редукция ориентированного графа распределения ресурсов и запросов. Редукция графа на конкретный процесс изображается исключением стрелок, идущих к этому процессу от резервов (т.е. ресурсов, выделенных данному процессу) и стрелок к ресурсам от этого процесса (т.е. текущих запросов данного процесса на выделение ресурсов). Если граф можно редуцировать на все процессы, значит тупиковой ситуации нет, а если этого сделать нельзя, то все “нередуцируемые” процессы образуют набор процессов, вовлеченных в тупиковую ситуацию.

49

2.3.4. Восстановление после тупиков

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

Сложность восстановления системы, т.е. вывода из тупика обуславливается рядом факторов:

1.В первый момент вообще может быть неочевидно, что система попала в тупиковую ситуацию.

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

3.Если даже в системе существуют средства приостановки/возобновления процессов, то их использование требует, как правило значительных затрат ресурсов системы.

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

50