¿Por qué es tan difícil diseñar sistemas embebidos en tiempo real en multiprocesadores? ¿Cuáles son los principales desafíos y cómo se puede mejorar?

¿No estás seguro de si te estás acercando a esto como desarrollador, como investigador informático?

Los desafíos (muchos de los cuales se aplican a cualquier software) incluyen:

  • (Todos) entendiendo correctamente el problema.
  • (Todos) entendiendo correctamente los objetivos del proyecto.
  • Diseño.
  • Cambios de requisitos.
  • Calendario de proyectos comprimido.
  • Comunicar correctamente el diseño a todos los desarrolladores involucrados.
  • Complejidad de manejo. Hay muchas partes que interactúan.
  • Subdivisión de problemas a resolver en múltiples procesadores.
  • Prueba.
  • Comprender y diseñar los tiempos del peor de los casos.
  • Depuración
    – Visibilidad del estado interno en los procesadores N
    – No solo comprender la operación prevista, sino descubrir dónde salió mal, qué lo desencadenó, qué hacer al respecto.
  • Fallos de manejo, condiciones de contorno, casos límite y sus combinaciones:
    – El procesador 4 deja de funcionar.
    – Tarea 2, el procesador 3 a veces deja de responder. ¿Por qué?
    – Tarea 3, el procesador 3 todavía responde, pero tarde. ¿Por qué?
    – Tarea 4, el procesador 6 desborda su pila de forma intermitente. ¿Por qué?
    – Procesador 27, el puerto 3 tiene una alta tasa de error de bits. ¿Por qué?
    – El procesador 15 a veces no aparece en el arranque. ¿Por qué?

Algunas reflexiones sobre cómo mejorar:

  • Las mejores herramientas que puedes conseguir.
  • Herramientas de visualización.
  • Herramientas de inspección de código automatizadas.
  • Mejores prácticas para el desarrollo: pruebas unitarias, TDD, pruebas automatizadas, Agile / XP, revisiones de código, programación de pares, etc.
  • ¿Quizás una arquitectura de sistema síncrono regular?
  • Documentación.

Con el diseño de sistemas en tiempo real en multiprocesadores, hay dos preguntas por responder

  1. En qué procesador / s debe ejecutarse un trabajo particular
  2. Cómo decidir la prioridad del trabajo cuando varios trabajos están listos para ejecutarse

A medida que pasa del uniprocesador al multiprocesador, las características de rendimiento para cualquier programador en uniprocesador no se pueden aplicar directamente en la plataforma multiprocesador. El programador que puede dar una proporción de éxito del 100% (como EDF) en uniprocesador puede fallar en ciertos casos en la plataforma multiprocesador.

A medida que dividimos los trabajos en diferentes procesadores y se pueden utilizar varios mecanismos de programación, el análisis de las características en tiempo real se ha vuelto más complejo.

Una de las principales dificultades es cómo manejar múltiples tareas que comparten la misma plataforma, mientras que aún necesitan terminar sus trabajos dentro de un plazo determinado, es decir, la programación de tareas en tiempo real.

Se ha resuelto el problema de programar múltiples tareas en un procesador único (núcleo único) con ciertas restricciones, que incluyen algoritmos de programación como la programación de prioridad fija y la fecha límite más temprana primero, y métodos de gestión de recursos. Si bien aún es una pregunta abierta, ¿cómo se puede resolver el problema de programación de tareas en un sistema multinúcleo, con comunicación, interdependencias y comportamientos como la auto-suspensión.

Una solución simple sería pro-asignar tareas en núcleos específicos (programación particionada), y asegurarse de que la interdependencia no conduzca a una ejecución ilimitada. Sin embargo, a medida que las plataformas COTS se vuelven más complicadas, también se vuelve más difícil diseñar y validar un sistema en tiempo real.

Te puedo decir de la escuela de golpes duros, llamada experiencia.

Se puede poner en una sola palabra: Sincronización.

No es fácil escribir código para múltiples procesadores que interactúan entre sí. Cada CPU se ejecuta en su propio reloj y, por naturaleza, no está sincronizada con todas las demás CPU del sistema.

Si puede sincronizar todos sus procesadores con la misma señal de reloj exacta, y escribe su código en lenguaje ensamblador (por lo que no hay un compilador, que no sabe nada sobre el código en otros procesadores, lo que daña las cosas), entonces teóricamente es posible sincronizar la ejecución de sus instrucciones, aún es algo bastante difícil de implementar, pero en teoría podría hacerse. Esta es la única mejora que se me ocurre.

La forma en que resuelvo este problema es hacer que el código de cada procesador se ejecute como una “máquina de estado”, solo cambiando los estados en respuesta a algún mensaje o señal de otro procesador que se ejecute como una máquina de estado. Nuevamente, no es fácil de implementar, pero cuando lo haces bien funciona.

More Interesting

¿Cuál es el mejor instituto de capacitación para sistemas integrados en kolkata?

¿Qué funciones de un CRO se pueden realizar usando un microcontrolador y software relacionado?

¿Cómo Embedded Processor gestiona simultáneamente varias interfaces como ZigBee, RF, Serial y USB junto con WLAN en el sondeo y la gestión de datos?

¿Cuál es el tamaño de las variables integrales en un controlador de 8 bits, un controlador de 16 bits y un controlador de 32 bits, y depende totalmente de la arquitectura MCU o la arquitectura del compilador?

¿Cuál es el mejor instituto para sistemas integrados: Nirma Institute of Technology o CDAC Pune?

Cómo hacer procesamiento de datos de imagen con módulo de cámara incorporado

¿Qué dominio entre el desarrollador iOS o el ingeniero incorporado es mejor para el ingeniero electrónico?

¿Cuáles son algunas competencias para sistemas integrados y robótica para individuos?

¿Cuáles son las ventajas y desventajas de usar C ++ para sistemas integrados en comparación con la programación en C?

¿Cuáles son las mejores prácticas de diseño de sistemas integrados?

Seré entrevistado para el puesto de desarrollador de Embedded OS. ¿Qué preguntas pueden hacer?

¿Qué especialización se prefiere para un ingeniero de hardware en Google? ¿VLSI, sistemas embebidos, procesamiento de señales o sistemas de comunicación?

¿Cuáles son algunos lenguajes c-to-gates de última generación?

Cómo aprender rtos y arm, qué kit es adecuado para esto

Cómo enriquecer mis sistemas integrados y conocimiento de robótica