Задача в vxworks - PullRequest
       30

Задача в vxworks

3 голосов
/ 12 октября 2011

Когда мы выполняем taskSpawn, задача создается в vxworks.Что на самом деле является задачей.Есть ли какая-либо связь с потоком.

В моем понимании vxworks - это операционная система, основанная на потоках.

Может кто-нибудь помочь мне с реальной разницей между задачей / потоком / процессом в реальном сценарии.

Где-то я видел задачу - выполнение набора инструкций.Если это так, то поток также имеет некоторый набор инструкций, поэтому мы можем назвать поток как задачу.

Пожалуйста, помогите

Ответы [ 5 ]

7 голосов
/ 13 октября 2011

Поток - это концепция, обычно используемая в ОС, поддерживающей модели процессов (Unix / Linux / Windows), где вы запускаете процесс.
Этот процесс может иметь один поток выполнения (как простая программа на Си).Или вы можете создать несколько потоков для параллельного выполнения определенных операций в области памяти текущего процесса.

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

Задачи являются независимыми исполнительными единицами.Они могут совместно использовать ресурсы, иметь общую память и т. Д., Но планировщик выполняет задачи на основе очень определенных критериев.Как правило, задачей с наивысшим приоритетом в системе является задача, которая будет выполняться в любой момент времени.

Когда задача выполнена / спит / заблокирована в ожидании ресурсов, следующая задача с наивысшим приоритетом в системе будетзапустите.

Для вашей цели вы, вероятно, можете думать о задаче как о потоке.

3 голосов
/ 13 октября 2011

Задача - абстрактное понятие в дизайне ОС. Задача - это отдельный контекст выполнения. Задача имеет пространство памяти, в котором она работает, где хранятся ее данные и код. Это пространство памяти может использоваться или не использоваться совместно с другими задачами. Задача имеет состояние (например, запущена, остановлена, убита ...), у нее (обычно) есть стек. Задача имеет приоритет над другими задачами.

Примером такой задачи является задача VxWorks. Другой поток Linux.

В Linux (а также, я полагаю, и в последней версии VxWorks) существует концепция связанной группы задач. Задачи, принадлежащие одной и той же группе, совместно используют пространство памяти и несколько других ресурсов (например, обработчики файлов). Процесс Linux - это такая группа задач.

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

Надеюсь, это помогло.

0 голосов
/ 06 января 2015

задача и потоки похожи на процесс. но разница в том, что потоки не имеют отдельного пространства памяти для своих собственных, они запускаются под pcb (стеком) самого процесса. Но в то время как задача имеет свою собственную область стека и является легковесным процессом, т. е. tcb намного меньше по сравнению с pcb, поэтому переключение контекста или переключение задач может произойти быстрее. поскольку vxworks работает с rtos, а задержка переключения должна быть очень низкой, он занимается задачами.

0 голосов
/ 23 октября 2014

В дополнение к существующим anwers: Если вам когда-нибудь понадобится создать потоки POSIX в вашей системе VxWorks (что возможно путем включения POSIX в конфигурацию ядра и вызова pthread_create ()), вы заметите, что эти потоки будут отображаться как задачи в списке задач (введите «i» C оболочка).

Следовательно, задачи и потоки очень похожи. VxWorks даже переносит потоки POSIX как задачи, поэтому они могут обрабатываться параллельно с существующими собственными задачами.

0 голосов
/ 22 мая 2013

В vxWorks задачи - это работающий модуль.

Задача имеет TCB (блок управления задачами) с уникальным пространством задач и определенным приоритетом (как вы определили в функции taskSpawn).

Планировщик vxWorks может запускать только задачу, это минимальная работоспособная единица (планировщик может запускать само ядро, а прерывание может выполняться в системе).

Решение о том, какую задачу запускать, будет основываться на состоянии задачи (должно быть в состоянии ГОТОВ) и приоритете задачи (в vxWorks самый высокий приоритет - это меньшее число).

Обратите внимание, что несколько задач могут иметь один и тот же приоритет, и тогда ядро ​​будет запускать разные задачи в соответствии с настроенной вами схемой (FIFO или циклический перебор).

В vxWorks все задачи имеют одинаковое пространство памяти (включая пространство памяти ядра). По этой причине WindRiver добавил механизм «как процесс» из vxWorks 6.x. Процесс имеет свое собственное «пространство виртуальной памяти», защищенное MMU.

Просто подведу итог для вас:

Задачи имеют одинаковое пространство памяти в системе.

Потоки имеют одинаковое пространство памяти в своем процессе.

Пространство памяти процесса, защищенное MMU.

...