Синхронизация процессов и потоков
Конкуренция – ситуация, когда два или более процессов требуют доступ к одному и тому же ресурсу (принтеру, файлу и т.п.), называемому критическим. Часть программы, использующая критический ресурс, называется критической секцией.
Для вывода на печать своих файлов процессы должны записать их имена в общедоступный разделяемый файл. В последствии отдельный процесс («принт-сервер» отправляет на печать файлы с вписан файл заказов.
Процесс, стремящиеся распечатать файл, выполняет действия:
· Читает значения переменной next. Указывающий номер свободной записи в файле заказов.
· Записывает в эту позицию имя файла
· Наращивает значение next.
В зависимости от соотношения скоростей процессов эти 3 действия могут либо выполняться независимо, либо прерывать друг друга, если 1 из процессов прочитал переменную next, но не успел нарастить ее, другой процесс запишет имя своего файла поверх. В результате первый процесс не сможет его распечатать.
Такая ситуация, когда 2 или более процессов отрабатывают разделяемые данные (файлы) и конечный результат зависит от скоростей процессов, называется эффектом «гонок».
Для того, чтобы исключить гонки должен быть соблюден принцип взаимоисключения: в каждый момент времени в критической области должен находиться только 1 процесс (поток).
Методы взаимоисключения:
· Запрещение прерываний при входе в критическую область. Разрешения прерываний после выхода.
+ Простота реализации.
- Монополизация процессора
- Возможен крах ОС
- Невозможность использования в многопроцессорных системах
· Блокирующая переменная.
С критическим ресурсом связывается логическая переменная, принимающая значение 1 (true), если ресурс свободен, и 0 (занят).
- Необходимость постоянного опроса другими потоками, требующими ресурс циклический опрос.
- Дополнительные затраты на время.
При попытке доступа к ресурсу процессор выполняет проверку блокирующие переменной. И если это возможно занимает ее устанавливая значение 0. На всех процессорах реализована единая неделимая операция проверкам установкам. Процесс, получивший доступ к ресурсу выполняет участок корда критическую секцию. По завершении работы с критическим ресурсом процесс должен освободить ресурсы установи блокирующую переменную в 1.
· Использование системных функций входа в критическую секцию.
+ Исключается потеря времени процессора на циклическую проверку освобождения занятого ресурса
- Растут накладные расходы ОС по реализации функции входа в критическую секцию и выхода из нее
Дата добавления: 2021-01-26; просмотров: 362;