Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
05_Konspkt_lektsy_OS / Лекции_ОС_08.doc
Скачиваний:
60
Добавлен:
02.04.2015
Размер:
181.25 Кб
Скачать

5

Лекция 08.Тупики.

1.Понятие тупика

Говорят, что в мультипрограммной системе процесс находится в состоянии тупика, дедлока, или клинча, если он ожидает неко­торого события, которое никогда не произойдет. Системная тупико­вая ситуация, или «зависание» системы — это ситуация, когда один или более процессов оказываются в состоянии тупика.

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

2.Примеры тупиков

Ожидание события

По-видимому, простейший способ создания тупика проиллю­стрировал Холт (Но72) в программе, написанной на языке PL/I и предназначенной для того, чтобы привести процесс к тупику при работе под управлением операционной системы OS/360.

REVENGE: PROCEDURE OPTIONS(MAIN,TASK);

WAIT(EVENT);

END REVENGE;

Процесс, связанный с приведенной программой, будет все время ждать, чтобы произошло событие EVENT; однако в этой программе не предусмотрена сигнализация о наступлении ожидаемого события. Системе придется обнаруживать, что данный процесс «завис», а за­тем аннулировать задание, чтобы выйти из тупиковой ситуации. Тупики подобного типа обнаруживать исключительно сложно.

Транспортная пробка как пример тупика

На рис. 1 показана транспортная пробка, которая периодиче­ски возникает в наших городах. Ряд автомобилей пытаются про­ехать через перегруженный транспортом участок города, однако движение оказывается полностью парализованным. Здесь образовался абсолютный затор, так что необходимо вмешательство поли­ции, чтобы постепенно и осторожно подать автомобили назад из зоны затора и тем самым ликвидировать «пробку». В конце концов нормальное движение машин восстанавливается, однако подобные ситуации связаны с большими неприятностями, затратами нервных усилий и значительными потерями времени.

Рис. 1 Тупиковая ситуация—транспортная пробка.

Простой пример тупика при распределении ресурсов

В операционных системах тупики в большинстве случаев возни­кают в результате обычной конкуренции за обладание выделяе­мыми, или закрепляемыми ресурсами (т. е. ресурсами, которые в каждый момент времени отводятся только одному пользователю и которые поэтому иногда называются ресурсами последовательного использования}. На рис. 6.2 показан простой пример тупика подобного рода. На этом графе распределения ресурсов представлены два процесса (в виде прямоугольников) и два ресурса (в виде окружно­стей). Стрелка, направленная от ресурса к процессу, показывает, что данный ресурс принадлежит или был выделен данному процессу. Стрелка, направленная от процесса к ресурсу, показывает, что дан­ный процесс требует, но пока еще не получил в свое распоряжение данный ресурс. На рисунке изображена система в состоянии тупика; процесс А удерживает в своем распоряжении ресурс 1, а для про­должения выполнения ему необходим ресурс 2. Процесс В удер­живает ресурс 2, а для продолжения работы ему нужен ресурс 1. Каждый процесс ждет, чтобы другой процесс освободил нужный ему ресурс, причем каждый не освобождает свой ресурс до тех пор, пока другой не освободит свой ресурс, и т. д. Такое состояние кру­гового ожидания характерно для систем в тупиковом состоянии.

Рис. 6.2 Простая тупиковая ситуация.

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

Тупики в системах спулинга

Системы спулинга часто оказываются подвержены тупикам. Режим спулинга (ввода-вывода с буферизацией) применяется для повышения производительности системы путем изолирования про­граммы от такого низкоскоростного периферийного оборудования, как устройства ввода данных с перфокарт и принтеры. Если, на­пример, программе, выдающей строки данных на принтер, прихо­дится ждать распечатки каждой строки перед передачей следующей строки, то такая программа будет выполняться медленно. Чтобы. повысить скорость выполнения программы, строки данных, предназначенные для печати, вначале записываются па более высокоско­ростное устройство, например дисковый накопитель, где они вре­менно хранятся до момента распечатки. В некоторых системах спулчнга программа должна сформировать все выходные данные — только после этого начинается реальная распечатка. В связи с этим несколько незавершенных заданий, формирующих строки данных ц записывающих их в файл спулинга для печати, могут оказаться в тупиковой ситуации, если предусмотренная емкость буфера будет заполнена до того, как завершится выполнение какого-либо зада­ния. Для восстановления, или выхода из подобной тупиковой ситуа­ции, мог бы потребоваться перезапуск, рестарт системы с потерей всей работы, выполненной до этого момента. Если система попадает в тупиковую ситуацию таким образом, что у оператора ЭВМ оста­ются возможности управления, то в качестве менее радикального способа восстановления работоспособности можно предложить унич­тожение одного или нескольких заданий, пока у остающихся зада­ний не окажется достаточно свободного места в буфере, чтобы они могли завершиться.

Когда системный программист производит генерацию опера­ционной системы, он задает размер буферных файлов для спулинга. Один из способов уменьшить вероятность тупиков при спулинге заключается в том, чтобы предусмотреть значительно больше места для файлов спулинга, чем потребуется согласно предварительной оценке. Подобное решение не всегда осуществимо, если память де­фицитна. Более распространенное решение состоит в том, что для процессов входного спулинга устанавливаются ограничения, с тем чтобы они не могли принимать дополнительные задания, когда фай­лы спулинга начинают приближаться к некоторому порогу насы­щения, например оказываются заполненными на 75 процентов. Такой подход может привести к некоторому снижению производи­тельности системы, однако это — та цена, которую приходится платить за уменьшение вероятности тупика.

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

Соседние файлы в папке 05_Konspkt_lektsy_OS