Pregunta

Tuve una discusión interesante con algunos colegas sobre las mejores estrategias de programación para tareas en tiempo real, pero no todos tenían una buena comprensión de las estrategias de programación comunes o útiles.

Para su respuesta, elija una estrategia y revísela con cierto detalle, en lugar de brindar un poco de información sobre varias estrategias.Si tiene algo que agregar a la descripción de otra persona y es breve, agregue un comentario en lugar de una nueva respuesta (si es largo o útil, o simplemente una descripción mucho mejor, utilice una respuesta).

  • ¿Cuál es la estrategia? Describa el caso general (suponga que la gente sabe qué es una cola de tareas, semáforos, bloqueos y otros fundamentos del sistema operativo fuera del propio programador).
  • ¿Para qué está optimizada esta estrategia (latencia de tareas, eficiencia, tiempo real, fluctuación, intercambio de recursos, etc.)?
  • ¿Es en tiempo real o se puede hacer en tiempo real?

Estrategias actuales:

-Adán

¿Fue útil?

Solución

Como se describe en un artículo titulado Programación de tareas en tiempo real para sistemas integrados con conciencia energética, Swaminathan y Chakrabarty describen los desafíos de la programación de tareas en tiempo real en dispositivos de bajo consumo (integrados) con múltiples velocidades de procesador y perfiles de consumo de energía disponibles.El algoritmo de programación que describen (y que en las pruebas demuestra que es solo aproximadamente un 1% peor que una solución óptima) tiene una forma interesante de programar tareas que llaman heurística LEDF.

Del periódico:

El primer plazo más temprano de energía heurística, o simplemente LEDF, es una extensión del conocido algoritmo de la fecha límite más temprana (EDF).El funcionamiento de LEDF es el siguiente:LEDF mantiene una lista de todas las tareas publicadas, llamada "Lista de listas".Cuando se liberan las tareas, la tarea con la fecha límite más cercana se elige para ser ejecutada.Se realiza una verificación para ver si la fecha límite de la tarea se puede cumplir ejecutándola en el voltaje más bajo (velocidad).Si se puede cumplir la fecha límite, LEDF asigna el voltaje más bajo a la tarea y la tarea comienza a ejecución.Durante la ejecución de la tarea, otras tareas pueden ingresar al sistema.Se supone que estas tareas se colocan automáticamente en la "lista lista".LEDF nuevamente selecciona la tarea con la fecha límite más cercana que se ejecutará.Mientras haya tareas que esperan ser ejecutadas, LEDF no mantiene al Profesor inactivo.Este proceso se repite hasta que se hayan programado todas las tareas.

Y en pseudocódigo:

Repeat forever {
    if tasks are waiting to be scheduled {
        Sort deadlines in ascending order
        Schedule task with earliest deadline
        Check if deadline can be met at lower speed (voltage)
        If deadline can be met,
            schedule task to execute at lower voltage (speed)
        If deadline cannot be met,
            check if deadline can be met at higher speed (voltage)
        If deadline can be met,
            schedule task to execute at higher voltage (speed)
        If deadline cannot be met,
            task cannot be scheduled: run the exception handler!
    }
}

Parece que la programación en tiempo real es un problema interesante y en evolución a medida que los dispositivos pequeños y de bajo consumo se vuelven más ubicuos.Creo que esta es un área en la que veremos muchas más investigaciones y espero mantenerme al tanto.

Otros consejos

Un esquema común de programación en tiempo real es utilizar multitarea preventiva basada en prioridades.
A cada tarea se le asigna un nivel de prioridad diferente.
La tarea de mayor prioridad en la cola lista será la tarea que se ejecute.Se ejecutará hasta que abandone la CPU (es decir,retrasos, esperas en un semáforo, etc...) o una tarea de mayor prioridad está lista para ejecutarse.

La ventaja de este esquema es que el diseñador del sistema tiene control total sobre qué tareas se ejecutarán y con qué prioridad.El algoritmo de programación también es simple y debería ser determinista.

Por otro lado, las tareas de baja prioridad pueden carecer de CPU.Esto indicaría un problema de diseño.

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