Синхронизация процессов и потоков


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

Для вывода на печать своих файлов процессы должны записать их имена в общедоступный разделяемый файл. В последствии отдельный процесс («принт-сервер» отправляет на печать файлы с вписан файл заказов.

Процесс, стремящиеся распечатать файл, выполняет действия:

· Читает значения переменной next. Указывающий номер свободной записи в файле заказов.

· Записывает в эту позицию имя файла

· Наращивает значение next.

В зависимости от соотношения скоростей процессов эти 3 действия могут либо выполняться независимо, либо прерывать друг друга, если 1 из процессов прочитал переменную next, но не успел нарастить ее, другой процесс запишет имя своего файла поверх. В результате первый процесс не сможет его распечатать.

Такая ситуация, когда 2 или более процессов отрабатывают разделяемые данные (файлы) и конечный результат зависит от скоростей процессов, называется эффектом «гонок».

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

Методы взаимоисключения:

· Запрещение прерываний при входе в критическую область. Разрешения прерываний после выхода.

+ Простота реализации.

- Монополизация процессора

- Возможен крах ОС

- Невозможность использования в многопроцессорных системах

· Блокирующая переменная.

С критическим ресурсом связывается логическая переменная, принимающая значение 1 (true), если ресурс свободен, и 0 (занят).

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

- Дополнительные затраты на время.

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

· Использование системных функций входа в критическую секцию.

+ Исключается потеря времени процессора на циклическую проверку освобождения занятого ресурса

- Растут накладные расходы ОС по реализации функции входа в критическую секцию и выхода из нее

 



Дата добавления: 2021-01-26; просмотров: 367;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

Поделитесь с друзьями:

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.008 сек.