Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ответы на 12-41 билеты Веденяпина.docx
Скачиваний:
1
Добавлен:
11.05.2025
Размер:
689.12 Кб
Скачать

20. Критическая секция

Критическая секция — часть программы, в которой есть обращение к совместно используемым данным. При нахождении в критической секции двух (или более) процессов, возникает состояние «гонки» («состязания»). Для избежания данной ситуации необходимо выполнение четырех условий: ♦Два процесса не должны одновременно находиться в критических областях.

♦В программе не должно быть предположений о скорости или количестве процессоров.

♦Процесс, находящийся вне критической области, не может блокировать другие процессы. ♦Невозможна ситуация, в которой процесс вечно ждет попадания в критическую область. Критическая секция (англ. critical section) — объект синхронизации потоков, позволяющий предотвратить одновременное выполнение некоторого набора операций (обычно связанных с доступом к данным) несколькими потоками. Критическая секция выполняет те же задачи, что и мьютекс. Критические секции Windows имеют оптимизацию, заключающуюся в использовании атомарно изменяемой переменной наряду с объектом «событие синхронизации» ядра. Захват критической секции означает атомарное увеличение переменной на 1. Переход к ожиданию на событии ядра осуществляется только в случае, если значение переменной до захвата было уже больше 1, то есть происходит реальное «соревнование» двух или более потоков за ресурс.

Таким образом, при отсутствии соревнования захват/освобождение критической секции обходятся без обращений к ядру.

Кроме того, захват уже занятой критической секции до обращения к ядру какое-то небольшое время (англ. spin count) ждёт в цикле опроса переменной, и, если переменная становится равной 0, то захват происходит без обращений к ядру.

21. Программные алгоритмы организации взаимодействия процессов: требования, семафор, мьютекс

Алгоритмы для решения организации взаимодействующих процессов

1)Запрет прерывания. Процесс, входящий в критический участок, запрещает прерывание, выполняется и, выходя, разрешает.

2)Переменная "замок". Аналогична прерыванию. Родительский процесс для дочерних организует общую переменную, которая сигнализирует о том, находится ли сейчас какой-либо процесс в своей критической области. Управление переменной отдается процессу в критической области.

3) Строгое чередование. Для процессов устанавливается общая переменная, которая циклически меняет свой номер (значение), не предназначен для всех видов ресурсов.

4) Флаги "готовность". Каждый ресурс имеет свой флаг "свободен/занят" , и доступ к флагу процесса дается только, когда "свободен". Положение флага сменяет ОС, она же отслеживает занятость ресурса и его реальное использование процессом.

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

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

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

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