Операционные системы    
 Учебное пособие
 Долгов В.В.
 Главная|   Содержание|   Скачать архив (50 кб)

 

1. Способы синхронизации работы процессов в среде Windows Windows



К стандартным способам синхронизации работы нескольких процессов можно отнести такие объекты как критическая секция, событие, семафор. Каждый из этих способов обладает определенным функциональным наполнением и различным поведением. Так критическая секция предназначена для разграничения доступа к некоторому уникальному1 ресурсу нескольких процессов конкурирующих за этот ресурс. На практике, реализация механизма критической секции сводится к разделению во времени моментов выполнения участков различных процессов с помощью системных вызовов «Вход в критическую секцию»(Enter) и «Выход из критической секции»(Leave) (рис. 1).




рис. 1. Схема реализации механизма «критической секции»

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

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

В ОС Windows критическая секция реализована в виде объекта «Mutex», а событие и семафор в виде соответствующих им по названию объектов «Event» и «Semaphore». Эти объекты создаются с помощью функций CreateMutex(…), CreateEvent(…) и CreateSemaphore(…) соответственно, а уничтожаются с помощью функции CloseHandle(…). Среди функций непосредственной работы с указанными объектами стоит отдельно выделить функцию WaitForSingleObject(…) «ожидающую» каждый из объектов (в общем случае любой объект в ядре ОС, для которого применимо понятие «ждать»). При этом «ожидание» для объекта Mutex соответствует операции «Вход в критическую секцию», для объекта Event – ожидание наступления события, а для объекта Semaphore – ожидание и захват свободой единицы ресурса. Выход из критической секции осуществляется функцией ReleaseMutex(…), а освобождение семафора – ReleaseSemaphore(…). Поведение события после завершения ожидания зависит от типа события: события с ручным сбросом остаются установленными; с автоматическим – сбрасываются сразу после того, как любой процесс дождется момента его установки.




1 Уникальным будем называть такой ресурс, одновременная работа с которым по некоторым причинам может осуществляться только одним процессом (потоком).




ЗАДАНИЕ 1.

Реализовать процесс, осуществляющий вывод текстового файла на консоль. Считая консоль уникальным ресурсом, блокировать процесс вывода на неё всего файла с помощью критической секции. Запустить несколько экземпляров процесса и проверить, что единовременно на экран будет выводиться информация только из одного файла.

ЗАДАНИЕ 2.

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

ЗАДАНИЕ 3.

На бензозаправке было построено 4 заправочных места. Считая их одинаковыми, подсчитать, какое количество машин вынуждено было проехать мимо, так как все места были заняты. Новая машина подъезжает к заправке через 1-2 мин. Время заправки одной машины – 1-4 мин. Для контроля количества свободных мест на заправке использовать семафор.





 Главная|   Содержание|   Скачать архив (50 кб)