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

Операционные системы. Учебное пособие-1

.pdf
Скачиваний:
0
Добавлен:
12.08.2026
Размер:
930 Кб
Скачать

6.1. Состязательные ситуации

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

Команда TSL

TSL (Test and Set Lock, проверить и установить блокировку) — аппаратная реализация механизма блокирующих переменных в виде специального регистра центрального процессора, гарантирующая атомарность (непрерывность) операций чтения и записи значений регистра.

Семафоры

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

Мьютексы

Мьютекс — упрощенная реализация семафора, не предполагающая использования счетчика.

Мониторы

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

Передача сообщений

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

91

Глава 6. Состязательные и тупиковые ситуации

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

Барьеры

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

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

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

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

Обычно выделяют два типа ресурсов:

1.Выгружаемый ресурс — ресурс, который безболезненно можно забрать у процесса, например, память.

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

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

Также выделяют следующие условия возникновения тупиковой ситуации:

1.Условие взаимного исключения — в какой-то момент времени, ресурс занят только одним процессом или свободен.

2.Условие удержания и ожидания — процесс, удерживающий ресурс, может запрашивать новые ресурсы.

3.Условие отсутствия принудительной выгрузки ресурса.

92

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

4.Условие циклического ожидания — должна существовать круговая последовательность из процессов, в которой каждый процесс ожидает доступа к ресурсу, удерживаемому следующим членом последовательности.

Только при выполнении всех условий может произойти взаимоблокировка процессов.

6.2.1Методы борьбы с взаимоблокировками

Игнорирование проблемы

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

Обнаружение и восстановление

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

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

вектор существующих ресурсов E pE1; E2; : : : ; Emq, содержащий m типов ресурсов, например, принтер, сканер и т. д.;

вектор доступных ресурсов A pA1; A2; : : : ; Amq;

матрица текущего распределения размером m n, в которой обозначены процессы в количестве n и используемые ими ресурсы (заблокированные) каждого типа m:

 

 

 

 

 

 

 

C11

C12

: : : C1m

 

 

C

C.21

C.22

:..:.: C2.m

;

 

Cn1

Cn2

: : : Cnm

 

 

 

 

 

 

 

 

 

 

 

 

 

93

Глава 6. Состязательные и тупиковые ситуации

• матрица запросов размером m n, определяющая потребности процессов в ресурсах каждого типа:

 

 

 

 

 

 

 

R11

R12

: : : R1m

 

 

R

R.21

R.22

:..:.: R.2m

;

 

Rn1

Rn2

: : : Rnm

 

 

 

 

 

 

 

 

 

 

 

 

 

при этом количество свободных и распределенных ресурсов не должно превышать количество доступных ресурсов:

n

¸

Ej Cij Aj:

i 1

Алгоритм состоит из следующих шагов:

1.Поиск непомеченного процесса Pi, для которого i-я строка матрицы R меньше или равна A.

2.Если такой процесс найден, прибавляем к A i-ю строку матрицы C. Установка метки на i-й процесс, переход к шагу 1.

3.Если такого процесса нет, алгоритм прекращает работу. По окончании работы алгоритма все непомеченные процессы счи- таются участвующими во взаимоблокировке.

Рассмотрим пример работы алгоритма. Допустим, имеются следующие процессы и ресурсы:

• вектор существующих ресурсов E p4; 2; 3; 1q;

• вектор доступных ресурсов A p2; 1; 0; 0q;

• матрица текущего распределения:

C

 

2

0

0

1

;

 

 

0

0

1

0

 

• матрица запросов:

0

1

2

0

 

 

 

 

 

:

R

1

0

1

0

 

 

2

0

0

1

 

 

2

1

0

0

Тогда представленный алгоритм будет выполняться следующим образом:

1.Третий процесс может получить желаемые ресурсы, т.к.

R3 A.

94

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

2.Третий процесс освобождает ресурсы A p2; 2; 2; 0q. Процесс маркируется как выполненный.

3.Выполняется процесс 2. По окончании A p4; 2; 2; 1q.

4.Выполняется первый процесс. Тупиков не обнаружено. Если изменить запросы для второго процесса со значений

R2 p1; 0; 1; 0q íà R2 p1; 0; 3; 0q, тогда матрица запросов будет иметь вид:

2 0 0 1

R 1 0 3 0 ; 2 1 0 0

а два процесса окажутся в тупике.

Когда в системе обнаружена взаимоблокировка, необходимо восстановить работоспособность системы с помощью следующих методов:

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

2.Восстановление путем отката. Состояние процессов записывается в контрольные точки. При возникновении взаимоблокировки существует возможность выполнить откат состояния процесса на некоторое время назад.

3.Восстановление путем уничтожения процессов. При уничтожении процессов освобождаются ресурсы, занятые ими. Выбор процессов должен быть сделан пользователем.

Динамическое уклонение за счет тщательного распределения ресурсов

При динамическом распределении ресурсов операционная система должна определять текущее состояние: безопасное или небезопасное.

В безопасном состоянии взаимоблокировка гарантированно не произойдет. В небезопасном состоянии существует возможность возникновения взаимоблокировки, но взаимоблокировка может и не произойти.

Для определения состояния может быть применен алгоритм банкира:

1. Банкиру поступает запрос от клиента на получение кредита.

95

Глава 6. Состязательные и тупиковые ситуации

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

3.В зависимости от состояния банкир выдает или отказывает в

выдаче кредита.

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

вектор существующих ресурсов E pE1; E2; : : : ; Emq;

вектор доступных ресурсов A pA1; A2; : : : ; Amq;

вектор занятых ресурсов P pP1; P2; : : : ; Pmq, каждый элемент которого рассчитывается как разность между существующими и доступными ресурсами Pi Ei Ai;

матрица текущего распределения:

 

 

 

 

C

C11 C12 : : : C1m

 

 

C.21 C.22 :..:.: C2.m

;

 

 

 

 

 

 

 

 

 

 

 

 

Cn1 Cn2 : : : Cnm

 

 

• матрица запросов:

 

 

 

 

 

 

R11 R12 : : : R1m

 

 

R

R.21 R.22 :..:.: R.2m

;

 

Rn1 Rn2 : : : Rnm

 

 

 

 

 

 

 

 

 

• при этом количество свободных и распределенных ресурсов не должно превышать количество доступных ресурсов.

Алгоритм состоит из следующих шагов:

1.Поиск процесса в матрице R, потребности которого меньше или равны вектору A. Если искомая строка не существует, то система окажется в состоянии взаимной блокировки. Прекращение работы алгоритма.

2.Предполагается, что процесс завершился и освободил занимаемые им ресурсы. Процесс помечается как завершенный, освободившиеся ресурсы добавляются в вектор A.

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

96

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

Рассмотрим пример работы алгоритма. Допустим имеются следующие процессы и ресурсы:

вектор существующих ресурсов E p6; 3; 4; 2q;

вектор доступных ресурсов A p1; 0; 2; 0q;

вектор занятых ресурсов P p5; 3; 2; 2q;

матрица текущего распределения:

3 0 1 10 1 0 0

C 1 1 1 0 ;

1 1 0 1

0 0 0 0

• матрица запросов:

1 1 0 00 1 1 2

R 3 1 0 0 :

0 0 1 0 2 1 1 0

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

Предотвращение за счет подавления одного из условий возникновения

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

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

2.Предотвращение условия удержания и ожидания. Один из способов — запрос процессом всех необходимых ресурсов до начала работы. В случае недоступности хотя бы одного ресурса процессу ничего не предоставляется.

97

Глава 6. Состязательные и тупиковые ситуации

3.Предотвращение условия отсутствия принудительной выгрузки ресурса.

4.Предотвращение условия циклического ожидания:

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

нумерация всех ресурсов. Процесс может запрашивать ресурсы только в порядке возрастания их номеров.

6.3 Контрольные вопросы

1.Что такое состязательная ситуация?

2.Какие механизмы решения проблемы возникновения состязательных ситуаций существуют?

3.Что такое тупиковая ситуация?

4.Какие виды ресурсов существуют?

5.Перечислите условия возникновения взаимоблокировки.

6.Какие методы борьбы с взаимоблокировками существуют?

7.Каким образом можно восстановить состояние операционной системы после возникновения взаимоблокировки?

8.В чем разница между безопасным и небезопасным состояниями?

9.Какие методы подавления условий возникновения взаимоблокировок существуют?

98

ЗАКЛЮЧЕНИЕ

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

Изучение данного пособия позволяет:

изучить принципы, заложенные в основу современных операционных систем;

сформировать навыки работы с различными видами абстракций;

рассмотреть и изучить применения различных подходов к построению операционных систем при решении других задач;

• приобрести теоретические знания и практические навыки разработки программных систем, оперирующих абстракциями.

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

99

БИБЛИОГРАФИЧЕСКИЙ СПИСОК

1.Таненбаум, Э.С. Современные операционные системы / Э.С. Таненбаум, Б. Херберт. — 4-е изд. — СПб.: Издательский дом «Питер», 2015.

2.Назаров, С.В. Широков Современные операционные системы [Электронный ресурс] / С.В. Назаров, А.И. Широков : учебное пособие. — Москва, 2016. — 351 с. URL: https://e.lanbook.com/book/100498

3.Курячий, Г.В. Операционная система Unix [Электронный ресурс] / Г.В. Курячий : учебное пособие. — Москва, 2016. — 258 с. URL: https://e.lanbook.com/book/100281

4.Курячий, Г.В. Операционная система Linux [Электронный ресурс] / Г.В. Курячий, К.А. Маслинский : учебник. — Москва,

2016. — 450 ñ. URL: https://e.lanbook.com/book/100278

 

5. Котельников,

Е.В. Введение

во внутреннее

устрой-

ñòâî Windows

[Электронный

ресурс] / Е.В.

Котель-

ников : учебное пособие. — Москва, 2016. — 260 с. URL: https://e.lanbook.com/book/100722

Учебное издание ФИЛИППОВ Алексей Александрович

ОПЕРАЦИОННЫЕ СИСТЕМЫ

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

Редактор М.В. Теленкова

Учебное издание

A Оригинал-макет изготовлен в системе LTEX2.

ФИЛИППОВ Алексей Александрович

ËÐ • 020640 îò 22.10.97.

Подписано в печать 20.07.2021.

ОПЕРАЦИОННЫЕ СИСТЕМЫ

Формат 60 84/16. Усл. печ. л. 6,74. Тираж 100 экз. Заказ 395.

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

Ульяновский государственный технический университет, 432027, Ульяновск, Сев. Венец, 32.

Редактор М.В. Теленкова

ИПК «Венец», УлГТУ, 432027, Ульяновск, Сев. Венец, 32. A

Оригинал-макет изготовлен в системе LTEX2.

ЛР • 020640 от 22.10.97. Подписано в печать 20.07.2021. Формат 60 84/16. Усл. печ. л. 6,74.

Тираж 100 экз. Заказ 395. ЭИ № 1606.

Ульяновский государственный технический университет, 432027, Ульяновск, Сев. Венец, 32.

ИПК «Венец», УлГТУ, 432027, Ульяновск, Сев. Венец, 32.

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