INSTITUTO TECNOLÓGICO DE MAZATLÁN
INGENIERÍA ELECTRÓNICA
Micros Avanzados
ALUMNO:
Garzón Osuna José Salvador
Sánchez Gómez Stephanie
Tisnado Gárate Víctor Alonso
PROFESOR:
M. C. Rufino Juan Domínguez Arellano
Sistemas en Tiempo Real
Mazatlán Sinaloa 16 Octubre 2012
Corsario I No. 203 Col. Urías, C.P. 82070, A.P. 757, Mazatlán, Sin. Tels. (669) 986-58-28 / 983-84-00 / 990-02-39, Fax: (669) 984-72-09
e-mail: [email protected], www.itmazatlan.edu.mx
SUBSECRETARÍA DE EDUCACIÓN SUPERIOR
DIRECCIÓN GENERAL DE EDUCACIÓN SUPERIOR TECNOLÓGICA INSTITUTO TECNOLÓGICO DE MAZATLÁN
INTRODUCCIÓN
Es bien sabido que los Sistemas de Tiempo Real pueden llevar el control eventos que ocurren en el mundo real, por lo tanto es un sistema que responde a un estímulo externo dentro de un tiempo especificado.
Entonces los sistemas de tiempo real interactúan con el entorno que se le presente y pueden ejecutar acciones de respuesta para determinados estímulos de dicho entorno.
Este tipo de sistemas tienen muchas características que benefician a todo el individuo que pretenda interactuar con ellos.
DEFINICIÓN:
Básicamente los sistemas de tiempo real se definen como sistemas informáticos que tienen la capacidad de interactuar rápidamente con su entorno físico, el cual puede realizar funciones de supervisión o control para su mismo beneficio.
Todos los sistemas de tiempo real tienen la facultad de ejecutar actividades o tareas en de intervalos de tiempo bien definidos.
Los sistemas de tiempo real (STR) son sistemas informáticos que se encuentran en multitud de aplicaciones, desde la electrónica de consumo hasta el control de complejos procesos industriales.
Están presentes en
prácticamente todos los aspectos de nuestra sociedad como, teléfonos móviles, automóviles, control de tráfico, ingenios espaciales, procesos automáticos de fabricación, producción de energía, aeronaves, etc. Además, el auge de los sistemas de tiempo real está en constante aumento, ya que cada vez mas maquinas se fabrican incluyendo un número mayor de sistemas controlados por computadora. Un ejemplo cercano es la industria del automóvil (ABS, airbag, etc.).Otro ejemplo cotidiano son los electrodomésticos de nueva generación, que incluyen Sistemas de tiempo real para su control y temporización. Hoy en día son tantas las aplicaciones de estos sistemas que su número duplica actualmente al de los sistemas informáticos “convencionales” o de propósito general. Las previsiones son que esta diferencia vaya en constante aumento, debido fundamentalmente el elevado crecimiento de la automatización en casi todas las facetas de la vida cotidiana.
ejemplo, el sistema de control de inyección de combustible en un motor alternativo (como los que están presentes en los automóviles) debe realizar la inyección de la mezcla dentro del intervalo de tiempo marcado por la rotación del motor, de otro modo el motor no funcionará correctamente. En este caso, se trata de un sistema de tiempo real empotrado, es decir, el sistema informático se encuentra físicamente incluido en un sistema de ingeniería más complejo. La mayoría de los sistemas de tiempo real son sistemas empotrados y suelen tener restricciones adicionales en cuanto al uso de recursos computacionales con respecto a otros tipos de sistemas informáticos.
Todas las tareas son ejecutadas inmediatamente en una forma concurrente, esto es para sincronizar el funcionamiento del sistema con la simultaneidad de acciones que se presentan en el mundo físico.
Planificación de tareas
En los sistemas de tiempo real los intervalos de tiempo en que se ejecutan las tareas se definen por un esquema de activación y por un plazo de ejecución. En lo que respecta al esquema de activación puede ser periódico, es decir en intervalos regulares, o también puede ser aperiódico, es decir, en respuesta a sucesos externos que ocurren de forma irregular.
La mayoría de los STR son utilizados cuando existen requerimientos de tiempo muy rígidos en las operaciones o en el flujo de datos, generalmente son requeridos como sistemas de control en una aplicación dedicada.
La eficiencia de los STR no solo depende de la exactitud de los resultados de cómputo, sino también del momento en que los entrega. La predictibilidad es su característica principal de este tipo de sistemas.
Este tipo de sistemas se caracterizan por tener que producir una salida, como respuesta a una entrada, en un tiempo determinado. El intervalo de tiempo que se presenta entre la entrada y la salida debe ser muy pequeño para que la respuesta temporal del sistema sea aceptable.
Cuando se diseña un sistema de tiempo real se pasa por varias fases:
1. Se identifican todas las tareas que se tienen que realizar y también se identifican las restricciones temporales que se pretenden cumplir.
2. Posteriormente se codifican los programas que ejecutarán las tareas 3. Posteriormente se pasa a medir el tiempo de cómputo de cada tarea y
se realiza un análisis de planificabilidad.
GENERALIDADES DE LOS STR
Requiere técnicas de análisis, diseño y prueba que son desconocidas en otras áreas de aplicación.
Esta muy acoplado con el mundo externo.
Opera bajo condiciones de rendimiento muy rigurosas.
Esta conducido por el hardware, software, por las características del sistema operativo, por requisitos de la aplicación, así como por aspectos de diseño.
ELEMENTOS QUE COMPONEN UN STR
Aspectos de integración y de rendimiento. Manejo de Interrupciones.
Bases de Datos de Tiempo Real. Sistemas Operativos de Tiempo Real. Lenguajes de Tiempo Real.
Sincronización y comunicación de tareas.
CLASIFICACIÓN DE LOS SISTEMAS DE TIEMPO REAL
Los sistemas de tiempo real pueden ser de dos tipos, esto es en función de su severidad en el tratamiento de los errores que puedan presentarse:
Sistemas de tiempo real blandos o Soft real-time systems: estos pueden tolerar un exceso en el tiempo de respuesta, con una penalización por el incumplimiento del plazo. Estos sistemas garantizan que las tareas críticas se ejecutan en tiempo. Aquí los datos son almacenados en memorias no volátiles, no utilizan técnicas de memoria virtual ni tiempo compartido, estas técnicas no pueden ser implementadas en hardware.
Sistemas de tiempo real duros o Hard real-time systems: aquí la respuesta fuera de término no tiene valor alguno, y produce la falla del sistema. Estos sistemas tienen menos utilidades que los implementados por hard, por ejemplo no pueden utilizarse para control industrial y robótico. Pero si para multimedia, supervisión de controles industriales y realidad virtual.
APLICACIONES DE LOS STR
Los sistemas de tiempo real pueden tener muchísimas y con el paso del tiempo y el desarrollo de nuevas tecnologías surgen nuevos campos de utilización para estos sistemas.
Las áreas más comunes donde se aplican los servicios de un STR podrían ser: a. Las telecomunicaciones
b. Los sistemas multimedia c. El control industrial d. La robótica
e. Los sistemas de aviónica y espaciales f. Los ferrocarriles.
g. Automóviles.
j. Sistemas embebidos.
Sistemas Operativos en tiempo real
Un sistema operativo de tiempo real (SOTR o RTOS -Real Time Operating System en inglés) es un sistema operativo que ha sido desarrollado para aplicaciones de tiempo real. Como tal, se le exige corrección en sus respuestas bajo ciertas restricciones de tiempo. Si no las respeta, se dirá que el sistema ha fallado. Para garantizar el comportamiento correcto en el tiempo requerido se necesita que el sistema sea predecible (determinista).
Usado típicamente para aplicaciones integradas, normalmente tiene las siguientes características:
No utiliza mucha memoria
Cualquier evento en el soporte físico puede hacer que se ejecute una tarea Multi-arquitectura (código portado a cualquier tipo de CPU)
Muchos tienen enfermedades predecibles para eventos electrónicos
Se caracterizan por presentar requisitos especiales en cinco áreas generales:
Determinismo Sensibilidad
Control del usuario Fiabilidad
Tolerancia a los fallos
Procesador
Este tipo de sistemas operativos no es necesariamente eficiente en el sentido de tener una capacidad de procesamiento alta. El algoritmo de programación especializado, y a veces una tasa de interrupción del reloj alta pueden interferir en la capacidad de procesamiento.
Aunque para propósito general un procesador moderno suele ser más rápido, para programación en tiempo real deben utilizarse procesadores lo más predecibles posible, sin paginación. Todos estos factores en un procesador añade una aleatoriedad que hace que sea difícil demostrar que el sistema es viable, es decir, que cumpla con los plazos de tiempo para la ejecución de las tareas y la atención de los servicios o interrupciones.
Un sistema operativo de tiempo real puede ser implementado en microcontroladores o procesadores digitales de señal "DSP's", así, se pueden desarrollar aplicaciones embebidas en diferentes áreas de la electrónica.
Diseño
Hay dos diseños básicos:
Un sistema operativo guiado por eventos sólo cambia de tarea cuando un
Un diseño de compartición de tiempo cambia de tareas por interrupciones
del reloj y por eventos.
El diseño de compartición de tiempo gasta más tiempo de la UCP en cambios de tarea innecesarios. Sin embargo, da una mejor ilusión de multitarea. Normalmente se utiliza un sistema de prioridades fijas.
Uno de los algoritmos que suelen usarse para la asignación de prioridades es el Rate-Monotonic Schedule. Si el conjunto de tareas que tenemos es viable con alguna asignación de prioridades fijas, también es viable con el Rate-Monotonic Schedule, donde la tarea más prioritaria es la de menor periodo. Esto no quiere decir que si no es viable con Rate-Monotonic Schedule no sea viable con asignaciones de prioridad variable. Puede darse el caso de encontrarnos con un sistema viable con prioridades variables y que no sea viable con prioridades fijas.
Programación
En los diseños típicos, una tarea tiene tres estados: ejecución, preparada y bloqueada. La mayoría de las tareas están bloqueadas casi todo el tiempo. Solamente se ejecuta una tarea por UCP. La lista de tareas preparadas suele ser corta, de dos o tres tareas como mucho.
El problema principal es diseñar el programador. Usualmente, la estructura de los datos de la lista de tareas preparadas en el programador está diseñada para que cada búsqueda, inserción y eliminación necesiten interrupciones de cierre solamente durante un período muy pequeño, cuando se buscan partes de la lista muy definidas.
Esto significa que otras tareas pueden operar en la lista asincrónicamente, mientras que se busca. Una buena programación típica es una lista conectada bidireccional de tareas preparadas, ordenadas por orden de prioridad. Hay que tener en cuenta que no es rápido de buscar sino determinista. La mayoría de las listas de tareas preparadas sólo tienen dos o tres entradas, por lo que una búsqueda secuencial es usualmente la más rápida, porque requiere muy poco tiempo de instalación.
El tiempo de respuesta crítico es el tiempo que necesita para poner en la cola una nueva tarea preparada y restaurar el estado de la tarea de más alta prioridad.
En un sistema operativo en tiempo real bien diseñado, preparar una nueva tarea necesita de 3 a 20 instrucciones por cada entrada en la cola y la restauración de la tarea preparada de máxima prioridad de 5 a 30 instrucciones. En un procesador 68000 20MHz, los tiempos de cambio de tarea son de 20 microsegundos con dos tareas preparadas.
Cientos de UCP MIP ARM pueden cambiar en unos pocos microsegundos.
Comunicación entre Tareas
Uno de los métodos utiliza semáforos. En general, el semáforo binario puede estar cerrado o abierto. Cuando está cerrado hay una cola de tareas esperando la apertura del semáforo.
Los problemas con los diseños de semáforos son bien conocidos: inversión de prioridades y puntos muertos (deadlocks).
En la inversión de prioridades, una tarea de mucha prioridad espera porque otra tarea de baja prioridad tiene un semáforo. Si una tarea de prioridad intermedia impide la ejecución de la tarea de menor prioridad, la de más alta prioridad nunca llega a ejecutarse. Una solución típica sería otorgar a la tarea que tiene el semáforo la prioridad de la tarea más prioritaria de las que están esperando dicho semáforo. Esto se denomina algoritmo de herencia básica de prioridad.
En un punto muerto, dos tareas (T1,T2) pretenden adquirir dos semáforos (semA,semB) en orden inverso. En este caso si T1 adquiere semA y T2 adquiere semB cuando intenten adquirir el segundo semáforo no podrán hacerlo ya que lo tiene la otra tarea. De esta forma entran en un punto muerto del que ninguna de las dos tareas puede salir sin intervención externa. Esto se resuelve normalmente mediante un diseño por ej. Obligando a adquirir los semáforos en un orden concreto.
La otra solución es que las tareas se manden mensajes entre ellas. Esto tiene los mismos problemas: La inversión de prioridades tiene lugar cuando una tarea está tratando un mensaje de baja prioridad, e ignora un mensaje de más alta prioridad en su correo. Los puntos muertos ocurren cuando dos tareas realizan envíos bloqueantes (se quedan en la función de envío esperando a que el receptor reciba el mensaje). Si T1 manda un mensaje de forma bloqueante a T2 y T2 manda un mensaje de igual forma a T1 ninguna de las dos tareas saldrá de la función de envío quedando ambas bloqueadas ya que no podrán llegar a la función de recepción. Puede resolverse reordenando envíos y recepciones o empleando envíos no bloqueantes o temporizados. Aunque su comportamiento en tiempo real es algo más difícil de analizar que los sistemas de semáforos, los sistemas basados en mensajes normalmente son más sencillos de desarrollar que los sistemas de semáforo.
Interrupciones
Las interrupciones son la forma más común de pasar información desde el mundo exterior al programa y son, por naturaleza, impredecibles. En un sistema de tiempo real estas interrupciones pueden informar diferentes eventos como la presencia de nueva información en un puerto de comunicaciones, de una nueva muestra de audio en un equipo de sonido o de un nuevo cuadro de imagen en una videograbadora digital.
mensaje a una tarea o solucionando un semáforo que está siendo esperado por una tarea. El programador se encarga de activar la tarea y esta se encarga de adquirir la información y completar el procesamiento de la misma.
El tiempo que transcurre entre la generación de la interrupción y el momento en el cual esta es atendida se llama latencia de interrupción. El inverso de esta latencia es una frecuencia llamada frecuencia de saturación, si las señales que están siendo procesadas tienen una frecuencia mayor a la de saturación, el sistema será físicamente incapaz de procesarlas. En todo caso la mayor frecuencia que puede procesarse es mucho menor que la frecuencia de saturación y depende de las operaciones que deban realizarse sobre la información recibida.
Memoria
Hay dos problemas con el reparto de la memoria en SOTR (sistemas operativos en tiempo real).
El primero, la velocidad del reparto es importante. Un esquema de reparto de memoria estándar recorre una lista conectada de longitud indeterminada para encontrar un bloque de memoria libre; sin embargo, esto no es aceptable ya que el reparto de la memoria debe ocurrir en un tiempo fijo en el SOTR.
En segundo lugar, la memoria puede fragmentarse cuando las regiones libres se pueden separar por regiones que están en uso. Esto puede provocar que se pare un programa, sin posibilidad de obtener memoria, aunque en teoría exista suficiente memoria. Una solución es tener una lista vinculada LIFO de bloques de memoria de tamaño fijo. Esto funciona asombrosamente bien en un sistema simple.
La paginación suele desactivarse en los sistemas en tiempo real, ya que es un factor bastante aleatorio e impredecible, que varía el tiempo de respuesta y no nos permite asegurar que se cumplirán los plazos, debido al trasiego de páginas de memoria con un dispositivo de almacenamiento (trashing)
Ejemplos:
QNX
MaRTE OS EasyTasks LynxOS
RedHat Embedded Linux eCos (Linux)
SOOS
Ubuntu Studio versión 8.04,
sólo el núcleo (Linux)
VxWorks Windows CE
Linchos UNIX (Some)
RTAI Symbian
Lenguaje de programación
Un lenguaje de programación de sistemas de tiempo real debe facilitar la realización de sistemas
– Concurrentes – Fiables –Puntuales
Las características más importantes para la realización de programas en pequeña escala son
– Léxico
– Tipos de datos y objetos – Instrucciones
– Subprogramas
– Estructura de programas
Un lenguaje imperativo programa mediante una serie de comandos, agrupados en bloques y compuestos de órdenes condicionales que permiten al programa retornar a un bloque de comandos si se cumple la condición. Estos fueron los primeros lenguajes de programación en uso y aún hoy muchos lenguajes modernos usan este principio.
No obstante, los lenguajes imperativos estructurados carecen de flexibilidad debido a la secuencialidad de las instrucciones.
ADA
Es un lenguaje imperativo, descendiente de Pascal
estructura en bloques
fuertemente tipado
Es un lenguaje pensado para realizar sistemas empotrados de gran dimensión Dos versiones normalizadas
Ada 83 (ISO 8652:1987)
Ada 95(ISO 8652:1995)
Desarrollado por iniciativa y bajo la supervisión del DoD
(Department of Defense) de los EE.UU.
TIPO DE TAREAS De Tiempo Crítico
Las tareas deben completarse antes de su plazo de respuesta Acríticas
Las tareas deben completarse tan pronto como sea posible Tareas Periódicas
Tareas Aperiódicas
Se activan una sola vez, p.ej, dispara un misil y verifica el blanco.
Tipos de Garantías
Determinística - Tarea i siempre terminará antes de su plazo
Estadística - Tarea i terminará antes de su plazo la mayor parte del tiempo. terminará lo mas pronto posible.
Dando un estímulo, el sistema debe producir una respuesta dentro de un tiempo específico
Estimulación periódica. Es la que se dá en intervalos de tiempo predecibles
Por ejemplo, un sensor de temperatura debe estar midiendo 10 veces por segundo
Estimulación no periódica. Es la cual ocurre en instantes impredecibles
CONCLUSIONES
Los sistemas de tiempo real (STR) juegan un papel muy importante ya que como todo sistema debe tener la capacidad de satisfacer tareas en un tiempo de respuesta mínimo.
Los STR están presentes en todos los aspectos de nuestra vida diaria como aeronaves, teléfonos móviles, automóviles, entre muchas otras aplicaciones que nos benefician ampliamente.
Se podría también concluir que los sistemas de tiempo real están en constante desarrollo puesto que con los avances tecnológicos se construyen nuevas maquinas que operan en tiempo real y que por consiguiente necesitan tener sistemas controlados por una computadora que tenga la capacidad de interactuar con el mundo físico.
Los sistemas de tiempo real básicamente están integrados en un sistema de ingeniería más avanzado el cual realiza funciones de control, por lo que también se les llama sistemas empotrados o embedded systems.
Los sistemas de tiempo real suelen tener un reloj y un timer para verificar los tiempos reales de respuesta del sistema. Se dice que no son términos iguales ya que un reloj le sirve al sistema únicamente para llevar un conteo, en cambio un timer es un dispositivo que cuando llega a un estado determinado tiene la capacidad de notificar que está pasando, pero uno es el complemento del otro.
Bibliografía
Burns Alan y Wellings Andy-Sistemas de Tiempo Real y Lenguajes de Programación, Edit. ADDISON-WELEY Iberoamericana
http://www.monografias.com/trabajos37/sistemas-tiempo-real/sistemas-tiempo-real.shtml
http://laurel.datsi.fi.upm.es/~ssoo/STR/