Добавил:
Developer Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Экзамен Павлов.docx
Скачиваний:
63
Добавлен:
17.08.2022
Размер:
786.12 Кб
Скачать

3.1.3 Критические области

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

Условия избегания состязания и эффективной работы процессов:

  1. Два процесса не должны одновременно находиться в критических областях.

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

  3. Невозможна ситуация, когда процесс вечно ждет (зависает) попадания в критическую область.

Пример:

Взаимное исключение с использованием критических областей

  1. Взаимодействие процессов: взаимное исключение с активным ожиданием, приостановка и активизация

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

Межпроцессное взаимодействие (InterProcess Communication (IPC)) решает три основных вопроса:

1. Передача информации от одного процесса другому.

2. Совместная работа процессов без создания взаимных помех.

3. Определения правильной последовательности выполнения взаимозависимых процессов.

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

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

. Для этого необходимо выполнение четырех условий:

1.Два процесса не должны одновременно находиться в критических областях.

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

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

4.Невозможна ситуация, в которой процесс вечно ждет попадания в критическую область.

2.Взаимное исключение с активным ожиданием

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

2.1 Запрещение прерываний.

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

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

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