Структура подсистемы этажа
В описанном выше распределенном решении существует по одному экземпляру Подсистемы Этажа для каждого этажа. В каждом таком экземпляре есть по одному экземпляру задач Интерфейс Кнопок Этажа, Монитор Лампочек Этажа и Монитор Лампочек Направления, то есть для каждого устройства ввода/вывода имеется отдельная задача. Архитектура задач для Подсистемы Этажа показана на рис.25. Она аналогична архитектуре для нераспределенного решения (см. рис.19) с тем отличием, что экземпляров подсистем существует несколько. Задача Интерфейс Кнопок Этажа посылает Запросы на Обслуживание, содержащие информацию о вызове на данный этаж, Планировщику. И Монитор Лампочек Этажа, и Монитор Лампочек Направления получают сообщения о состоянии в форме команд лампочкам от нескольких экземпляров задачи Контроллер Лифта. Интерфейсы задач для пересмотренной архитектуры изображены на рис.26. Рис.23. Архитектура задач для Подсистемы Лифта Рис.24. Архитектура задач для подсистемы Лифта: интерфейсы задач
Рис.25. Архитектура задач для Подсистемы Этажа
Рис.26. Архитектура задач для Подсистемы Этажа: интерфейсы задач
Структура подсистемы планировщика Существует единственный экземпляр подсистемы Планировщик, которая состоит из двух задач и одного скрывающего информацию объекта. Это объект абстрагирования данных Сводное Состояние и План Движения Лифта, который содержит текущее состояние каждого лифта и план его движения, описывающий, какие этажи лифт должен посетить (см. рис.216). В любом узле доступ к объекту Локальное Состояние и План Движения Лифта осуществляется со стороны задач Контроллер Лифта и Диспетчер Лифта. Но, чтобы Планировщик знал состояния и планы движения всех лифтов, каждый Контроллер Лифта посылает ему сообщения о состоянии, извещающие о прибытии лифта на этаж и отбытии с него. Кроме того, Диспетчер Лифта передает Планировщику два вида сообщений об обязательствах лифта с уведомлением о тех этажах, которые лифт планирует посетить: – уведомления о том, что пассажир нажал кнопку лифта; Планировщик таким образом информируется об этажах, на которые лифт заедет по указанной причине; – подтверждения, то есть ответы Подсистемы Лифта на Запросы Планировщика, требующие, чтобы лифт заехал на определенные этажи с целью забрать пассажиров. Подсистема Планировщика разбита на две задачи: Сервер Состояния и Плана Движения Лифта (серверная задача) и Планировщик Лифта (координирующая задача). Первая принимает сообщения о состоянии и обязательствах лифта и обновляет объект Сводное Состояние и План Движения Лифта, а вторая принимает Запросы на Обслуживание от нескольких экземпляров задачи Интерфейс Кнопок Этажа. Каждый раз при получении сообщения Запрос на Обслуживание задача Планировщик Лифта проверяет, собирается ли какой-нибудь лифт заехать на указанный этаж. Если нет, она выбирает лифт и посылает задаче Диспетчер Лифта, соответствующей этому лифту, сообщение Запрос Планировщика. Архитектура задач для Подсистемы Планировщика показана на рис.27. Интерфейсы задач для пересмотренной архитектуры изображены на рис.28. Объект абстрагирования данных Сводное Состояние и План Движения Лифта предоставляет операции прибыл, отбыл, обновитьПлан и выбратьЛифт (см. рис.216 и 28). Задача Сервер Состояния и План Движения Лифта вызывает операции прибыл или отбыл, когда получает сообщение о состоянии. При получении сообщения об обязательстве лифта она вызывает операцию обновитьПлан.
|