Pregunta

Tenemos dos tareas (T1 y T2) en nuestro sistema integrado vxWorks que tienen la misma prioridad (110).
¿Cómo maneja esto el programador normal de vxWorks si ambas tareas están listas para ejecutarse?
¿Qué tarea se ejecuta primero?

¿Fue útil?

Solución

La tarea que se ejecutará primero es la tarea que se genera primero según lo realiza la tarea del programador de VxWorks.Usos de VxWorks programación basada en prioridades por defecto.Entonces, en su caso, dado que T1 y T2 tienen la misma prioridad, el que obtenga la CPU primero continuará ejecutándose indefinidamente hasta que se bloquee explícitamente (usando tareaSuspender o retraso de tarea), momento en el cual se ejecutará la otra tarea READY hasta que se bloquee, y así sucesivamente.Esto debería estar controlado por semáforos o mutex (¿mutices?)

El principal problema de la programación basada en prioridades se ilustra precisamente con este problema.¿Cómo determinamos cuánto tiempo dejar que se ejecuten estas tareas?El hecho de que tengan la misma prioridad complica las cosas.Otra preocupación es que las tareas de VxWorks que tienen alta prioridad (un número más bajo significa una prioridad más alta) pueden adelantarse a su aplicación, para lo cual debe estar preparado en su código.Estos problemas se pueden resolver utilizando programación por turnos.Se describen los problemas adicionales que plantea la programación por turnos y sus soluciones. aquí.

Otros consejos

VxWorks tiene 256 niveles de prioridad (0 es el más alto, 255 es el más bajo).En cualquier momento dado, la tarea de mayor prioridad se ejecuta en la CPU.Cada nivel de prioridad tiene conceptualmente una cola donde se ponen en cola varias tareas para su ejecución.

Tenemos 3 tareas con la misma prioridad A, B, C.Supongamos que A se está ejecutando.
Cuando A bloquea (taskDelay, SemTake, msgQReceive), B comenzará la ejecución.
Cuando A se desbloquea, se coloca al final de la cola.Ahora tenemos B, C, A.
Cuando B bloquea, C toma el control, etc.

Si la programación Round Robin (intervalo de tiempo) está habilitada, se aplica el mismo concepto, pero la tarea se coloca al final de la cola cuando finaliza su intervalo de tiempo.

Tenga en cuenta que una tarea reemplazada por una tarea de mayor prioridad NO afectará el orden de la cola.Si A se estaba ejecutando y se adelanta, continuará la ejecución cuando finalice la tarea de mayor prioridad.No se pone al final de la cola.

De forma predeterminada, el que se genera primero se ejecutará y, a menos que renuncie a la CPU, el otro nunca se ejecutará.

Puede habilitar explícitamente la operación por turnos, de lo que se cortarán en el tiempo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top