Параметры задач в нераспределенной системе управления лифтами приведены в табл.1. Время ЦП для каждой задачи включает затраты на контекстное переключение (не более двух переключений на задачу). Затраты на обработку сообщений поровну разделены между задачей-отправителем и задачей-получателем. Периоды всех задач, участвующих в данной последовательности обработки событий, одинаковы: они определяются поступлением внешнего события, послужившего началом последовательности. Задача Диспетчер Лифта рассматривается так, словно представляет собой две разные задачи, поскольку встречается в двух разных последовательностях. В первом случае ее период равен 100 мс (частота активизации Интерфейса Кнопок Лифта), а во втором – 200 мс (частота активизации Интерфейса Кнопок Этажа).
Заметим также, что периоды трех асинхронных задач интерфейса устройств (все они управляются прерываниями) кратны друг другу, то есть эти задачи могут быть готовы к активизации практически одновременно. Поскольку прерывания нужно обрабатывать максимально быстро, данным задачам следует назначить наивысшие приоритеты. Но тогда будет нарушено правило частотной монотонности: например, задача Интерфейс Кнопок Этажа, имея более длинный период, чем Контроллер Лифта, получит тем не менее более высокий приоритет.
Задачи, управляемые прерываниями, исполняются с более высоким приоритетом, чем остальные задачи в данной последовательности. Из-за этого всю совокупность задач нельзя привести к одной эквивалентной задаче с тем же периодом, но потребляющей большее время ЦП. Придется проектировать их как разные задачи с одинаковым периодом.
Рассмотрим, какие приоритеты должен назначить задачам проектировщик (см. табл.1). Если не считать трех задач, управляемых прерываниями, то остальным задачам присваиваются естественные частотно-монотонные приоритеты. Задаче Интерфейс Датчиков Прибытия определяется наивысший приоритет, что, кстати, согласуется с алгоритмом частотной монотонности. Но уже задачам Интерфейс Кнопок Лифта и Интерфейс Кнопок Этажа назначаются второй и третий по порядку приоритеты, что противоречит этому алгоритму. Следующий приоритет, согласно алгоритму частотной монотонности, получает задача Контроллер Лифта, у которой самый короткий период. Хотя задача Диспетчер Лифта участвует в двух последовательностях, приоритет ей назначается в соответствии с более коротким периодом.
Таблица 1. Параметры задач для планирования в реальном времени на примере системы управления лифтами
Планирование в реальном времени для нераспределенной архитектуры
Сложение коэффициентов использования ЦП для всех задач в табл.1 дает полный коэффициент 0,4, то есть намного меньше значения 0,69, полученного из теоремы о верхней границе. Но, поскольку присвоение приоритетов произведено с нарушением принципа частотной монотонности, необходим более детальный разбор.
Анализ выполняется для каждой последовательности, так как критично время, требующееся для завершения именно последовательности, а не каждой задачи в отдельности. Нужно принять во внимание вытеснение задачами с более высоким приоритетом, а также блокировку низкоприоритетными задачами.
Вытеснение иногда возникает из-за задач в других последовательностях событий, имеющих более короткий период и более высокий приоритет. Они способны вытеснять любую задачу несколько раз. Причиной вытеснения бывают также более приоритетные задачи с большими периодами, например высокоприоритетные задачи, управляемые прерываниями, которые принадлежат последовательностям событий с длинными периодами. Но такого рода вытеснения не могут происходить более одного раза. Затраты времени на блокировку связаны с низкоприоритетными задачами, захватившими ресурс, который нужен высокоприоритетной задаче, в данном случае речь идет об объекте Состояние и План Движения Лифта.
Ниже приводится анализ планирования в реальном времени для каждой последовательности событий. Его результаты представлены на временной диаграмме (рис.36): предполагается худший случай, когда все внешние прерывания возникают одновременно. На рисунке изображены только задачи и обмен сообщениями между ними. Доступ к пассивным объектам не показан, так как он происходит в контексте потока управления задачи.