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

Системное программное обеспечение. Учебник

.pdf
Скачиваний:
0
Добавлен:
08.09.2026
Размер:
2 Мб
Скачать
☆
121
Глава 4. Параллелизм в операционных системах
но и тупиковые ситуации, или тупики. При этом известны сле­дующие четыре необходимых условия возникновения тупика [1, 4]:
• процессы требуют предоставления им права монопольного управления ресурсами, которые им выделяются (условие взаи- моисключения);
• процессы удерживают за собой ресурсы, уже выделенные им, ожидая в то же время выделения дополнительных ресурсов (условие ожидания ресурсов);
• ресурсы нельзя отобрать у процессов, удерживающих их, пока эти ресурсы не будут использованы для завершения рабо­ты (условие неперераспределяемости);
• существует кольцевая цепь процессов, в которой каждый процесс удерживает за собой один или более ресурсов, требую­щихся следующему процессу цепи (условие кругового ожида- ния).
В исследованиях по проблеме тупиков выделяют следую-
щие четыре основные направления [1]:
• предотвращение тупиков;
• обход тупиков;
• обнаружение тупиков;
• восстановление после тупиков.
Исследования ученых показали, что возникновение тупи­ков невозможно, если нарушено хотя бы одно из четырех усло­вий. В частности, была предложена следующая стратегия (три принципа) [1]:
1) каждый процесс должен запрашивать все требуемые ему ресурсы сразу, причем не может начать выполняться до тех пор, пока все они не будут ему предоставлены;
2) если процесс, удерживающий определенные ресурсы, получает отказ в удовлетворении запроса на дополнительные ресурсы, этот процесс должен освободить свои первоначальные ресурсы и при необходимости запросить их снова вместе с до­полнительными ресурсами;
3) введение линейной упорядоченности по типам ресурсов для всех процессов, то есть если процессу выделены ресурсы дан­ного типа, то в дальнейшем он может запросить только ресурсы более далеких по порядку типов.
СИСТЕМНОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ
122
Каждый принцип имеет цель нарушить одно из приведен­ных выше условий возникновения тупиковой ситуации (кро­ме первого).
Алгоритмы обнаружения тупиков применяются в системах, где выполняются первые три необходимых условия возникно­вения тупиков, то есть они определяют, не создался ли режим кругового ожидания. Однако применение этих алгоритмов свя­зано с дополнительными затратами машинного времени.
При рассмотрении задачи обнаружения тупиков применяет­ся весьма распространенная нотация, согласно которой распре­деление ресурсов и запросы изображаются в виде направленного графа [2, 5]. Граф распределения ресурсов отражает текущую ситуацию в отношениях между процессами в системе, показы­вая, какой процесс и какие ресурсы запрашивает и какие ресур­сы этому процессу уже выделены. Поэтому графы запросов и рас­пределения ресурсов динамично меняются по мере того, как процессы запрашивают ресурсы, получают их в распоряжение, а через какое-то время возвращают их операционной системе.
Отношения между процессами и ресурсами могут быть пред­ставлены на графе запросов и распределения ресурсов (рис. 4.3).
При рассмотрении тупиков целесообразно понятие ресур­сов системы обобщить и разделить их на два класса [4]: повтор­но используемые (или системные) ресурсы (типа RR – reusable resource или SR – system resource) и потребляемые (или рас- ходуемые) ресурсы (типа CR – consumable resource).
Ресурсы типа SR можно характеризовать следующим обра­зом:
1) число единиц постоянно;
2) каждая единица распределена одному процессу, и толь-
ко, то есть разделение отсутствует;
3) процесс может освободить единицу ресурса, но только
если он ранее получил эту единицу.
Ресурсы типа CR имеют следующие свойства [4]:
1) число доступных единиц изменяется по мере того, как приобретаются (расходуются) и освобождаются (производят­ся) отдельные их элементы выполняющимися процессами, и такое число единиц ресурса практически неограниченно (про­цесс-производитель увеличивает число единиц ресурса);
123
Глава 4. Параллелизм в операционных системах
2) процесс-потребитель уменьшает число единиц ресурса, сначала запрашивая, а затем приобретая (потребляя) одну или более единиц данного вида ресурса.
R1 R2
P1 P2
а б
P3 P4
R3
в
R4
P5 P6
г
Р7
R5
P8 R6
R7
д
Рис. 4.3. Графы запросов и распределения ресурсов: а – процесс P1 запрашивает ресурс R1: в текущий момент запрос от P1 на-
ходится в стадии рассмотрения; б – процессу P2 выделен ресурс типа R2 (один из двух идентичных); в – процесс P3 запрашива­ет ресурс R3, уже выделенный процессу P4 (ситуация, близкая к тупиковой); г – тупиковая ситуация: процесс P5 запрашива­ет ресурс R4, который уже выделен процессу P6; процесс P6, в свою очередь, запрашивает ресурс R5, который выделен про­цессу P5 (пример кругового ожидания, типичного для системы в состоянии тупика); д – процесс P7 запрашивает ресурс R6, уже
выделенный процессу P8 (ситуация, близкая к тупиковой)
СИСТЕМНОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ
R1
R2
P2
P1
124
Для исследования проблемы тупиков было разработано не­сколько моделей. Одной из них является модель для повторно используемых ресурсов, которая называется моделью Холта.
В качестве примера может быть рассмотрено одно из состо­яний системы из двух процессов (P1, P2) с ресурсами типа SR (R1, R2). Оно может быть представлено в виде модели Холта, как это показано на рис. 4.4 [4].
Рис. 4.4. Модель Холта
Пусть процесс P1 запрашивает две единицы ресурса R1 и одну единицу ресурса R2. Процессу P2 принадлежат две еди­ницы ресурса R1 и ему нужна одна единица R2. Предположим, что процесс P1 получил бы теперь запрошенную им единицу R2. Но если принято правило, по которому процесс должен по­лучить все запрошенные им ресурсы, прежде чем освободить хотя бы один из них, то удовлетворение запроса P1 приведет к тупиковой ситуации. При этом процесс P1 не сможет продол­житься до тех пор, пока P2 не освободит единицу ресурса R1, а процесс P2 не сможет продолжиться до тех пор, пока P1 не ос­вободит единицу R2. Причиной этого дедлока являются неупо­рядоченные попытки процессов войти в критический интервал, связанный с выделением соответствующей единицы ресурса.
Приведем пример тупика на ресурсах типа CR. Пусть есть три процесса: ПР1, ПР2, ПР3 (рис. 4.5), которые вырабатыва­ют соответственно сообщения М1, М2, М3. Эти сообщения пред­ставляют собой ресурсы типа CR. Пусть процесс ПР1 является потребителем сообщения М3, процесс ПР2 получает сообщение М1, а ПР3 – сообщение М2 от процесса ПР2, то есть каждый из процессов является поставщиком и потребителем одновре-
125
ПР1
ПР2
ПР3
ПЯ1
ПЯ2
ПЯ3 М2
М3
М1
Глава 4. Параллелизм в операционных системах
менно, а вместе они образуют кольцевую систему передачи со­общений через почтовые ящики (ПЯ) [4].
М2
Рис. 4.5. Пример тупика на ресурсах типа CR
Если для каждого процесса заданы следующие две проце­дуры:
1) послать сообщение;
2) ждать сообщение,
то при этом возможны два варианта:
а) вариант без тупиковой ситуации:
ПР1: послать сообщение (ПР2, М1, ПЯ2); ждать сообщение (ПР3, М3, ПЯ1);
ПР2: послать сообщение (ПР3, М2, ПЯ3); ждать сообщение (ПР1, М1, ПЯ2);
ПР3: послать сообщение (ПР1, М3, ПЯ1); ждать сообщение (ПР2, М2, ПЯ3);
б) вариант с тупиковой ситуацией, когда в каждом из про­цессов эти две процедуры переставить местами. Например, для процесса ПР1:
ПР1: послать сообщение (ПР3, М3, ПЯ1); ждать сообщение (ПР2, М1, ПЯ2).
Приведем пример тупика на ресурсах типа SR. Пусть есть два процесса ПР1 и ПР2, разделяющие два ресурса типа SR:
СИСТЕМНОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ
126
R1 и R2. Пример последовательности операторов для двух про­цессов, которые могут привести к тупиковой ситуации для случая, когда взаимное исключение доступов к этим ресурсам реализуется с помощью семафоров S1 и S2, выглядит следую­щим образом [4]:
ПР1 ПР2
1: P (S2); 5: P (S1);
2: P (S1); 6: P (S2);
3: V (S1); 7: V (S1);
4: V (S2); 8: V (S2).
При этом вариант реализации семафорных примитивов выглядит следующим образом:
P(S): S: =S-1;
If S<0 then {остановить процесс и поместить его в очередь ожидания к семафору S}
V(S): if S<0 then {поместить один из ожидающих процессов очереди семафора S в очередь готовности}
S: =S+1 где P – от голландского Proberen – проверить; V – от голландско­го Verhogen – увеличить [4].
Допустимыми значениями семафора являются только целые числа. Двоичным семафором называется семафор, максималь­но возможное значение которого будет равно единице. Другие семафоры называются N-ичными. Есть реализации, в которых семафорные переменные не могут быть отрицательными, а есть итакие, где отрицательное значение указывает на длину очере­ди процессов, состоящих в состоянии ожидания открытия сема­фора [4].
Одним из способов обнаружения тупиков является при- ведение или редукция графа распределения ресурсов. Если запросы ресурсов для некоторого процесса могут быть удов­летворены, то говорят, что граф можно редуцировать на этот процесс. Такая редукция эквивалентна изображению гра­фа в том виде, который он будет иметь в случае, если данный процесс завершит свою работу и возвратит ресурсы системе. Редукция графа на конкретный процесс изображается исклю­чением стрелок, идущих к этому процессу от ресурсов, выде­ленных этому процессу, и стрелок к ресурсам от этого процес-
127
R2
P2
P1
P3
R2
P2
P1
P3
Глава 4. Параллелизм в операционных системах
са (то есть текущих запросов данного процесса на выделение ему ресурсов) [1].
Если граф можно редуцировать на все процессы, значит, ту­пиковой ситуации нет, а если этого сделать нельзя, то все «не­редуцируемые» процессы образуют набор процессов, вовлечен­ных в тупиковую ситуацию. Например, произведем редукцию следующего графа (рис. 4.6).
R1
Рис. 4.6. Пример исходного графа распределения ресурсов
Редуцирование исходного графа производится поэтапно.
1. Редуцирование исходного графа на процесс P3 (рис. 4.7).
R1
Рис. 4.7. Редуцирование исходного графа на процесс P3
СИСТЕМНОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ
R2
P2
P1
P3
R1
P2
P1
P3
2. Редуцирование на процесс P1 (рис. 4.8).
R1
Рис. 4.8. Редуцирование на процесс P1
3. Редуцирование на процесс Р2 (рис. 4.9).
128
R2
Рис. 4.9. Редуцирование на процесс Р2
Таким образом, исходный граф может быть редуцирован на все процессы, и тупиковой ситуации нет.
Разработчики операционных систем при решении проблемы тупиков чаще всего идут по пути исключения самих возможно­стей тупиков. Но, например, требование о том, что программа должна запросить и получить все ресурсы, чтобы начать выпол­нение, на практике часто означает, что значительная часть ре­сурсов компьютера будет использоваться вхолостую в течение нескольких часов. Один из подходов, к которому часто прибе-
129
Глава 4. Параллелизм в операционных системах
гают разработчики систем с целью улучшения использования ресурсов в подобных обстоятельствах, заключается в том, что­бы разделять программу на несколько программных шагов, выполняемых относительно независимо друг от друга. Благо­даря этому можно осуществлять выделение ресурсов для каж­дого шага программы, а не для целого процесса. Это позволяет уменьшить непроизводительное использование ресурсов, од­нако связано с увеличением накладных расходов на этапе про­ектирования прикладных программ, а также на этапе их вы­полнения. Систему, оказавшуюся в тупике, можно вывести из него, нарушив одно из условий его существования. При этом возможно, что несколько процессов частично или полностью потеряют результаты проделанной работы. Сложность восста­новления системы после тупика обусловлена целым рядом фак­торов и может потребовать много работы. Тупики в современ­ных системах обычно рассматриваются как достаточно редкая неприятность. В будущих системах тупиковые ситуации могут стать гораздо более критическим фактором, поскольку эти си­стемы будут работать при гораздо более динамичном распреде­лении ресурсов и большем количестве одновременно выполняе­мых процессов [1, 4, 6].
ГЛАВА 5.
Особенности организации различных
операционных систем
5.1. Концепции структурной организации операционных систем
При описании операционной системы часто указываются особенности ее структурной организации и основные концеп­ции, положенные в ее основу.
К таким базовым концепциям относится, например, способ построения ядра системы: монолитное ядро или микроядерный подход [4, 5, 6]. Большинство ОС используют монолитное ядро, которое компонуется как одна программа, работающая в при­вилегированном режиме и использующая быстрые переходы с одной процедуры на другую, не требующие переключения из привилегированного режима в пользовательский и наоборот. Альтернативой является построение ОС на базе микроядра, ра­ботающего также в привилегированном режиме и выполняю­щего только минимум функций по управлению аппаратурой, в то время как функции ОС более высокого уровня выполняют специализированные компоненты ОС – серверы, работающие в пользовательском режиме. При таком построении ОС работа­ет более медленно, так как часто выполняются переходы между привилегированным режимом и пользовательским, зато систе­ма получается более гибкой – ее функции можно наращивать, модифицировать или сужать, добавляя, модифицируя или ис­ключая серверы пользовательского режима. Кроме того, серве­ры хорошо защищены друг от друга, как и любые пользователь­ские процессы.
При построении ОС на базе объектно-ориентированного под­хода существует возможность использовать все его достоинства, хорошо зарекомендовавшие себя на уровне приложений внутри операционной системы. В числе этих достоинств можно назвать [4, 5, 6]:
• аккумуляцию удачных решений в форме стандартных
объектов;
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]