Средства синхронизации задач
ТЕОРЕТИЧЕСКОЕ ОПИСАНИЕ
Синхронизация
При работе с несколькими задачами нередко требуется синхронизировать выполнение двух или более из них. Причиной этого чаще всего является необходимость обеспечить доступ нескольких задач к одному и тому же ресурсу, который может использоваться одновременно только одной задачей. Другой причиной может быть ожидание одной задачей некоторого события, которое может наступить только в результате действия, выполняемого в другой задаче. Для таких случаев должны быть предусмотрены специальные средства, с помощью которых первая задача будет переведена в состояние ожидания до возникновения соответствующего события, а после продолжит выполнение. Современные операционные системы имеют в своем составе различные средства синхронизации, основными из которых являются:
- Критические участки;
- Семафоры;
- События;
Все они, за исключением критических участков, являются объектами ядра операционной системы, т. е., низкоуровневыми ее компонентами. Критический участок не управляется такими компонентами.
Состояния задачи
Выполняющаяся задача может находиться в одном из трех основных состояний. Во-первых, она может выполняться, во - вторых быть готовой к выполнению при получении системного временного кванта, и в-третьих, может быть блокирована в ожидании освобождения некоторого ресурса или возникновения некоторого события. В этом случае ее выполнение приостанавливается до освобождения ресурса или наступления события. Диаграмма переходов задач из одного состояния в другое показана на рис. 1. В состояние "готов" задача переходит по истечению кванта времени, или по наступлению ожидаемого события. В состояние "блокирован" выполняющаяся задача переходит в случае ожидания наступления некоторого события. Из состояния "готов" в состояние "выполняется" задача переводится планировщиком после просмотра очереди готовых к выполнению задач. Таким образом, синхронизация задач заключается в управлении переходами из состояния "выполняется" в состояние "готов".
Рис 1. Диаграмма состояний задач.
Средства синхронизации задач
Критический участок является наиболее простым средством синхронизации задач для обеспечения последовательного доступа к ресурсам. При вхождении задачи в критический участок никакая другая задача не может начать ее выполнение до того, как работающая с ним задача не выйдет из нее. Попытка такой задачи войти в критическую секцию приведет к переводу ее в состояние "блокирован".
Семафоры позволяют обеспечить доступ к ресурсу для заранее определенного количества задач. Все остальные задачи, пытающиеся получить доступ сверх установленного лимита, будут переведены операционной системой в состояние "блокирован" до тех пор, пока какая - либо задача, получившая доступ к ресурсу ранее, не освободит его. Если количество задач равно двум, то семафор называется бинарным. Ресурс, доступ к которому управляется семафором, может быть логическим (например, участок памяти) или физическим (устройство). С каждым семафором связан счетчик, начальное и максимальное значение которого указываются при создании семафора.
События представляют собой объекты, которые могут находиться в одном из двух состояний: "установлено" или "сброшено". Задачи, нуждающиеся в синхронизации, связываются с этим событием. Одна из них устанавливает событие, сигнализируя другой задаче об освобождении некоторого общего ресурса. Вторая задача, дождавшись такого сигнала, может начать работу с освободившимся ресурсом. Ожидающая освобождения ресурса задача находится в состоянии "блокирован".