Вытеснение задачи в многозадачном процессоре

В этом примере показано, как обеспечить сервисное завершение в блоке Entity Server с помощью функциональности, доступной на вкладке блока Preemption.

Модель в качестве примера для вытеснения задачи

Пример показывает вытеснение (замена) низкоприоритетных задач высокоприоритетной задачей в многозадачном процессоре. В модели блок Entity Server представляет процессор задачи, которому предоставляют возможность обработать несколько параллельных задач.

Поведение модели и результаты

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

  • Верхний и нижний Entity Generator случайным образом генерирует сущности, которые представляют высокий приоритет и низкоприоритетные задачи, соответственно. Оба блока используют exprnd функция, чтобы сгенерировать случайные сущности. Главный блок использует exprnd(3), нижняя часть использует exprnd(1), который требует лицензии Statistics and Machine Learning Toolbox™.

  • Блок Entity Input Switch объединяет пути новых низкоприоритетных задач с ранее вытесненными задачами, которые возвращаются из процессора задачи (сервер).

  • Блок Simulink Function запускает getCurrentTime функционируйте, чтобы запустить таймер на низкоприоритетных задачах. Когда вытеснение происходит, нисходящий блок Simulink Function определяет остающееся время обслуживания вытесненных задач.

  • Блок Entity Output Switch объединяет пути низкоприоритетных задач и высокого приоритета. Задачи на объединенном пути продолжают для обработки.

Блок Entity Server представляет многозадачный процессор со способностью к нескольким задачам.

Когда вытеснение происходит, заставляя блок Entity Server сразу завершить сервис всех низкоприоритетных задач, один из двух блоков Simulink Function вычисляет прошедшее время каждой задачи отъезда с помощью recordPreferredWaitTimes и recordNonPreferredWaitTimes функции. Два блока Entity Terminator вызывают их Simulink Function, чтобы вычислить прошедшие времена.

Если прошедшее время задачи отъезда меньше времени обслуживания блока Entity Server, означая, что вытеснение обеспечило задачу отбыть из сервера рано, блок Output Switch питает задачу назад, чтобы повторно войти в сервер. Если прошедшее время в getCurrentTime Simulink Function блок равен времени обслуживания блока Entity Server, сервер завершил время полного сервиса на задаче. Сущность завершает работу в блоке Entity Terminator.

Блок Dashboard Scope показывает результаты симуляции.

График отображает время ожидания для высоко низкого приоритета задачи. Можно заметить, что время ожидания высокоприоритетных задач значительно уменьшено.

Смотрите также

|

Связанные примеры

Больше о