Вопрос

Хотелось бы узнать, как планируют, чтобы он мог переключать задачи. Как и в случае, если его превентивное планирование или расписание Round Robin - планировщик должен прийти к изображению, чтобы выполнить какое -либо переключение задач. Предположим, что задача с низким приоритетом имеет бесконечный цикл - когда планировщик вмешивается и переключается на задачу с более высоким приоритетом?

Запрос: 1. Кто называет планировщика? [В VXWORKS] 2. Если его вызывают через регулярные промежутки времени - как реализуется этот механизм?

Заранее спасибо.

-Проис

Это было полезно?

Решение

Простой ответ заключается в том, что VXWorks берет управление через аппаратное прерывание из таймера системы, которое постоянно происходит с фиксированными интервалами во время работы системы.

Вот подробнее:

При запуске VXWorks он настраивает ваше оборудование для создания таймера прерывать каждый не миллисекунды, где не часто 10, но полностью зависит от вашего оборудования. Интервал таймера обычно создается VxWorks в вашем Пакет поддержки совета (BSP) Когда это начинается.

Каждый раз, когда таймер запускает прерывание, система начинает выполнять таймер обработчик прерывания. Анкет Обработчик прерываний таймера является частью VXWORKS, поэтому теперь VXWORKS имеет управление. Первое, что он делает, это спасение состояния процессора (например, регистров) в Блок управления задачами (TCB) из в настоящее время выполняемой задачи.

Затем в конечном итоге VxWorks запускает планировщик, чтобы определить, кто работает дальше. Чтобы выполнить задачу, VXWORKS копирует состояние задачи из своего TCB в регистры машины, и после того, как это выполняет, задача имеет контроль над ЦП.

Бонусная информация:

VxWorks предоставляет крючки в логику переключения задачи, чтобы вы могли вызвать функцию, когда ваша задача преодолевается.

Другие советы

Индив дает очень хороший ответ, но он только частично точен.
Фактическая работа системы немного более сложна.

Планировщик может быть выполнен в результате синхронных или асинхронных операций.

Synchronous относится к операциям, которые вызваны в результате кода в выполнении в настоящее время. Основным примером этого было бы взять семафор (Семтейк).
Если семафор недоступен, в настоящее время выполняется задача выполнения и больше не будет доступна для выполнения. На этом этапе планировщик будет вызван и определит следующую задачу, которая должна выполнить, и будет выполнять переключатель контекста.

Асинхронные операции по существу относятся к прерываниям. Прерывания таймера были очень хорошо описаны Indiv. Тем не менее, ряд различных элементов могут привести к выполнению прерывания: сетевой трафик, датчик, последовательные данные и т. Д.

Также хорошо помнить, что прерывание таймера не обязательно вызывает контекст! Да, прерывание произойдет, и задержка задачи и счетчики срез времени будут уменьшены. Однако, если срок действия времени не истек, или нет выше Приоритетные задачи переходят от подготовленного к состоянию готового, тогда планировщик фактически не будет вызван, и вы вернетесь к исходной задаче, в той точке, где выполнение было прервано.

Обратите внимание, что планировщик не имеет своего собственного контекста; Это не задача. Это просто код, который выполняется в любом контексте, из которого он используется. Либо из контекста прерывания (асинхронного), либо из контекста задачи (синхронно).

Если у вас нет основной целевой сборки, планировщик вызывает прерывание таймера. Детали являются специфичными для платформы, хотя.

Планировщик также вызывается, если текущая задача завершается или блокирует.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top