Как vxWorks справляется с двумя задачами с одинаковым приоритетом? - PullRequest
3 голосов
/ 17 сентября 2008

У нас есть две задачи (T1 и T2) во встроенной системе vxWorks с одинаковым приоритетом (110).
Как с этим справляется обычный планировщик vxWorks, если обе задачи готовы к запуску?
Какая задача выполняется первой?

Ответы [ 3 ]

5 голосов
/ 17 сентября 2008

Задача, которая будет запускаться первой, - это задача, которая запускается первой, как реализовано задачей планировщика VxWorks. VxWorks по умолчанию использует планирование на основе приоритетов . Таким образом, в вашем случае, поскольку T1 и T2 имеют одинаковый приоритет, какой бы процессор ни был получен первым, процессор будет продолжать работать неопределенно долго, пока он не будет явно заблокирован (используя taskSuspend или taskDelay ) в какое время другая задача READY будет выполняться до тех пор, пока она не будет заблокирована, и так далее. Это должно контролироваться семафорами или мьютексами (мутами?)

Основная проблема планирования на основе приоритетов освещается именно этой проблемой. Как мы определяем, как долго будут выполняться эти задачи? Тот факт, что они имеют одинаковый приоритет, усложняет ситуацию. Другая проблема заключается в том, что задачи VxWorks, которые имеют высокий приоритет (меньшее число означает более высокий приоритет), могут опередить ваше приложение, к которому вы должны быть готовы в своем коде. Эти проблемы могут быть решены с помощью циклического планирования . Дополнительные проблемы, связанные с циклическим планированием и решениями, все описаны здесь .

2 голосов
/ 18 сентября 2008

VxWorks имеет 256 уровней приоритета (0 - самый высокий, 255 - самый низкий). В любой момент времени задача с наивысшим приоритетом выполняется на процессоре. Каждый уровень приоритета концептуально имеет очередь, в которой несколько задач стоят в очереди на выполнение.

У нас есть 3 задачи с одинаковым приоритетом A, B, C. Предположим, что A выполняется.
Когда блоки A (taskDelay, SemTake, msgQReceive), B начнут выполнение.
Когда A разблокируется, он помещается в конец очереди. Теперь у нас есть B, C, A.
Когда B блокирует, C вступает во владение, и т.д ...

Если включено циклическое планирование (квантование по времени), применяется та же концепция, но задача помещается в конец очереди, когда ее временной интервал заканчивается.

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

1 голос
/ 19 мая 2009

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

Вы можете явно включить циклический перебор, чем они будут умножены на время.

...