Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Примерные ответы.docx
Скачиваний:
9
Добавлен:
24.09.2019
Размер:
358.54 Кб
Скачать

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

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

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

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

Каждое событие представляет собой структуру данных, которая содержит код, обозначающий тип события, а также поля, различные для различных типов событий: для «мышиных» событий это текущие координаты мыши и битовая маска, обозначающая состояние кнопок (нажата/отпущена). Для клавиатурных событий это код нажатой клавиши и битовая маска, обозначающая состояние различных модификаторов, таких как SHIFT, CNTRL, ALT и т.д.; для визуальных событий это координаты прямоугольника, который нужно перерисовать, и так далее.

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

В системе существует обработчик событий — структура данных, с которой связано несколько программных модулей - методов. Один из методов вызывается при поступлении события и называется callback — «системный вызов, идущий в обратном направлении», реакция системы на событие.

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

Менеджер и обработчики событий органично вписываются в традиционную многозадачную ОС. События становятся дополнительным средством синхронизациии передачи данных, удобным для организации пользовательского интерфейса. В других ситуациях программист может пользоваться другими средствами. Так устроены Windows NT и оконная подсистема OS/2 - Presentation Manager. В X Window передача событий реализована на основе стандартных средств межпроцессного взаимодействия: труб или разделяемой памяти при работе в пределах одной машины и сокетов при взаимодействии с удаленной машиной.

В Windows 3.1 и старых версиях MacOS реализована кооперативная многозадачность, с помощью которых создается иллюзия многопроцессности: callback'и вызываются синхронно, в рамках одного callback происходит многократный вызов getNextEvent, а программы работают как единый процесс. В результате, работа программы чувствительна к количеству вызовов getNextEvent, а ресурсоемкие программы должны и вовсе выполняться с привилегиями ядра.

20. Многопроцессность на однопроцессных компьютерах

Кооперативная многопроцессность

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

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

1.Она передает управление на следующий активный процесс.

2.Текущий процесс остается активным, и через некоторое время снова получит управление.

3.При этом он получит управление так, как будто планировщик представлял собой обычную функцию и возвратил управление в точку, из которой он был вызван.

При этом планировщик переставляет текущий процесс в конец списка, а текущим делает следующий за ним в списке. Все вновь активизируемые процессы также ставятся в конец списка. Часто в литературе такой список называют очередью процессов (process queue).

Вытесняющая многопроцессность

Планировщик вызывается не из пользовательской программы, а по прерыванию от системного таймера:

1.Каждому процессу выделяется квант времени.

2.Если процесс не освободил процессор в течение этого кванта, то его снимают и переставляют в конец очереди. При этом все готовые к исполнению процессы более или менее равномерно получают управление.

Этот механизм, называемый time slicing или разделение времени, реализован практически во всех современных ОС. Общим названием для всех методов переключения задач по инициативе системы является термин вытесняющая многопроцессность. Таким образом, вытесняющая многопроцессность противопоставляется кооперативной, где переключение происходит только по инициативе самой задачи. Разделение времени является частным случаем вытесняющей многопроцессности, но используется чаще всего.

Планировщики с приоритетами

При данном подходе главной является расстановка приоритетов между процессами:

1.Многоочередные дисциплины обслуживания.

Процесс реального времени исполняется всегда, когда готов к исполнению, и в системе нет более приоритетных процессов. В этом смысле ОС и процессы разделенного времени вынуждены полагаться на его порядочность - процесс РВ должен освободить процессор в разумное время. В свою очередь, процессы разделенного времени периодически переключаются между собой.

2.Динамическое распределение приоритетов.

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

Монолитные системы и системы с микроядром

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

Исполняя системный вызов, пользовательская программа передает управление ядру. При входе в ядро планирование процессов прекращается. Ядро или исполняет запрос, или ставит его в очередь на исполнение и передает управление планировщику. Планировщик переставляет текущий процесс в конец очереди (если он остался активным), программирует таймер, задавая в качестве интервала квант времени, и передает управление следующему активному процессу.

Микроядро - это минимальная функционально полная часть операционной системы, которая обычно состоит из планировщика и базовых средств передачи данных между процессами и синхронизации.

Модули системы, не включенные в микроядро, являются отдельными процессами, взаимодействующими с ядром и друг с другом. Если пользовательскому процессу нужно открыть файл, он посылает запрос соответствующему системному процессу и ждет ответа.