Как выполняется планировщик VxWorks? - PullRequest
10 голосов
/ 08 июня 2010

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

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

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

- Ashwin

Ответы [ 4 ]

13 голосов
/ 08 июня 2010

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

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

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

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

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

Информация о бонусе:

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

5 голосов
/ 15 февраля 2011

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

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

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

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

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

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

0 голосов
/ 08 июня 2010

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

0 голосов
/ 08 июня 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...