- •1. Описание задачи
- •2. Модель прецедентов
- •2.1. Прецедент «Выбор необходимой температуры»
- •2.2. Прецедент «Поддержание оптимальной частоты воздуха и заданной температуры»
- •2.3. Абстрактные прецеденты
- •2.4. Абстрактный прецедент «Планирование вентиляционной установки при аварии»
- •2.5. Абстрактный прецедент «Забор воздуха с улицы»
- •2.6. Конкретный прецедент «Выбор необходимой
- •2.7. . Конкретный прецедент «Поддержание оптимальной частоты воздуха и заданной температуры»
- •3. Статическая модель предметной области
- •4. Разбиение на объекты
- •5. Динамическая модель
- •5.1. Диаграмма кооперации для прецедента «Выбор необходимой температуры»
- •5.2. Диаграмма кооперации для прецедента «Забор воздуха с улицы»
- •6. Модель состояний
- •7. Консолидация диаграмм кооперации
- •8. Разбиение на подсистемы
- •9. Разбиение системы на задачи
- •9.1. Выделение задач в подсистеме Вентиляции
- •9.2. Выделение задач в подсистеме датчиков
- •9.3. Выделение задач в подсистеме планировщика
- •9.4. Определение интерфейсов задач
- •10. Проект распределенной системы управления вентиляцией
- •10.1. Структура подсистемы вентиляции
- •10.2. Структура подсистемы датчиков
- •10.3. Структура подсистемы планировщика
- •10.4. Интерфейсы подсистем
- •11. Проектирование скрывающих информацию классов
- •11.1. Проектирование классов интерфейса устройств
- •11.2. Проектирование класса, зависящего от состояния
- •12. Разработка детального проекта программы
- •12.1. Проектирование объектов-разъемов для Вентиляции
- •12.2. Проектирование составных задач
- •13. Конфигурирование целевой системы
- •14. Анализ производительности нераспределенной системы управления Вентиляцией
- •14.1. Сценарий для анализа производительности
- •14.2. Последовательности событий
- •14.3. Назначение приоритетов
- •14.4. Планирование в реальном времени для нераспределенной архитектуры
- •14.5. Последовательность событий «Забор воздуха с улицы»
- •14.6. Последовательность событий «Выбор необходимой температуры»
9. Разбиение системы на задачи
Далее рассматривается разбиение на задачи. Для этого необходимо проанализировать все объекты на диаграммах кооперации и применить критерии выделения задач. Мы сделаем это для каждой диаграммы по очереди.
В распределенной системе управления вентиляцией имеется по одному экземпляру Подсистемы Вентиляции для каждого вентиляции и по одному экземпляру Подсистемы Датчиков для каждого датчика (см. рис.11). Но, если трактовать систему как нераспределенную, можно кое-что упростить. В данном случае система управления вентиляцией отображается на один процессор или сильно связанную многопроцессорную конфигурацию (с общей памятью).
Важным аспектом нераспределенного решения является то, что сущностный объект Состояние и Планирование вентиляции доступен всем вентиляциям, равно как и Планировщику, то есть его можно расположить в централизованном хранилище данных. Для слабо связанной распределенной системы, в которой нет разделяемой памяти, этот подход не годится. Распределенное решение опишем в разделе 10.
9.1. Выделение задач в подсистеме Вентиляции
Рассмотрим архитектуру задач Подсистемы Вентиляции для нераспределенного случая.
На диаграмме кооперации Выбор Необходимой температуры (см. рис.5) нужно обратить внимание на объект интерфейса устройства, который получает входную информацию от актера, и затем проследить цепочку взаимодействий. Объект Интерфейс Пульта ДУ выделяется в самостоятельную задачу Интерфейс Пультов ДУ с помощью критерия асинхронного интерфейса устройства ввода. Применив инверсию задач, мы проектируем одну задачу, которая будет отвечать за все пульты, вместо того чтобы иметь по одной задаче на каждую вентиляцию. Задача Интерфейс Пультов ДУ активизируется прерыванием, возникающим при нажатии любой кнопки. Затем она считывает входную информацию от кнопки и посылает запрос Координатору Вентиляции, а сама тем временем готовится к приходу следующего прерывания. Координатору Вентиляции, который является объектом-координатором, получает сообщения от Интерфейс Пультов ДУ в данном прецеденте и от Планировщика в прецеденте Забор воздуха с улицы (см. рис.6). Он выделяется в координирующую задачу, активизируемую приходом сообщения Запрос Планировщика или Запрос Вентиляции. Состояние и План Движения Вентиляции - это пассивный объект абстрагирования данных, у которого нет своего потока управления.
Разберем диаграмму состояний Управление Вентиляцией на рис.7. Здесь есть зависящий от состояния управляющий объект, который исполняет диаграмму состояний. На этапе анализа все аспекты физического объекта «вентиляция», связанные с управлением, были отображены на управляющий объект Управление Вентиляция (см. рис.7 и 9). Если имеется несколько вентиляции, то управляются они зависимо друг от друга при помощи одного пульта ДУ. В ходе разбиения на задачи каждый объект Управление Вентиляцией отображается на отдельную задачу Контроллер Вентиляции. Любая задача исполняет диаграмму состояний для своей Вентиляции, как показано на рис.7.
Задача Контроллер Вентиляции взаимодействует с несколькими объектами интерфейса устройств вывода, которые работают непосредственно с внешней средой, в частности с датчиками, нагревательными и охлаждающими воздух устройствами. Все эти устройства пассивны (то есть не генерируют прерываний), следовательно, асинхронные задачи не нужны. Каждый запрос на вывод информации выполняется по требованию, поэтому не нужны и периодические задачи. Кроме того, вызывающая задача обязана дожидаться завершения вывода, поэтому нет необходимости и в пассивной задаче вывода. Таким образом, объект вывода на устройство не стоит выделять в самостоятельную задачу, он объединяется с задачей Контроллер Вентиляции в соответствии с критерием группировки задач. Например, если Контроллер Вентиляции инициирует действие Нагревание воздуха, он ждет ответа Система в пассивном состоянии, поскольку Вентиляция не может начать и нагревать и охлаждать одновременно.
Рассмотрим выполнение задачи Контроллер Вентиляции подробнее. Она получает сообщение Достигнута температура, находясь в Активном состоянии (см. рис.8). Затем Контроллер Вентилции посылает сообщение объекту Состояние и Планирование Вентиляции, требуя Проверить Достигнута необходимая температура. Состояние изменяется только в том случае, если в соответствии с планом Вентиляция должна остановиться (прекратить работу) по достижении данной температуры. При этом объект Состояние и Планирование Вентиляции отправляет сообщение Температура достигнута, которое переводит Контроллер Вентиляции в Пассивное состояние и инициирует действие Стоп. Объекту Интерфейс Системы нагревания\охлаждения передается сообщение Стоп (см. рис.7). Контроллер Вентиляции выходит из этого состояния только при получении данных о текущей температуре от Интерфейса Датчиков и отличии этой температуры от заданной. Таким образом, Контроллер Вентиляции и Интерфейс Системы нагревания\охлаждения неспособны работать одновременно.
Следовательно, на основе критерия группировки задач допустимо объединить объекты Интерфейс Системы нагревания\охлаждения и Интерфейс Датчиков с задачей Контроллер Вентиляции.
Диспетчер Вентиляции (всего один экземпляр в нераспределенном решении) реализуется асинхронно по отношению к задаче Контроллер Вентиляции, так как запрос к Вентиляции может прийти в любой момент. Поэтому Диспетчер Вентиляции вычленяется в отдельную задачу-координатор, которая активизируется асинхронно по событию Запрос Температуры или Запрос Планировщика и обычно исполняется независимо от задачи Контроллер Вентиляции.
Итак, в нераспределенной системе управления Вентиляциями Подсистема Вентиляции разбивается на четыре задачи: Интерфейс Пультов ДУ, Интерфейс Датчиков, Диспетчер и Контроллер Вентиляции. Имеется по одному экземпляру первых трех задач и столько экземпляров четвертой задачи, сколько есть Вентиляции. Все экземпляры задачи Контроллер Вентиляции идентичны и исполняют собственную копию диаграммы состояний Управление Вентиляции. Предварительная архитектура задач изображена на начальной диаграмме параллельной кооперации (рис.15).