Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОС - Лекции.doc
Скачиваний:
14
Добавлен:
05.09.2019
Размер:
1.04 Mб
Скачать

Системы, управляемые событиями

В начале 70-х годов появилась новая архитектура многозадачных систем, довольно резко отличающаяся от вышеописанной модели последовательных процессов. Речь идет о так называемых системах, управляемых событиями (event-driven systems).

Впервые эта архитектура была реализована в экспериментальных настольных компьютерах Alto, разработанных в 1973 году в исследовательском центре PARC фирмы Xerox. Целью эксперимента было создание операционной среды, удобной для создания интерактивных программ.

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

Каждое событие представляет собой структуру данных, которая содержит код, обозначающий тип события, а также поля, специфичные для различных типов событий.

Все события помещаются в очередь в порядке их возникновения.

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

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

Менеджеры и обработчики событий широко используются в современных многозадачных ОС. События становятся дополнительным средством синхронизации и передачи данных, удобным для организации пользовательского интерфейса, при этом в других ситуациях программисты могут пользоваться другими средствами взаимодействия. Подобным образом устроены ОС Windows NT и OS/2).

4.2.6Средства синхронизации процессов Проблема синхронизации

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

Проблему синхронизации иллюстрирует пример, взаимодействия процессов с печатающим устройством. (см. рис. 4.3). На печатающее устройство в порядке очереди выводятся файлы, имена которых занесены в специальный файл, представляющий собой очередь печати. Переменная NEXT, доступная всем процессам, содержит номер первой свободной позиции очереди печати. Процессы, желающие произвести печать, читают эту переменную, записывают в соответствующую позицию очереди печати имя необходимого файла и наращивают значение NEXT на единицу. Предположим, что в некоторый момент процесс R решил распечатать свой файл, для этого он прочитал значение переменной NEXT (например, равное пяти). Процесс запомнил это значение, но поместить имя файла не успел, так как его выполнение было прервано (например, в следствие исчерпания кванта времени). Очередной процесс S, желающий распечатать файл, прочитал то же самое значение переменной NEXT, поместил в пятую позицию имя своего файла и нарастил значение переменной на единицу. Когда в очередной раз управление будет передано процессу R, то он, продолжая свое выполнение, в полном соответствии со значением текущей свободной позиции, полученным во время предыдущей итерации, запишет имя файла также в позицию пять, поверх имени файла процесса S (указанную последовательность действий можно записать в виде стадий: R1-S1-S2-S3-R2-R3).

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