Características de los lenguajes de tiempo real
Al realizar un sistema convencional (en donde el tiempo real no es tomado en cuenta), podemos escoger entre una amplia gama de lenguajes de programación, sobre todo cuando empleamos el paradigma imperativo. Pero cuando requerimos que las respuestas que produzca un sistema se generen en un determinado tiempo, es necesario emplear lenguajes de programación y/o sistemas operativos adecuados para estos sistemas. Por lo tanto, al desarrollar un sistema de tiempo real debemos elegir un lenguaje de programación que cumpla estas características.
Capacidad para manejar el tiempo:
En un sistema en tiempo real existen procesos que se ejecutarán cada cierto tiempo, por lo que mientras no se ejecuten pueden bloquearse para que no consuman recursos, por el contrario, existen tareas que se deben ejecutar de forma constante y, por lo tanto, siempre deben tener acceso al reloj del sistema.
Control del tiempo límite de una tarea: Un punto muy importante es identificar el tiempo límite que tiene cada tarea para concluirse. Muy pocos sistemas operativos o lenguajes de programación ofrecen esta característica.
Concurrencia:
La concurrencia puede administrase a partir del sistema operativo, o bien del lenguaje de programación, los puntos que se deben tomar en cuenta son:
· Creación de tareas.
· Coordinación y sincronización de tareas mediante los recursos adecuados.
· Compartición de información de forma segura.
· Concesión de recursos a cada tarea, sin generar retrasos en otras tareas por la espera de esos recursos.
· Evitar inanición en algunas tareas.
· La política de planificación de tareas.
Multiprogramación:
Para describir y construir un sistema software en función de una serie de tareas concurrentes se necesita disponer de facilidades de multiprogramación. Estas facilidades deben permitir especificar procesos software y proporcionar algún medio de comunicación y sincronización entre ellos.
Programación de dispositivos a bajo nivel
Una de las características principales de los STR es que incorporan una serie de dispositivos de E/S de propósito especial. Los lenguajes de tiempo real deberían incluir facilidades de alto nivel para programación de estas funciones de bajo nivel, entre otras:
• Facilidad para acceder a los bits individuales de los registros de E/S.
• Facilidad para encapsular el código no transportable en unidades claramente identificables.
• Un dispositivo de E/S puede ser considerado como un procesador que realiza una tarea fija. El driver del dispositivo puede ser tratado como un proceso software, uno de los varios procesos concurrentes que modernizan el sistema.
Portabilidad:
Un programa es transportable cuando es independiente del hardware, es decir, no importa en qué tipo de hardware sea implementado. En el caso de los sistemas en tiempo real es muy difícil que funcionen en cualquier tipo de hardware por el tipo de operaciones que se hacen (interrupciones, ciclo de reloj, etc.). Por lo tanto, cuando un sistema se debe migrar a otra arquitectura de software se debe identificar qué partes serán portables y cuáles se deben volver a codificar.
Seguridad:
Un lenguaje de programación es seguro cuando permite detectar la mayoría de sus errores en tiempo de compilación y no en tiempo de ejecución. La prevención de errores requiere, a menudo, la prevención de código adicional en el programa, lo que provoca sobrecargas en la velocidad de ejecución y en la ejecución del programa. Los puntos en seguridad de un lenguaje de programación son:
· Estructura modular.
· Sintaxis sin ambigüedades.
· Manejo de excepciones para evitar que un programa sea abruptamente interrumpido en caso de errores.
· Que el lenguaje fomente en el programador el desarrollo de algoritmos claros y estructurados.
Legibilidad:
Independientemente de la legibilidad que aporte el lenguaje de programación, es necesario que el programador coopere en el desarrollo de un código legible, sobre todo en sistemas de tiempo real, en donde la detección de errores a nivel de compilación es de mayor importancia.
Sencillez:
Se refiere a la facilidad que tiene un lenguaje para que pueda ser aprendido por el programador y evitar confusiones en la sintaxis del lenguaje que puedan llevar al desarrollador a crear programas erróneos.
Flexibilidad:
El lenguaje de programación debe contener las instrucciones necesarias para que los programadores puedan expresar todas sus operaciones, sin necesidad de recurrir a código embebido. Para el caso de los sistemas en tiempo real, el lenguaje de programación debe proporcionar soporte para el acceso a los dispositivos de entrada y salida.
Eficiencia:
En los sistemas de tiempo real es muy importante, anteriormente en los sistemas de tiempo real se sacrificaba sencillez o seguridad por eficiencia, pero en la actualidad, y gracias al incremento en la velocidad de equipo de cómputo, de la eficiencia se encargan los compiladores y los sistemas operativos.