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

malyshkin_ve_korneev_vd_-_parallelnoe_programmirovanie_multikompyuterov

.pdf
Скачиваний:
63
Добавлен:
28.03.2016
Размер:
3.12 Mб
Скачать

оперативной памяти, понадобившейся для завершения другой,

более приоритетной программы.

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

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

примеру, все свои ресурсы) для “ залповой” печати.

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

которое может запросить процесс в ходе выполнения. Эта информация позволяет всегда из множества готовых процессов выбирать на исполнение такое подмножество процессов, которое не попадает в состояние дедлока. Идея такого планирования

98

формулируется в виде алгоритма банкира, суть которого следующая.

Пусть в вычислительной системе есть n типов ресурсов,

каждого типа ресурсов - ri экземпляров. Одновременно

исполняются m процессов P1, P2, ... , Pm. Каждый процесс Pj,

j=1,...,m, максимально

может затребовать kj1 экземпляров

ресурса первого типа,

kj2 - экземпляров ресурса второго типа,

kjn - экземпляров ресурса n-го типа. Для каждого j-го ресурса и процессов P1, P2, ... , Pm должно выполняться условие банкира:

kij rj

i

Другими словами, суммарный максимальный запрос всех процессов P1, P2, ... , Pm любого j-го ресурса не превосходит его наличного количества rj. Следовательно, все запросы процессов могут быть удовлетворены. Каждому новому процессу разрешается начать исполнение лишь в том случае, если он не нарушит условие банкира.

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

При обнаружении дедлока необходимо разорвать циклическое ожидание, которое находится из анализа ГРР. Для

99

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

3.6.Задача о пяти обедающих философах

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

Тогда они заходят в столовую, где стоит круглый стол, на нем всегда приготовлены пять блюд. Между соседними блюдами лежит одна вилка (всего лежит ровно пять вилок). Голодный философ (рис. 3.10):

а) входит в столовую, садится за стол и берет вилку слева,

б) берет вилку справа,

в) ест (обязательно двумя вилками),

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

При конструировании управления в этой задаче следует учитывать самые разнообразные варианты поведения философов.

Рассмотрим некоторые из них.

100

а).Необходимо организовать действия философов так,

чтобы они все были накормлены и не случилось бы так, что пять философов одновременно войдут в столовую, возьмут левую вилку и застынут в ожидании освобождения правой вилки

(дедлок!). Голодная смерть всех философов неминуема, если никто из них не пожелает расстаться на время со своей левой вилкой. Будет не лучше, если они одновременно положат левые вилки, а затем вновь одновременно попытаются завладеть необходимыми двумя вилками. Результат, понятно, тот же.

Типичный дедлок в результате попытки дозахватить ресурс

(вторую вилку)! Выход из него - “ убить” один из процессов

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

101

Философ думает,

левая вилка доступна

затем заходит в

 

столовую

 

 

берет

 

левую вилку

берет

 

правую

левая вилка

вилку

возвращается

 

ест

правая вилка

философ возвращает правую

доступна

вилку и отправляется думать

 

Рис. 3.10

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

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

б).Необходимо также предусмотреть, чтобы два философа одновременно не хватали одну и ту же вилку

(обеспечить взаимное исключение). Зная вспыльчивый характер философов, нетрудно в этом случае предсказать результат.

102

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

г).Легко представить себе ситуацию, когда банда сговорившихся философов завладеет всеми вилками и, передавая их только в своей среде, уморит голодом всех прочих.

103

Философ_0

вилка_0

 

философ_1

доступна

думает

думает

берет левую

 

 

 

 

 

 

вилку

 

 

имеет

левую вилку

ест ест

 

Философ_2

 

думает

вилка_2

имеет

доступна

левую

 

 

вилку

 

ест

Рис. 3.11.

На рис. 3.11 представлена сеть Петри, задающее управление распределением вилок трем обедающим философам,

человеческий фактор в ней не учитывается (пункты б-г). Эта сеть конструировалась пошагово.

104

Вначале была сконструирована сеть, управляющая поведением одного (любого) философа (рис. 3.10). Затем три таких сети, соответствующие трем философам, объединяются в одну. Распределяемые ресурсы - левые и правые вилки - разных фрагментов совмещаются.

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

(всем будет обеспечен равный доступ в столовую).

3.7.Задача производитель/потребитель

Поведение процессов производителя и потребителя описано сетью примера на рис. 3.12.а. Здесь производитель П производит детали и оставляет их на складе, а потребитель Т забирает их со склада, когда они там есть. Регулирует это взаимодействие место p5. Склад здесь описан неограниченно большой емкости. Процесс-производитель может сработать неограниченно большое число раз, даже если процесс потребитель не работает совсем.

Если необходимо принять во внимание ограниченную вместимость склада, тогда в сеть добавляется место p6 (рис. 3.12.б). Оно определяет наличие места для хранения не более чем

10 деталей. Взятие фишки из места p6 может интерпретироваться как взятие разрешения поместить очередную деталь на склад

(занять свободное место для хранения).

105

p1

готов к

 

 

 

p3

 

 

работе

 

 

 

готов взять

 

 

 

 

 

 

 

 

p5

 

t3

деталь со склада

t1

очередная

 

 

 

на складе

 

 

 

деталь

 

 

 

можно обработать

 

 

 

пусто

p4

p2

произведена

 

взятую деталь

 

 

П

t2

 

а)

 

t4

 

 

 

 

 

 

Т

 

 

 

 

 

 

 

p1

склад рассчитан на

 

p3

 

 

 

 

 

10 деталей

 

 

 

 

 

t1

 

p6 10

 

 

t3

p2

 

 

 

p5

 

p4

 

 

 

 

 

 

П

t2

 

 

б)

 

t4

 

 

 

Т

 

 

 

 

 

 

Рис. 3.12.

П3.Рассмотрим пример конвейера. Пусть есть три обрабатывающих устройства t0, t1, t2, организованные в виде конвейера. Это могут быть, например, станки на заводе или функциональные устройства конвейерного процессора и вообще любой конвейер, в котором каждое обрабатывающее устройство выполняет лишь часть общей работы, а конечный результат будет выработан последним из них.

Пусть требуется, чтобы места p1 и p2 могли содержать ограниченное число результатов: место p1 может вместить лишь два результата (место p1 сети 2-ограничено) предшествующего

106

этапа работы конвейера (вырабатывается переходом t0 ), а место p2 – 3- ограничено. Символ n в месте p0 означает наличие n фишек в нем, n - целое положительной число.

 

 

p4

p2

t2

 

 

t1

 

 

 

 

 

n

 

 

 

 

p0

t0

 

p1

p3

p5

Рис. 3.13.

Сеть Петри, обеспечивающая необходимое прямое управление, приведена на рис. 3.13. Понятно, что в месте p1 не может накопиться более 2-х фишек при любых порядках срабатывания переходов сети. Места p1 и p2 еще называют

асинхронными каналами, с их помощью реализуется программирование средствами асинхронного message passing interface.

Сеть Петри, в которой все места 1-ограничены,

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

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

107

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]