Симулируйте планировщик многоядерной системы управления

Обзор

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

Верхняя часть модели включает две области блоков:

  • Функциональные компоненты включают две системы с обратной связью. Каждый имеет пропорциональный контроллер, работающий на объекте.

  • Архитектурные компоненты включают блоки SimEvents, моделирующие задачи и планировщик этой системы управления.

Задачи моделирования и планировщик

Этот пример моделирует контроллер как модель экспортированной функции Simulink. Он преобразует выполнение контроллера в программную задачу, которую операционная система периодически планирует и выполняет. Задача может быть разделена на несколько сегментов (или подзадач). Из-за зависимостей данных эти сегменты должны выполняться в последовательном порядке.

Задача задается следующими параметрами:

  • ID: Уникальный идентификатор задачи.

  • Период: как часто задача создается для выполнения.

  • Приоритет: Приоритет задачи (меньшее значение указывает на более высокий приоритет).

  • Список выполняемых сегментов (функций): Исполняемые файлы, сопоставленные с каждым сегментом задачи. Эти исполняемые файлы представлены функциями Simulink экспортированной модели функции.

  • Длительность выполнения сегмента: время завершения сегмента задачи, если он выполняется на процессоре без прерывания.

  • Нужен дисковый ресурс ввода/вывода для каждого сегмента: Требуется ли сегмент задачи использование защищенного мьютексом общего ресурса (жесткого диска).

Для примера блок Task 2 задает задачу для второго контроллера (блок Controller2). Задача включает два сегмента, «t2_run» и «t2_write,», смоделированные как функции Simulink в seSwcController2 модели. В этих сегментах «t2_write» требует использования защищенного мьютексом общего ресурса.

Планировщик операционной системы моделируется следующими компонентами:

  • Создание задачи: Блокируйте задачу 1 и задачу 2 создают задачи и управляют состояниями задачи. Сущность SimEvents представляет образец задачи. Свойства задачи (такие как ее приоритет) моделируются как атрибуты сущности.

  • Очередь задач: После создания экземпляра задача присоединяется к очереди готовых задач, которая моделируется блоком очереди задач ОС Entity Queue. Чтобы симулировать политику планирования, основанную на неупреждающем приоритете, блок очереди сконфигурирован для сортировки задач по атрибуту taskPriority.

  • Центральный процессор: Процессор системы моделируется как блок Entity Server CPU. Он принимает сущности из очереди задач ОС и обрабатывает сущность в течение длительности, заданной параметром Segment execution parameter. В конце этой задержки вызывается соответствующая функция Simulink этого сегмента задачи, как часть действия Service complete блока.

  • Блокировка/разблокировка Mutex: Прежде чем сегмент задачи войдет в блок CPU, он должен получить необходимый ресурс в предыдущем блоке Lock Mutex. После того, как сегмент задачи завершает и выходит из блока CPU, ресурс освобождается в блоке Unlock Mutex.

  • Управление состояниями задачи: Блоки под маской Задачи 1 и Задачи 2 управляют состоянием выполнения задач. После завершения сегмента задачи, если у задачи есть последующие сегменты для выполнения, задача направляется назад в очередь задач ОС. В противном случае этот образец задачи завершается и отбрасывается.

Результаты и отображения

Блок CPU сконфигурирован с двумя ядрами. Симуляция модели генерирует следующий график Ганта.

  • Задача более высокого приоритета, Задача 2 (красные планки), запланирована на ядро 1 (y = 1).

  • Задача нижнего приоритета, Задача 1 (синие полосы), запланирована на ядро 2 (y = 2).

  • Во втором сегменте задачи 2 используется mutex DiskLock. Зеленые полосы указывают на использование (y = 3).

Исследуйте модель

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

  • В блоке CPU сконфигурируйте параметр Capacity, чтобы изменить количество ядер.

  • В блоках Task 1 и Task 2 сконфигурируйте такие параметры, как Period и Priority, чтобы изменить спецификации задачи.

Например, если мы изменим Need disk i/o ресурс для каждого параметра сегмента блока Task 1 на [0 0 1], t1_write сегмент Controller 1 должен получить mutex DiskLock, прежде чем он начнет запускаться. Симуляция генерирует график Ганта, которая иллюстрирует это изменение.

  • Обе задачи имеют сегменты, которые используют mutex DiskLock, на что указывают зеленые полосы (y = 3).

  • Третий сегмент задачи 1 теперь должен выполняться последовательно со вторым сегментом задачи 2 (см. Y = 1), поскольку оба сегмента совместно используют mutex DiskLock.

Похожие примеры

См. также

| | | | |

Похожие темы