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

Блок планировщика корневой модели разрабатывается главным образом как система дискретных событий MATLAB. Файл MATLAB seSchedulerClass содержит реализацию соответствующего объекта системы с дискретным событием.
В этом примере контроллер моделируется как экспортированная функциональная модель Simulink. Выполнение контроллера сопоставляется с программной задачей, которая запланирована для периодического выполнения. Задача может быть разделена на несколько сегментов (или подзадач). Из-за зависимостей данных эти сегменты должны выполняться в последовательном порядке.
Блок планировщика включает в себя следующие параметры:
Количество ядер: количество ядер, доступных для использования операционной системой.
Политика планирования: в качестве политики планирования операционной системы выберите «На основе приоритета» или «Циклический». Планирование на основе приоритетов сортирует и выполняет задачи в порядке приоритетов. Циклическая политика позволяет одинаково выполнять задачи по очереди.
Количество задач: количество задач в этой операционной системе.
Периоды задач: как часто каждая задача создается для выполнения.
Приоритеты задачи: Приоритет каждой задачи (меньшее значение указывает на более высокий приоритет).
Количество сегментов в каждой задаче: количество сегментов (подзадач), имеющихся в задаче.
Функция Simulink для каждого сегмента: исполняемые файлы, связанные с каждым сегментом задачи. Эти исполняемые файлы представлены функциями Simulink экспортируемой модели функций.
Продолжительность выполнения каждого сегмента: время завершения сегмента задачи, если он выполняется на процессоре без прерывания.
Количество взаимоисключающих ресурсов: Количество взаимоисключающих ресурсов операционной системы. Одна задача за один раз может получить и использовать ресурс. Для управления этими ресурсами операционная система использует такие механизмы, как мутексы.
Использование ресурсов каждой задачей: Cell vector. Каждый элемент вектора указывает на использование ресурсов задачей.
Блок планировщика позволяет назначать произвольное количество ядер и исследовать, как это влияет на производительность системы. Мы начинаем со сценария, в котором два ядра были назначены для выполнения двух задач управления. При достаточной мощности обработки обе системы управления с замкнутым контуром работают хорошо в ответ на изменения уставок.


Временная диаграмма планировщика показывает, что задачи управления одновременно обрабатываются обоими ядрами, причем ядра имеют среднее и сбалансированное использование.
Для сравнения, когда назначается только одно ядро, производительность Controller1 ухудшается из-за перерасхода задач (см. Plant1). Временная диаграмма четко показывает такие перерасходы задач и значительно увеличенные задержки.


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


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


Как показано на временной диаграмме, хотя одновременное выполнение разрешено с двумя ядрами, задачи обрабатываются последовательно. Используется только одно ядро. Это связано с тем, что задача должна дождаться требуемого ресурса, прежде чем его можно будет обработать.
Вы можете устранить такие непредвиденные обстоятельства, назначив больше ресурсов. Настройте блок планировщика, чтобы использовать 2 ресурса, и разрешите задаче иметь выделенный ресурс.


С каждой задачей, имеющей свой собственный ресурс, задачи обрабатываются одновременно.
Генератор объектов | Сервер сущностей | Очередь | Приобретатель ресурсов | Пул ресурсов | Средство освобождения ресурсов