Pregunta

Me gustaría saber cómo se llama al planificador para que pueda cambiar las tareas. Como en incluso si su programación preventiva o programación de Round Robin, el planificador debe entrar a la imagen para hacer cualquier tipo de cambio de tareas. Supongo que una tarea de baja prioridad tiene un bucle infinito: ¿cuándo interviene y cambia el planificador a una tarea de mayor prioridad?

La consulta es: 1. ¿Quién llama al programador? [En VXWorks] 2. Si se llama a intervalos regulares, ¿cómo se implementa ese mecanismo?

Gracias por adelantado.

-Ashwin

¿Fue útil?

Solución

La respuesta simple es que VXWorks toma el control a través de una interrupción de hardware del temporizador del sistema que ocurre continuamente a intervalos fijos mientras el sistema se está ejecutando.

Aquí hay más detalle:

Cuando se inicia VXWorks, configura su hardware para generar un temporizador interrumpir cada norte milisegundos, donde norte A menudo es 10 pero depende completamente de su hardware. El intervalo del temporizador generalmente está configurado por VXWorks en su Paquete de soporte de tablero (BSP) Cuando comienza.

Cada vez que el temporizador dispara una interrupción, el sistema comienza a ejecutar el temporizador manipulador de interrupción. El controlador de interrupción del temporizador es parte de VXWorks, por lo que ahora VXWorks tiene control. Lo primero que hace es salvar el estado de la CPU (como los registros) en el Bloque de control de tareas (TCB) de la tarea de ejecución actualmente.

Luego, finalmente, VXWorks ejecuta el planificador para determinar quién se ejecuta a continuación. Para ejecutar una tarea, VXWorks copia el estado de la tarea desde su TCB en los registros de la máquina, y después de que lo hace, la tarea tiene control de la CPU.

Información de bonificación:

VXWorks proporciona manos En la lógica de conmutación de tareas para que pueda obtener una función que se llame cada vez que su tarea se adelanta.

Otros consejos

Indiv proporciona una muy buena respuesta, pero solo es parcialmente precisa.
El funcionamiento real del sistema es un poco más complejo.

El planificador se puede ejecutar como resultado de operaciones síncronas o asincrónicas.

Sincrónico se refiere a las operaciones causadas como resultado del código en la tarea de ejecución actualmente. Un excelente ejemplo de esto sería tomar un semáforo (semtake).
Si el semáforo no está disponible, la tarea de ejecución actualmente se aplicará y ya no estará disponible para ejecutar. En este punto, el programador será invocado y determinará la siguiente tarea que debe ejecutarse y realizará un interruptor de contexto.

Las operaciones asíncronas esencialmente se refieren a interrupciones. Las interrupciones del temporizador fueron muy bien descritas por Indiv. Sin embargo, varios elementos diferentes podrían hacer que una interrupción ejecute: tráfico de red, sensor, datos en serie, etc.

¡También es bueno recordar que la interrupción del temporizador no necesariamente causa un interruptor de contexto! Sí, la interrupción ocurrirá, y la tarea retrasada y los contadores de porción de tiempo se disminuirán. Sin embargo, si la porción de tiempo no expira, o no más alto Las transiciones de tareas prioritarias del estado pendiente al estado listo, entonces el planificador no se invocará en realidad, y volverá a la tarea original, en el punto exacto donde se interrumpió la ejecución.

Tenga en cuenta que el planificador no tiene su propio contexto; No es una tarea. Es simplemente código que se ejecuta en cualquier contexto del que se invoca. Ya sea desde el contexto de interrupción (asincrónico) o del contexto de tarea invocador (sincrónico).

A menos que tenga una construcción de objetivos principalmente customizado, la interrupción del temporizador invoca el programador. Sin embargo, los detalles son específicos de la plataforma.

El programador también se invoca si la tarea actual se completa o bloquea.

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