Universidad Nacional de Rosario FACULTAD DE CIENCIAS EXACTAS, INGENIERÍA Y AGRIMENSURA ESCUELA DE INGENIERÍA ELECTRÓNICA - DEPARTAMENTO DE SISTEMAS E INFORMÁTICA CÁTEDRA DE SISTEMAS DISTRIBUIDOS Monografía SISTEMAS DISTRIBUIDOS DE TIEMPO REAL Alumna: FLAVIA E. FELICIONI Profesores: JOSE LUIS SIMÓN JAVIER BELMONTE - AGOSTO 2005 - I . INTRODUCCION En los últimos años los sistemas distribuidos de tiempo real se han vuelto más importantes en muchas aplicaciones tales como los sistemas de control de procesos, la aviónica, el control industrial y otros menos críticos como los sistemas de videoconferencia, el sistema bancario, la reserva de pasajes en una compañía aérea, entre otros. Estos sistemas aprovechan la potencialidad de implementaciones en ambientes físicamente distribuidos, la posibilidad de compartir recursos entre distintos nodos y la reducción de costos dado que los procesadores son cada vez más económicos comparados con el hardware y software específicos. Para poder dar soporte a tales aplicaciones se requiere hacer una cuidadosa evaluación de los requisitos a satisfacer, para los cuales existen muchos métodos. Sólo una adecuada especificación de los requisitos puede culminar en una implementación satisfactoria. Otras cuestiones fundamentales que hay que tener en cuenta para la implementación de estos sistemas están relacionadas con el software y la administración de recursos. En la actualidad existen muchos proyectos de investigación enfocados en estas áreas. A lo largo de esta monografía se pretende plantear los puntos fundamentales que tienen que ver con los Sistemas Distribuidos en Tiempo Real (cuyas siglas en español son SDTR). Por ende el desarrollo en detalle de cada uno de los temas aquí tratados escapa a este objetivo y puede ser consultado en la bibliografía sugerida. En la sección II se reúnen los conceptos básicos y las definiciones más comunes, dado que existen ciertas dispersiones entre distintas fuentes bibliográficas. Luego en la sección III se exponen las cuestiones a tener en cuenta en cada una de las decisivas etapas del diseño de SDTR. La sección IV describe los elementos de software que requieren los SDTR para su implementación. En la sección V se describen los algoritmos de planificación que se usan en estos sistemas. Y por último en VI se analizan dos ejemplos de SDTR. II . CONCEPTOS DE SDTR En el campo de sistemas de computadoras, la tendencia durante los últimos años ha sido distribuir los cómputos entre varios procesadores, con el objetivo de incrementar el número de procesos que son completados por unidad de tiempo (conocido como throughput). Los sistemas con varios procesadores pueden compartir o no los siguientes recursos: el bus de la computadora, el reloj (clock) y algunos dispositivos y/o periféricos como la memoria. En el primer caso se dice que estamos en presencia de un sistema “fuertemente acoplado” (tightly coupled system), mientras en el segundo será uno “débilmente acoplado” (loosely coupled system). SISTEMA DISTRIBUIDO A lo largo de la literatura existe una dispersión en cuanto a que se entiende cuando se usan los términos “sistema distribuido”. A continuación se presentará una definición de tales sistemas (Silverschatz, Galvin). Sistema distribuido: Sistema de varios elementos de procesamiento autónomos que cooperan en un objetivo en común o para lograr una meta común. Es decir, teniendo en cuenta esta definición, cada elemento de procesamiento tiene su propia memoria por lo cual, y según lo establecido anteriormente, cuando se hace referencia a un “sistema distribuido” se hablará de un sistema del tipo “débilmente acoplado”. Entre las numerosas y ventajosas razones para usar sistemas distribuidos destacaremos las siguientes: Compartir recursos (Resource Sharing): Si un número de nodos (con diferentes capacidades) están conectados con otros, entonces un usuario en un nodo puede estar habilitado para usar recursos disponibles en otro nodo. Velocidad de cómputo (Computation Speedup): Si un cómputo particular puede ser descompuesto en una cierta cantidad de subcómputos que se realicen concurrentemente (en el mismo momento), entonces el tener un sistema distribuido posibilita distribuir tales subcómputos entre los nodos que lo componen. Fiabilidad (Reliability): Si un nodo falla en un sistema distribuido, los nodos restantes pueden potencialmente continuar operando. Para ello suele ser necesario tener implementado algún tipo de redundancia y algún mecanismo de detección de fallas. Comunicación: Cuando varios nodos están conectados por una red de comunicación, los usuarios o procesos de usuario en diferentes nodos tienen la posibilidad de intercambiar información. Este intercambio suele ser hecho mediante el envío de mensajes. Nodo C Nodo A servidor Recursos Red Nodo B comunicación cliente Figura 1: Un sistema distribuido. Cliente-Servidor. SISTEMAS DE TIEMPO REAL Los sistemas de tiempo real (STR) son usados cuando existen requerimientos temporales en la operación de un procesador o flujo de dato. Una definición de los STR es presentada a continuación (Silverschatz, Galvin). Sistemas de tiempo real: Un sistema de proceso de información que tiene que responder a un estímulo de entrada generado externamente en un período finito y especificado. Extendiendo un poco esta definición, un sistema de tiempo real que recibe información (eventos) de su entorno debe realizar alguna acción (reaccionar) para provocar cambios en dicho entorno, y tales cambios dependen tanto del resultado lógico que resulta de los cálculos que realiza el sistema como del tiempo en el cual los realiza. A pesar de que un sistema de tiempo real tiene restricciones de tiempo fijas bien definidas, un error común consiste en asociar esta restricción temporal con la idea de un sistema que debe responder rápidamente. Tales restricciones temporales dependen de cada sistema en particular y pueden ser estrictas (o rígidas) o flexibles caracterizando a los STR como rígidos (hard real time), flexibles (soft real time) y los menos comunes firmes (firm real time). Un sistema rígido garantiza que las tareas críticas se completen en tiempo, dado que el incumplimiento puede tener consecuencias más o menos graves, tales como pérdida de vidas o catástrofes. Mientras que en un STR flexible, las tareas críticas de tiempo real obtienen mayor prioridad sobre otras tareas y retienen tal prioridad hasta ser completadas. Por último los sistemas de tiempo firme son STR rígidos que pueden tolerar pérdidas, si la probabilidad de ocurrencia de las mismas es baja. SISTEMA DISTRIBUIDO DE TIEMPO REAL En un STR, rígido o flexible, la(s) computadora(s) interfiere(n) normalmente en forma directa con algún equipamiento, por ello a menudo se dice que los STR son también Sistemas Embebidos. Una definición mas adecuada de estos últimos es provista por la IEEE (P1003.13/D2.1, febrero 2003): Sistema de computadoras embebido (Embedded Computer System): Una computadora (y su software) es considerada embebida (embedded) si es un componente integral de un gran sistema y es usada para controlar y/o directamente monitorear el sistema, utilizando dispositivos de hardware especiales. Naturalmente el uso de sistemas distribuidos en la implementación de sistemas embebidos de tiempo real está asociado con los requerimientos de cada aplicación en particular. Por ejemplo cuando las aplicaciones requieran un cálculo muy complejo, que deba ser realizado de manera fiable y en un tiempo relativamente bajo, o que las partes del sistema estén distribuidas físicamente se debe utilizar SDTR. Ejemplos de SDTR son, entre otros: la reserva de pasajes de una compañía aérea, el sistema de telefonía celular, el sistema bancario de cajeros automáticos, sistemas multimedia, sistemas de realidad virtual y juegos, las intervenciones quirúrgicas computarizadas, el control de tráfico aéreo, y los sistemas de producción industrial de plantas altamente automatizadas. En la fase del establecimiento de requisitos, para cualquiera de los STR, existe una tarea fundamental y compleja que es especificar los deadline, definidos según: Tiempo Límite (Deadline): instante tope para finalizar la ejecución del último requerimiento de una tarea (o proceso). Si la tarea es periódica, es el instante en el cual llegará el próximo requerimiento. El garantizar el comportamiento dentro de estos deadlines requiere que el sistema sea predecible (predictability), otra característica clave del STR. Es interesante destacar que sólo se puede conocer que una tarea perdió su deadline luego de que el deadline ocurrió, lo que implica que no puede haber ninguna acción correctiva. Para aplicaciones de tiempo real flexible, típicamente el objetivo es satisfacer algunos requerimientos de Calidad de Servicio, QoS (Quality of Service). Calidad de Servicio: La calidad de servicio es un efecto colectivo del rendimiento de un servicio dado, que determina el grado de satisfacción de un usuario del mismo. Por ejemplo los parámetros de QoS típicos de una red son: el retardo, la variación del retardo y la pérdida de paquetes. Una red debe garantizar que puede ofrecer un cierto nivel de calidad de servicio para un nivel de tráfico que sigue un conjunto especificado de parámetros. En (Blum) los parámetros QoS fueron usados, para evaluar la transferencia de datos de las diferentes redes industriales (CAN, FIP, ARINC 629 CP) en aplicaciones de control. A continuación se expondrán los puntos más relevantes de los SDTR, relacionados con su diseño, software, la planificación de sus tareas y las redes típicas que se usan en su implementación. III . DISEÑO DE SISTEMAS DE TIEMPO REAL La etapa más importante del desarrollo de un STR es la denominada de diseño, dado que el STR debe ser diseñado de manera de que satisfaga una dada especificación de requisitos. Luego, una interpretación adecuada de tal buen diseño llevará a una exitosa implementación del STR. Las fases habituales en el desarrollo de los SDTR son: Especificación de requisitos Diseño arquitectónico y detallado. Implementación y prueba. Para documentar cada una de estas etapas se requiere cierta notación, entre los cuales se pueden destacar tres métodos (Burns, Wellings): 1) informales, que suelen hacer uso del lenguaje y diagramas imprecisos; 2) estructurados, que suelen emplear notación gráfica usando bloques bien definidos; 3) formales, está notación tiene una base matemática que permite escribir operaciones y también probar ciertas propiedades. ESPECIFICACIÓN DE REQUISITOS Debido a que los requisitos de alta fiabilidad son fundamentales en los STR, la tendencia actual es emplear una combinación de los métodos 2) y 3) mencionados en la subsección anterior. Además en esta etapa se deberá explicitar el comportamiento temporal del sistema (por ejemplo se deben definir los deadlines de las tareas) y los test de verificación que se aplicarán al software (Burns, Wellings). En el análisis de requisitos se pueden usar los métodos estructurados: PSL y CORE y los mas novedosos orientado a objetos (OO), destacandosé entre ellos el Lenguaje Unificado de Modelado (sus siglas en inglés UML); o los métodos formales: Forest y el lenguaje ALBERT Agent-Oriented Language for Building and Eliciting Requierement for Real Time Systems. Dentro de los métodos formales más nuevos y que están empezando a ser utilizados más frecuentemente, se pueden destacar VDM y Z. Estos emplean la teoría de conjuntos y la lógica de predicados. DISEÑO ARQUITECTÓNICO Y DETALLADO En el diseño de un STR distribuido (o también un STR grande), se recomienda utilizar un método de diseño jerárquico que permita aislar los subcomponentes (componentes más elementales) o módulos, basados en las abstracciones de procesos y de objetos. Estos subcomponentes deben tener roles bien definidos e interfaces y conexiones perfectamente definidas y abstractas. Si se emplea una notación formal para la especificación de requisitos es conveniente utilizar la misma notación en los diseños de alto nivel para poder demostrar si se cumplen tal especificación. La descomposición exitosa del sistema en los módulos requiere llegar a un situación de fuerte cohesión, característica que expresa el grado de unión dentro de un módulo, y débil acoplamiento, que es una medida de la interdependencia de los módulos. En el modelado de sistemas distribuidos y concurrentes se pueden emplear las Redes de Petri, las cuales son definidas matemáticamente y soportan un análisis formal. Dado que usando esta técnica un diseño se puede volver demasiado grande y complicado, y a menudo hay lugares del sistema que realizan las mismas acciones se pueden utilizar RdP coloreadas. Existen varios software que permiten probar los diseños de RdP. En (De Giusti et al.) se discute el modo de modelizar y verificar las restricciones de tiempo de un SDTR, utilizando Redes de Petri extendidas, tomando como ejemplo un sistema de software para Capital Federal que detecta en tiempo real el corte de cables telefónicos troncales y utiliza información para alertar a los responsables de seguridad de la zona del corte. En la figura 2 se puede observar uno de los diagramas de RdP que fue diseñado en el artículo mencionado. Figura 2: RdP con comunicaciones sin reinteintos, y máquina-máquina. Imagen tomada de (De Giusti et al.). Otra posibilidad dentro de los métodos formales es usar en el diseño autómatas temporizados y comprobación de modelos (Model Cheking). Con esto el sistema se representa por medio de máquinas de estado finito y con métodos de exploración de estados se determinan los posibles comportamientos del sistema. En general en ambientes industriales en el mejor de los casos se utilizan métodos estructurados, y los métodos formales quedan reservados solo para ambientes de investigación. Aunque actualmente en la carrera de Licenciatura en Ciencias de la Computación de la FCEIA de la UNR se enseñan técnicas formales, como la especificación Z y con esto es esperable que en un futuro no muy lejano haya licenciados formados en estas técnicas trabajando en industrias de la zona de Rosario. Entre los métodos de diseño estructurado (Burns, Wellings) más comunes para STR mencionaremos JSD, Mascot3 y HTR-HOOD (para Ada). El primero emplea una notación precisa para la especificación (diseño de alto nivel) y la implementación (diseño detallado). Un grafo JSD consta de procesos y una red de interconexión. Mascot3 se caracteriza por emplear gráficos de redes de flujo de datos y un diseño jerárquico como el que se mencionó anteriormente (en módulos). También proporciona las sincronizaciones necesarias para el uso de canales y depósitos de información. HRT-HOOD fue diseñado para STR rígidos específicamente para ADA. En el proceso de refinamiento del diseño las restricciones están impuestas por el conjunto de componentes hardware y software (ej., procesadores, distribuidores de tareas, dispositivos controladores). Las restricciones pueden ser sobre los recursos (ej., velocidad de procesamiento, ancho de banda de comunicación) o sobre mecanismos (prioridades de interrupción, bloqueo de datos, etc.). IMPLEMENTACIÓN Y PRUEBA Una implementación que satisfaga los requisitos de una manera lo más aproximada posible requiere utilizar un adecuado lenguaje de programación. Los lenguajes que potencialmente se pueden utilizar son: Assembler: lenguaje de máquina (la programación es tediosa y compleja y es raro poder utilizar este programa en otra computadora, portabilidad); lenguajes de alto nivel C y C++, Ada y Java (para Tiempo Real). Los dos primeros tienen problemas con respecto al control y la fiabilidad requeridas en tiempo real por lo que necesitan un adecuado soporte del SO. Una vez implementado el SDTR resulta lógico efectuar ciertas pruebas de manera de comprobar si funciona correctamente. Para ello resulta útil probar cada uno de los módulos que conforman la arquitectura del diseño, descriptos en la subsección anterior, en vez de enfocarse en el sistema completo. Es muy importante, en cuanto a la fiabilidad someter al sistema a una actuación del entorno correcta (según lo esperado) e incorrecta (para ver la respuesta de peor caso). Todas las pruebas apuntan a una verificación de satisfacción de requisitos y a una depuración de los posibles errores de implementación. Para realizar estas pruebas se pueden usar simuladores, emuladores o las más costosas implementaciones de prototipos. IV . SOFTWARE PARA SDTR En las aplicaciones de SDTR (es decir, STR en un hardware distribuido) aparecen nuevos desafíos frente a las aplicaciones de STR centralizados (en un único procesador). La implementación de un programa distribuido será más sencilla (Burns, Wellings) si el lenguaje de programación distribuida y el SO (o alguna extensión del mismo) soportan el particionado: proceso de dividir el sistema en partes; la configuración, asociar los componentes particionados sobre los elementos del sistema; la ejecución transparente, ejecución del software distribuido de manera que sea posible acceder a los recursos remotos con transparencia de ubicación. En cuanto a la asignación, proceso real de convertir el sistema configurado en un conjunto de módulos ejecutables y cargar estos últimos en los elementos de procesamiento y la reconfiguración, cambio dinámico de ubicación de un componente o recurso, se requiere el soporte del entorno de programación y del SO. En el área de ejecución transparente, existen para la comunicación de programas distribuidos tres importantes estándares de comunicación, a saber: 1) mediante Interfaz de Programación de Aplicaciones (API), 2) mediante el paradigma de llamada a procedimiento remoto (RPC) y 3) mediante el paradigma de objetos distribuidos. En cuanto al procesamiento en paralelo que existe en un ambiente distribuido se requieren nuevos algoritmos para el control de los recursos, por ejemplo el no contar con una referencia de tiempo común puede afectar el proceso de exclusión mutua sobre datos que estén distribuidos. Para ello deben ser tenidas en cuenta cuestiones de tiempo y ordenamiento. ESTRATEGIAS PARA INTERCAMBIO DE DATOS EN SDTR En la mayoría de los sistemas operativos modernos está provisto un acceso al hardware de la red a través de la pila de protocolos TCP/IP. Dado que las complejas aplicaciones distribuidas requieren un modelo más poderoso de comunicación han surgidos varios tipos de tecnologías de software, comúnmente conocidos como middleware. Estos se pueden clasificar en tres categorías (Rogosin): cliente - servidor (o invocación de objeto remoto), pasaje de mensaje (Message-passing) y Publicar-Subscribir (Publish-Subscribe). Figura 3: Cliente-Servidor con datos centralizados. La mayoría de los diseños con middleware cliente – servidor presentan una API que procura hacer aparecer al nodo remoto como local y para obtener datos se llaman a métodos en objetos remotos como si estuvieran en el nodo local (RMI). El middleware, entonces, intenta esconder la naturaleza de la red subyacente. Los middleware cliente/servidor incluyen CORBA, HTTP, EJB (Enterprise Java Bean). El modelo cliente – servidor funciona bien para sistemas con información centralizada, tales como bases de dato, sistemas de procesamiento de transacciones y servidores de archivos centralizados. Sin embargo, si múltiples nodos están generando información, las arquitecturas cliente-servidor requieren que toda la información sea enviada al servidor para luego ser redistribuida a los clientes. Esta comunicación indirecta entre clientes es particularmente ineficiente dado que el tener un servidor centralizado agrega un retardo desconocido por lo que se pierde el determinismo requerido en el ambiente del tiempo real. Las arquitecturas de pasaje de mensajes emplean el paradigma de diseño de implementación de colas de mensajes. Los procesos pueden crear colas, enviar mensajes y atender mensajes que les llegan. Con este diseño es mucho más sencillo intercambiar información entre los nodos de un sistema distribuido. Algunos SO usan el pasaje de mensajes como mecanismo de sincronización de bajo nivel. Mientras que otros lo proveen en la forma de librerías de SO (por ejemplo, VxWorks, colas de mensaje POSIX). Los diseños pueden usar la secuencia sendreceive-reply bloqueante en la comunicación y sincronización entre nodos (y entre procesos). Alternativamente, empresas de middleware como BEA e IBM implementan arquitecturas de pasaje de mensajes. El pasaje de mensajes permite las conexiones punto a punto, es decir con esta arquitectura las aplicaciones tienen que encontrar los mensajes indirectamente por un identificador específico de la fuente (por identificación del procesos, del canal o nombre de la cola) en cada nodo. El diseñador debe determinar donde tomar los datos, donde mandarlos, y cuando hacer la transacción. Estos sistemas no permiten, en general, el control sobre el comportamiento de los mensajes o la calidad de servicio (QoS). Figura 4: Pasaje de mensaje, con varios canales. En Publicar-subscribir (Publish-subscribe) los nodos simplemente se subscriben a los datos que necesitan y publican la información que producen. Los mensajes pasan directamente entre los nodos de comunicación. Estos sistemas son buenos en distribuir gran cantidad de información de tiempo crítico rápidamente. Esta arquitectura soporta el desafío propuesto por las comunicaciones embebidas dado que encontrar los datos correctos resulta simple, los nodos declaran su interés y los que publican envían los datos cuando los datos están disponibles. Además esta arquitectura es eficiente debido a que los datos fluyen directamente desde la fuente al destino sin requerir servidores intermediarios. Múltiples fuentes y destinos son fácilmente definidas dentro del modelo posibilitando el agregado de redundancia que permite tolerancia a fallas. Las modernas implementaciones del middleware publicar/subscribir (tales como DDS) permiten implementar mecanismos eficientes de QoS para stream de datos. Figura 5: Publicar-Subscribir desacopla flujos de datos. La correcta implementación de estos middleware implica que se pueden conseguir los datos correctos en el lugar correcto en el momento correcto. Desde hace décadas en las redes de campo Fieldbus (ver sección VI) usadas en automación industrial se usan diseños publih-subscribe dependientes del hardware. En el ambiente de sistemas embebidos, middleware comerciales controlan completamente barcos, simuladores de vuelo y sistemas militares entre otros. TIEMPO Y ORDENAMIENTO EN SDTR Los lenguajes de programación usados en STR presentan las siguientes facilidades de tiempo real: acceder a relojes de manera de poder medir el tiempo y entonces retardar la ejecución de procesos y programar límites de tiempo de espera (timeouts). representar los requisitos temporales, (deadlines de las tareas), tasas de ejecución. satisfacer los requisitos temporales. Pero dado que en un SDTR no existe un reloj común, como ya fue mencionado, la única posibilidad de utilizar correctamente tales facilidades (provistas por los lenguajes) requiere la sincronización de los relojes de cada uno de los equipos que lo conforman, mediante alguna técnica, para tener una hora común (asumiendo pequeñas derivas). También en un ambiente distribuido resulta importante determinar el orden de la ocurrencia de eventos. Para sincronizar relojes y ordenar los eventos se pueden consultar los algoritmos explicados en (Simón). SOPORTE DEL SISTEMA OPERATIVO Las características de sistemas operativos avanzados tienden a separar al usuario del hardware, y esta separación implica una incerteza sobre la cantidad de tiempo que una operación puede tomar (Silberschatz). Por lo tanto un STR rígido, que requiere una garantía de que las tareas críticas que tiene asignadas serán cumplimentadas a tiempo, tiene conflictos con las operaciones de sistemas operativos de propósito general. Entre las deficiencias que aparecen al tratar de implementar un STR rígido, usando un SO de propósito general se pueden destacar las siguientes: Pocas prioridades de hilos (threads). Planificación no determinística. Inversión de prioridades, particularmente en interrupción de procesos. Como se mencionó anteriormente, existen extensiones de SO, por ejemplo RTX que es una extensión de tiempo real rígido para Windows NT/2000/XP que provee capacidades determinísticas y de alta velocidad satisfaciendo las necesidades de respuestas determinísticas para procesos de E/S de dispositivos (TGA Ingeniería). Los STR flexibles son menos restrictivos, e implementarlos requiere un diseño adecuado del planificador (scheduler) y tener en cuenta ciertos aspectos relacionados con el SO. Primero, los procesos de tiempo real deben tener las prioridades más altas. Segundo, la latencia del despachante (dispacher) debe ser lo más baja posible. A medida que esta sea más baja, más rápidamente un proceso que está listo puede empezar a ejecutarse. Una manera de mantener baja esta latencia es insertar puntos de preemption (expropiación o apropiación) en largas llamadas al sistema (syscall). Una planificación expropiativa en un SO, permite que si un proceso que llega a la cola de Listos (Ready) tiene mayor prioridad que el que está siendo ejecutado, se interrumpa este último para que se pueda correr el proceso de mayor prioridad. En el caso de que el STR se implemente de forma distribuida se utilizan aparecen nuevos requerimientos y problemas asociados también con la comunicación, dado que ahora un factor importante que determina el tiempo en el que la proceso es terminado tiene que ver con el acceso al medio desde cada nodo (MAC). Frente a este tiempo la latencia del despachante suele ser despreciada. Además el recurso red debe ser al menos predecible, por ello también deben ser usados algoritmos de planificación como veremos a continuación. V . PLANIFICACION EN SDTR El problema de planificación (scheduling) es un punto muy importante a tener en cuenta en la implementación de un SDTR, dado que mediante algún algoritmo de planificación se deben asignar las tareas que tienen deadlines y requieren ciertos recursos de un SD. Estos algoritmos suelen, según la estrategia de planificación de las tareas, ser clasificados como: dinámicos: puede haber un conjunto de tareas conocido de antemano, pero ante la aparición de una nueva tarea, el sistema analiza si la puede garantizar sin afectar a las tareas que ya maneja, y en ese caso la agrega a la lista de tareas. Mayor costo de ejecución, porque el planificador tiene un trabajo de análisis adicional. estáticos: todas las tareas, por su naturaleza y características son conocidas de antemano, y en tiempo de diseño se planifica la ejecución de las mismas. El sistema no admite la aparición de una nueva tarea sobre la marcha. Los algoritmos pueden estar implementados de una manera centralizada o decentralizada y pueden ser expropiativos o no. PROBLEMAS CON ALGORITMOS STR Partiendo de la suposición que el SD es síncrono, es decir existe una cota superior en los retrasos de mensajes, los nodos en si mismos progresan a cierta velocidad y la deriva entre relojes de los nodos está acotada (sincronizando los mismos) se ha demostrado que los algoritmos de planificación óptimos que suelen usarse para STR de un sólo procesador no son óptimos en presencia de sistemas de varios procesadores apareciendo en ciertos casos de manera impredecible. Como ejemplo citando (Burns, Wellings), si tres procesos periódicos están en la cola de listos, y pueden ser ejecutados en dos procesadores puede observarse una situación como la siguiente P1(C=25; D=50), P2(C=25; D=50) y P3(C=80; D=100), C es el tiempo de ejecución y D el deadline de c/ proceso. D1 Procesador 1 P1 0 CPU ociosa 25 D3 D2 Procesador 2 P2 0 P3 25 105 Figura 6: Pérdida de deadline usando tasa monotónica. Utilizando la tasa monotónica (rate monotonic), la cual asocia a cada proceso una prioridad de acuerdo a su período de ejecución (mayor prioridad para menor C). Luego se puede dar una situación como se ve en el diagrama de Gantt de la figura en el cual luego de completar el proceso 1 el Procesador 1 queda ocioso, durante buena parte del tiempo y el proceso 3 no alcanza a satisfacer su deadline. Si en vez de utilizar tasa monotónica el algoritmo asignara P1 y P2 al procesador 1 y P3 al procesador 2 se pueden satisfacer los tres deadlines. Tampoco usar el algoritmo de STR óptimo Earliest Deadline First (EDF), el cual selecciona el proceso que tiene el más cercano deadline de entre el conjunto de procesos listos (las prioridades cambian dinámicamente en tiempo de ejecución) proporciona una solución siempre satisfactoria en ambientes distribuidos. PLANIFICACIÓN SDTR Los problemas de planificación en SDTR son complicados dado que además de los deadlines y los tiempos de ejecución de los procesos, se deben tener en cuenta también los requerimientos de recursos que los procesos necesitan. Esto es lo que ocurrió en el ejemplo de la figura 6 (donde el recurso eran los 2 procesadores). Por esto, los recursos necesarios para satisfacer los deadlines de procesos críticos típicamente se asignan previamente y estos procesos son usualmente planificados estáticamente de manera que sus deadlines resulten satisfechos incluso en las condiciones de peor caso. Cabe recalcar que esta solución tan inflexible implica una utilización pobre de los recursos disponibles. Dado que el no cumplimiento de los deadlines de las procesos no críticos degradan sólo, aunque seriamente, la performance resulta aconsejable tratar tales tareas de manera dinámica. Una posibilidad en cuanto a la selección de algoritmos de planificación, presentada en (Burns, Wellings), requiere la abstracción de procesos definidos más comunes en los SDTR. Tales procesos pueden ser del tipo periódico, que se ejecuta en instantes de tiempo espaciados regularmente (ciclo); esporádico, que se ejecuta en respuesta a eventos que ocurren de forma asíncrona imposibles de prever y aperiódico, generalización del caso anterior. Este algoritmo sugiere asignar los procesos periódicos y esporádicos estáticamente, es decir impidiendo que migren a otros procesadores (lo que podría desbalancear la asignación degradando la performance del sistema). Usando este despliegue estático sobre cada procesador se pueden usar los algoritmos de planificación de un sólo procesador (EDF, tasa monotónica, Round Robin), con la consecuente posibilidad que haya nodos sobrecargados mientras otros tienen capacidad de reserva. En (Ramamritham et al.) se presenta un algoritmo para SDTR rígidos como un ejemplo de planificación decentralizada y dinámica. Al igual que el algoritmo anterior todos los procesos periódicos críticos y los procesos esporádicos se asignan estáticamente pero ahora los procesos aperiódicos no críticos tienen la posibilidad de migrar. Es decir cuando un proceso aperiódico llega a un nodo, el planificador local en ese nodo debe verificar si puede garantizar que el proceso se complete antes de su deadline, agregando este proceso a su carga existente en el mismo nodo. Si la verificación falla, los componentes del planificador de otros nodos cooperaran para determinar cual otro nodo en el sistema tiene suficientes recursos disponibles que permitan realizar la tarea en el tiempo requerido (se asume que se el estado de la red, y el tiempo es común). Entonces el proceso migrará a algún nodo donde había altas probabilidades de que pudiera ser completado, pero dado que la transmisión del mismo a través de la red tiene una demora podría ocurrir que cuando llegué a este nodo ya no haya más disponibilidad. Por ello se vuelve a realizar el test de garantía en este nodo y en caso negativo el proceso debería volver a migrar. Todas estas migraciones pueden conducir a que se pierda el deadline del proceso. Obviamente la base de este método es que los procesos aperiódicos puedan migrar, pero esto no siempre ocurre dado que algunos de tales procesos están fuertemente acoplados con el hardware de algún nodo, y por tanto deben ser ejecutados en él mismo. ACCESO A LA RED DE COMUNICACIÓN Como ya mencionamos los mensajes deben competir para ganarse el acceso al medio de comunicación, por ejemplo usando conmutadores, buses o anillos. Para que los procesos de TR cumplan sus deadlines este acceso deberá ser planificado, de forma que sea consistente con la planificación de ejecución de los procesos en cada nodo. Si esto no se planifica puede ocurrir un problema de inversión de prioridades, es decir cuando un proceso de alta prioridad debe esperar que uno de baja prioridad se complete, liberando el canal de comunicación en este caso. Además en los algoritmos de administración de la red existen varias limitaciones debido a que a diferencia de un nodo la red tiene varios puntos de acceso en cada nodo, el usar preemption en los algoritmos de acceso a la red no es una alternativa admisible dado que los mismo provocan que si un mensaje le expropia el recurso red a otro luego de completado el mismo se debe retransmitir nuevamente el mensaje que fue cortado y habrá que poner deadlines asociados con la disponibilidad del buffer. Los protocolos estándares de Ethernet no soportan el tráfico con restricciones de tiempo rígidas ya que cuando se produce una colisión de mensajes se introducen tiempos aleatorios y por ende se pierde el determinismo. Por esto y en el sentido de que el recurso red debería ser al menos predecible se suelen usar tres esquemas que garantizan esto último: TDMA: es una extensión de Round Robin para la red. Cada nodo dispone de un reloj sincronizado, y se le asignan franjas de tiempo en las que puede comunicarse durante cada ciclo de comunicación. Existen problemas al intentar planificar los procesos esporádicos y es muy eficiente para procesos periódicos. Esquemas de paso de testigo temporizado: cierto mensaje testigo (token) es pasado de un nodo a otro. Los nodos pueden enviar los mensajes sólo cuando poseen el token impidiendo las colisiones. Cada nodo posee el token durante un cierto tiempo, por ello el tiempo de rotación del token es limitado. Es usado en FDDI (Fiber Distributed Data Interface), ControlNet y PROFIBUS. Protocolos Basados en Prioridad: Cada nodo indica la prioridad del dato que desea transmitir. Para evitar colisiones se requiere un gran número de prioridades posibles para asignar. Por ejemplo CAN (Controller Area Network) tiene destinado una cantidad de bits al comienzo de cada mensaje que indica la prioridad. El problema que tiene es que la velocidad de transmisión resultada limitada. ATM: Permite la comunicación punto a punto mediante el uso de conmutadores. Soporta los requisitos de comunicación para algunos SDTR flexibles, como por ejemplo transmisión de voz y video (usados en videoconferencia, telefonía celular) y transmisión de datos. VI . EJEMPLOS DE SDTR Los SDTR están presentes en muchas áreas de implementación técnica. Así, los siguientes ejemplos exponen dos aplicaciones distintas, ambas integradas de manera transparente a la vida cotidiana, el primero en el ámbito industrial y el segundo en el área de desarrollo de aviónica. REDES INDUSTRIALES Las necesidades de control en aplicaciones industriales dependen fundamentalmente del tipo de sistema que se quiere controlar, los objetivos que se desean alcanzar y el tipo de equipamiento a disposición. Las primeras redes de comunicación industrial surgieron para resolver los problemas asociados con la distribución física de los componentes del SD a controlar un sistema extendido físicamente. Desde mediados de los ’80, las innovaciones tecnológicas han permitido la integración en sensores y actuadores de unidades de procesamiento de información e interfaces de red, dando origen a los así llamados sensores y actuadores inteligentes, listos para ser usados a distancia por un controlador remoto en un ambiente distribuido. Para conectar estos dispositivos de campo (es decir los actuadores y los sensores), y los controladores (PLC’s, reguladores, etc.) se utiliza una red de comunicación que se denomina bus de campo (fieldbus). El bus de campo también es un sistema de comunicación en tiempo real que está basado en la estructura de capas del modelo OSI de siete capas. Para cada capa del bus se pueden elegir distintos protocolos, los cuales proveen diferentes QoS según las restricciones temporales. Supervisor Red de Supervisión DCS PLC Bus de campo Válvula I/O Encoder Drive Figura 7: Redes de control (con buses de campo). Las redes industriales se organizan según tres niveles (Ferreira et al.). Cada uno de estos presenta características propias de intercambio de información y utilizan diferentes equipos. El nivel más bajo (nivel de control discreto) trata con las conexiones físicas al nivel de I/O discretas (ej., sensores, contactores). Se manejan bits. El nivel intermedio (nivel de control de red) involucra a la red que une los controladores (PLC, DCS, PC´s de control). Se requiere un flujo de información en tiempo real a fin de garantizar la actualización necesaria en los controladores y las estaciones de monitoreo. Se manejan bytes. El nivel más alto está asociado con una red de computadoras que permite acceder a información de la planta para su procesamiento y monitoreo estadístico (ej. SCADA). Se manejan paquetes. La mayoría de los buses de campo proponen dos tipos de red: un bus de campo-control y un bus basado en Ethernet para el nivel de información (Foundation Fieldbus propone H1 para el nivel de control y HSE para el nivel de información). Otros buses del nivel más bajo (como AS-i) fueron diseñados para obtener comunicación de muy bajo costo para un número reducido de equipos. Para utilizar un bus industrial se deben satisfacer los siguientes requerimientos relacionados con el objetivo final y con las restricciones temporales (restricciones de tiempo real), a saber: Disponibilidad operativa (Dependability) Asociado con la necesidad de que el bus permanezca siempre en condiciones de operación confiable. Optimización del mantenimiento. Se requiere que la inclusión del bus radique en mejoras en el mantenimiento general del sistema automatizado. Adaptabilidad del sistema. El bus debe permitir al sistema evolucionar con facilidad. Interoperabilidad. Capacidad de que equipos de distintos fabricantes puedan interactuar (o trabajar juntos) para lograr un determinado objetivo. Periodicidad. capacidad de la red de transmitir todos los datos periódicos dentro de un determinado lapso de tiempo. Jitter (varianza). Variación en la transmisión periódica de mensajes. Demora en la transferencia de mensajes. Los tiempos de respuesta de todo el sistema deben garantizar que los datos lleguen a destino cuando aún son válidos. Coherencia Temporal. Se debe garantizar que todos los destinatarios de un dato reciben el mismo valor del dato dentro de un intervalo de validez. Capacidad de respuesta ante eventos Se refiere a que se garantice la respuesta en un tiempo máximo del sistema a la reacción ante alarmas o eventos esporádicos con ocurrencias no predecibles. BOEING 787 En (Wlad) se presentan las nuevas tecnologías de software utilizadas en el programa de desarrollo de aviones comerciales Boeing 787. También incluye una descripción de la evolución del software a lo largo de las tres generaciones de diseño de aviónica (electrónica de aviación). A continuación resaltaremos un resumen de las características más relevantes de este desarrollo. El primer vuelo del 787 está planeado para 2007. Este avión de 2 motores tomará para ir desde New York a Tokio un vuelo de menos de 13 horas. Cada asiento estará equipado con su propio teléfono celular, y conectividad a internet. Una alta reducción del gasto de combustible en este avión se debe a la gran pérdida de peso de las computadoras de a bordo. Figura 8: Red de comunicaciones, sensores en el 787. Imagen tomada de (Wlad). En este diseño Boeing expandirá el uso de su tecnología de aviónica modelar integrada (IMA), que fuera incorporada en la tercera generación, mejorando la velocidad a la cual las aplicaciones pueden comunicarse entre sí. El cerebro del 787 es el sistema núcleo común (CCS). Este CCS tiene que proveer un alto nivel de integridad para aplicaciones de vuelo asegurando que los requerimientos de seguridad sean conseguidos y preservados. El CCS está compuesto de recursos computarizados comunes (CCR), que son esencialmente un rack de cpu’s, una red común de datos y concentradores de datos remotos. Se utiliza el sistema operativo particionado VxWorks 653 de Wind Rivers, el cual provee la partición robusta que se requiere para separar el software, completamente, de manera que se puedan certificar los diferentes niveles de DO-178B (ver tabla). VxWorks maneja cientos de aplicaciones software separadas en tiempo y en espacio. Este rango va desde funciones no-críticas como el control del lavatorio hasta funciones críticas de vuelo como los display de los pilotos. La red común de datos es Ethernet (aérea), y provee velocidades entre 10 y 100 Mbps. Para hacer que la red del avión sea determinística y segura, el sistema debe ser impermeable a los efectos de fluctuaciones y colisiones de datos. Nivel de Software Condiciones de Falla A Catastrófico B Arriesgado/Severo C Mayor D Menor E Sin Efecto Tabla 1. Niveles de software en aviónica comercial (DO-178B). Por ello en el Boeing 787 se usa ADFX (Avionics Full - Duplex Switched Ethernet) que permite conseguir el determinismo que requiere satisfacer la red. Con ADFX, cada conexión punto a punto ARINC 429 (utilizada a partir de la segunda generación) es reemplazada por un link virtual. Este link virtual es una conexión entre sensores y computadoras donde los cables dedicados fueron reemplazados por una red de cobre o fibra óptica y switches de Ethernet. La tecnología AFDX elimina la colisión de datos usando canales dedicados a funciones de transmisión y recepción. Con AFDX por ejemplo, si un sensor de temperatura quiere enviar un mensaje a la computadora de datos de aire, un concentrador de datos digitaliza la medición del sensor, adjunta al mensaje una dirección y este dato es routeado hasta su destino a tiempo. BIBLIOGRAFÍA (Blum) Blum, Isabelle, “Qualité de Service dans les réseaux locaux industriels: modélisation et évaluation – lien avec les performances d’applications de contrôle-commande”, Thèse de Docteur de l’Université Paul Sabatier de Toulouse, Enero 2000. (Burns, Wellings), Burns A. y A. Wellings, “Sistemas de tiempo real y lenguajes de programación”, 3ª edición, Pearson. Madrid 2003. (De Giusti et al.), De Giusti A., H. Ramón , P. Fernandez, A. Artime, “Ingeniería de Software de Sistemas distribuídos de Tiempo Real. Modelización y Evaluación de las Restricciones de Tiempo.” Depto. de Informática, Fac. Ciencias Exactas, Universidad Nacional de La Plata. (Ferreira et al.) Ferreira F, M. Feldgen y O. Clúa, “Requerimientos para aplicacion de buses de campo en control industrial”, AADECA 2002. Bs. As. Argentina. (Rogosin) Mike Rogosin, “Design strategies for real-time data in distributed systems”. Real-Time Innovations. Junio 2005. Disponible en www.rti.com (Silverschatz y Galvin) Silverschatz A. y P. Galvin, “Operating System Concepts” , 5ed. Wesley 1997. (Simón) Simón J., Tiempo y coordinación. Transparencias de Clase. Disponible en www.dsi.fceia.unr.edu.ar/sistdist (Ramamritham et al.) Ramamritham K, Stankovic J. W. Zhao. “Distributed Scheduling of Tasks with Deadlines and Resource Requirements” IEEE Transactions on computer. Vol. 38 8. Agosto 1989. (Wlad) Joseph Wlad, “A new generation in aircraft avionics design”. Wind Rivers. Disponible en www.embeddedcontrol-europe.com