Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Билетики.pdf
Скачиваний:
1
Добавлен:
05.06.2025
Размер:
6.66 Mб
Скачать

40. Предотвращение взаимоблокировки. Алгоритм банкира для одного вида ресурсов.

3 состояния

Шаг 1 - Начальное

Все процессы имеют 0 ресурсов, свободных ресурсов — 10.

Потребности соответствуют столбцу Макс

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

Шаг 2 - Выделение ресурсов

Свободно - 2

Потребности:

А - 6 -1 = 5​ B - 5 -1 = 4​ C - 4 - 2 = 2​ D - 7 -4 = 3

Проверка безопасности:

1.​ 2 ресурсов достаточно, чтобы завершить С 2.​ Завершаем С, теперь доступно 4 ресурса, достаточно для В

3.​ Завершаем В, теперь доступно 4 + 1 = 5 ресурсов. Достаточно для А 4.​ Завершаем А, теперь доступно 5 + 1 = 6, достаточно для D

5.​ Завершаем D, свободно 10

Состояние безопасно С - В - А - Д

Шаг 3 Доп.запрос

Потребности:​А - 6 -1 = 5​ B - 5 -2 = 3​ C - 4 - 2 = 2​ D - 7 -4 = 3

Свободно - 1, нельзя завершить ни 1 процесс

Состояние небезопасно, алгоритм банкира не разрешил бы этот запрос ( для В)

41. Предотвращение взаимоблокировки. Алгоритм банкира для нескольких видов ресурсов.

Вектора: E=(6342) - существующие ресурсы, P=(5322) - занятые ресурсы, A=(1020) - доступные ресурсы.

Шаг 1 - матрица потребностей уже есть, это 2я

Шаг 2 Сравниваем процессы с доступными

1 1 0 0 - 1 0 2 0 НЕТ,​0 1 1 2 - 1 0 2 0 нет,​ 3 1 0 0 - 1 0 2 0 нет,

0 0 1 0 - 1 0 2 0 ДА, 2 1 1 0 - 1 0 2 0 нет

Завершаем D и освобождаем ресурсы.

Шаг 3 - Свободные (1 0 2 0) + (1 1 0 1) = (2 1 2 1) 1 1 0 0 - Да Завершаем А

Шаг 4 - Свободные (2 1 2 1) + (3 0 1 1) = (5 1 3 2)

0 1 1 2 - Да​ Завершаем В

Шаг 5 - Свободные (5 1 3 2) + (0 1 0 0) = (5 2 3 2)

3 1 0 0 - Да

Завершаем С

Шаг 6 - завершаем Е

Система в безопасном состоянии Д-А-В-С-Е

42. Синхронизирующие объекты ОС: системные семафоры, мьютексы, события, сигналы, барьеры, ждущие таймеры.

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

Все синхронизирующие объекты могут находиться в двух состояниях:

●​ сигнальном

●​ несигнальном (свободном).

Мьютексы (от MUTual Exclusion - взаимоисключения) – объекты ядра, которые позволяют координировать взаимное исключение доступа к разделяемому ресурсу

Семафор - это защищенная переменная, значение которой можно опрашивать и менять только при помощи специальных операций wait, signal и операции инициализации init. Двоичные семафоры могут принимать только значения 0 и 1. Семафоры со счетчиками могут принимать неотрицательные целые значения. Принцип действия мьютексов, но в них заложена возможность подсчета ресурсов, что позволяет заранее определенному числу потоков одновременно войти в синхронизуемый участок кода.

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

В отличие от мьютексов, они не принадлежат ни одному потоку. Объект-событие обычно используется не для доступа к данным, а для того, чтобы оповестить другие

потоки о том, что некоторые действия завершены.

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

Источники сигналов:

терминал (Ctrl-C, Ctrl-Z)

ядро

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

ошибочных системных вызовах

для информирования о событиях ввода-вывода

процесс (один процесс посылает сигнал другому или самому себе)

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

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

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

нужные.

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

1.Реакция по умолчанию. (Default)

2.Игнорировать. (Ignore)

3.Перехватывать сигнал и вызвать обработчик сигнала . (Catch). Сигналы SIGKILL и SIGSTOP нельзя игнорировать или перехватывать .

Для различных сигналов применяется один из следующих вариантов реакции процесса на полученный сигнал по умолчанию:

1.Terminated — завершение процесса.

2.Ignored — сигнал игнорируется.

3.Stopped – остановка процесса с возможностью возобновления по сигналу SIGCONT

4.Core dump – в текущем каталоге создается файл core , содержащий дамп памяти процесса для анализа, и процесс завершается

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

Главная особенность, отличающая ждущие таймеры от системных, — то, что ждущие

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

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