В этом примере показано, как принудительно выполнять завершение службы в блоке сервера сущностей с помощью функциональных возможностей, доступных на вкладке Блок (Block) Приоритет (Preemption).
В примере показано вытеснение (замена) низкоприоритетных задач высокоприоритетной задачей в многозадачном процессоре. В модели блок сервера сущностей представляет процессор задач, представленный с возможностью обработки нескольких параллельных задач.

На следующем рисунке показано, как модель генерирует задачи с низким и высоким приоритетом.

Верхний и нижний генераторы объектов случайным образом генерируют объекты, представляющие задачи с высоким и низким приоритетом соответственно. Оба блока используют exprnd функция для генерации случайных объектов. Верхний блок использует exprnd(3), нижний использует exprnd(1), для чего требуется лицензия на Toolbox™ статистики и машинного обучения.
Блок Entity Input Switch объединяет пути новых низкоприоритетных задач с ранее вытесненными задачами, которые возвращаются из процессора (сервера) задач.
Функциональный блок Simulink запускает getCurrentTime для запуска таймера для низкоприоритетных задач. Когда происходит вытеснение, нисходящий функциональный блок Simulink определяет оставшееся время обслуживания вытесненных задач.
Блок коммутатора вывода объектов объединяет пути высокоприоритетных и низкоприоритетных задач. Задачи по объединенному пути продолжаются для обработки.
Блок сервера сущностей представляет многозадачный процессор с емкостью для нескольких задач.

Когда происходит вытеснение, в результате чего блок сервера объектов немедленно завершает обслуживание всех низкоприоритетных задач, один из двух функциональных блоков Simulink вычисляет истекшее время каждой отходящей задачи с помощью recordPreferredWaitTimes и recordNonPreferredWaitTimes функции. Два блока терминатора объектов вызывают эти функции Simulink для вычисления затраченного времени.
Если истекшее время отходящей задачи меньше времени обслуживания блока сервера сущности, что означает, что вытеснение вынудило задачу выйти из сервера раньше, блок коммутатора вывода возвращает задачу обратно для повторного входа на сервер. Если истекшее время в функции Simulink
getCurrentTime блок равен времени обслуживания блока сервера сущностей, сервер завершил полное время обслуживания задачи. Объект завершается в блоке терминатора объекта.
В блоке «Область панели мониторинга» отображаются результаты моделирования.

На графике отображается время ожидания высокоприоритетных задач. Можно отметить, что время ожидания высокоприоритетных задач значительно сокращается.
Очередь сущностей | Сервер сущностей