Этот пример показывает, как обеспечить сервисное завершение в блоке Entity Server с помощью функциональности, доступной на вкладке блока Preemption.
Пример показывает вытеснение (замена) низкоприоритетных задач высокоприоритетной задачей в многозадачном процессоре. В модели блок Entity Server представляет процессор задачи, которому предоставляют возможность обработать несколько параллельных задач.
Следующие графические показы, как модель генерирует и низкий приоритет и высокоприоритетные задачи.
Верхний и нижний Генератор Сущности случайным образом генерирует сущности, которые представляют высокий приоритет и низкоприоритетные задачи, соответственно. Оба блока используют функцию exprnd
, чтобы сгенерировать случайные сущности. Главный блок использует exprnd(3)
, нижняя часть использует exprnd(1)
, который требует лицензии Statistics and Machine Learning Toolbox™.
Входной блок switch Сущности объединяет пути новых низкоприоритетных задач с ранее вытесненными задачами, которые возвращаются из процессора задачи (сервер).
Функциональный блок Simulink запускает функцию getCurrentTime
, чтобы запустить таймер на низкоприоритетных задачах. Когда вытеснение происходит, нисходящий Функциональный блок Simulink определяет остающееся время обслуживания вытесненных задач.
Блок switch Сущности Вывод объединяет пути низкоприоритетных задач и высокого приоритета. Задачи на объединенном пути продолжают для обработки.
Блок Entity Server представляет многозадачный процессор со способностью к нескольким задачам.
Когда вытеснение происходит, заставляя блок Entity Server сразу завершить сервис всех низкоприоритетных задач, один из двух Функциональных блоков Simulink вычисляет прошедшее время каждой задачи отъезда с помощью функций recordNonPreferredWaitTimes
и recordPreferredWaitTimes
. Два блока Терминатора Сущности вызывают эти Функция Simulink, чтобы вычислить прошедшие времена.
Если прошедшее время задачи отъезда является меньше, чем время обслуживания блока Entity Server, означая, что вытеснение обеспечило задачу отбыть из сервера рано, Выходной блок switch питает задачу назад, чтобы повторно войти в сервер. Если прошедшее время в
блоке Simulink Function getCurrentTime
равно времени обслуживания блока Entity Server, сервер завершил время полного сервиса на задаче. Сущность останавливается в блоке Entity Terminator.
Блок Dashboard Scope показывает результаты симуляции.
График отображает время ожидания для высоко низкого приоритета задачи. Можно заметить, что время ожидания высокоприоритетных задач значительно уменьшено.
Очередь сущности | Сервер сущности