Universidad Tecnológica Nacional Facultad Regional Resistencia Sistemas en tiempo real - QNX Grupo Nº11: Maksimchuk, Fabio Nicoletti, Mariela Romero, Melisa Tomasella, Mauricio Profesores: Ing. Dominga Aquino Ing. Carlos Pérez Ingeniería en sistemas de Información Teoría de Control – Grupo Nº11 Ciclo2010 SISTEMAS RTO QNX Breve reseña histórica de los sistemas operativos RTO QNX En 1980, dos estudiantes de la Universidad de Waterloo, Gordon Bell y Regate de Dan, construyeron un núcleo de sistema operativo en tiempo real básico. Este fue el primer sistema operativo en tiempo real desarrollado. En 1982 apareció la primera versión, QNX para los procesadores Intel 8088. En los inicios de esta versión, QNX fue utilizado como sistema operativo del sistema educativo ICONO de Unisys. Años después, QNX se utilizó en proyectos más grandes, porque su núcleo de 44K era demasiado grande como para caber dentro de las computadoras de esa época. Mas adelante, QNX incorporó el sistema X Window. En los años 90, QNX tuvo un rediseño pero todavía seguía conservando la arquitectura de microkernel. De ahí en adelante salieron varias versiones que luego se hicieron comerciales, siendo por ejemplo utilizados en la industria automotriz. Introducción a los Sistemas Operativos en tiempo real Un sistema operativo en tiempo real es un sistema operativo diseñado y desarrollado para aplicaciones de tiempo real. El sistema debe dar soporte a las respuestas que devuelve, tratando de garantizar un elevado grado de determinismo. Ante la obtención de respuestas erróneas, dicho sistema deberá corregirlas y dar la respuesta sin errores en un lapso de tiempo bastante corto. Por lo tanto se ve que el sistema se encuentra sujeto a restricciones de tiempo y de fiabilidad entre otros. Si ello no se cumple, se dice que el sistema ha fallado. Este tipo de sistemas esta pensado para permitir una mejor interacción usuariomáquina y es muy utilizado en dispositivos que van desde teléfonos móviles hasta aeronaves y aviones, dado que disponen de un alto porcentaje de fiabilidad y manejabilidad. Un sistema operativo en tiempo real tiene las siguientes características: Bajo consumo de memoria. Cualquier evento en el soporte físico puede hacer que se ejecute una tarea. Multiplataforma, dado que su código es portable. Ante ciertos eventos electrónicos, tienen tiempos de respuesta predecibles. Fiabilidad. Interacción con el usuario. Sensibilidad. Determinismo. Tolerancia a fallos del sistema. De las características antes mencionadas, todo sistema operativo exige el cumplimiento obligatorio de algunas de ellas para poder dar un funcionamiento correcto: Determinismo Sensibilidad Control del usuario Fiabilidad Tolerancia a los fallos El sistema operativo en tiempo real será determinista, si realiza las operaciones solamente en instantes fijos y predeterminados. No antes ni después. Cuando los 2 Ingeniería en sistemas de Información Teoría de Control – Grupo Nº11 Ciclo2010 procesos compiten por los recursos y por el tiempo de procesador, la asignación depende, de la velocidad con la que el sistema pueda responder a las interrupciones y de si el sistema tiene la capacidad suficiente como para gestionar todas las peticiones en el tiempo requerido. La sensibilidad trata de cuánto tiempo consume el sistema operativo para dar servicio a la interrupción, y depende del tiempo para cargar la rutina de interrupciones, del tiempo de ejecución de dicha rutina y de la gestión de interrupciones futuras. El control de usuario en este tipo de sistemas debe ser mucho mayor que en el caso de cualquier sistema operativo convencional. En los sistemas operativos convencionales, el usuario no tiene poder de control sobre la planificación de procesos del sistema operativo. En cambio, en sistemas operativos de tiempo real, el usuario debe poder ejercer un control preciso sobre la prioridad de los procesos. Esto es necesario dado que se debe poder gestionar tareas rígidas y flexibles y poder así establecerles sus prioridades de acuerdo a la clase a la que dichos procesos pertenecen. El usuario también puede gestionar otras características, como por ejemplo cuales procesos podrán encontrarse siempre en la memoria principal. La fiabilidad es un aspecto muy importante, dado que la presencia de un fallo en uno de los procesadores en el multiprocesador provocaría una reducción en el nivel de servicio que brinda hasta que se lo repare o sustituya por uno nuevo. Esto es tan importante dadas las aplicaciones potenciales que tiene el sistema operativo en tiempo real. Si se presentase el caso de una pérdida o degradación del rendimiento del sistema, ello podría repercutir de forma grave en el servicio que presta. Dichas repercusiones podrían presentar consecuencias catastróficas, como ser pérdidas financieras, daños en los equipos o incluso pérdida de vidas humanas. La tolerancia a los fallos es una característica que hace referencia a la capacidad de un sistema de conservar la máxima capacidad y los máximos datos posibles en caso de fallos. Ante la presencia de fallos, un sistema en tiempo real intentara corregir el problema o minimizar sus efectos mientras continúe la ejecución pudiendo así volver a la estabilidad del sistema. Dadas dichas características, se tiene que existen dos tipos de sistemas operativos de tiempo real en cuanto a las restricciones de las tareas: Sistemas Críticos: son sistemas rígidos de tiempo real en los cuales el incumplimiento de requisitos temporales supone un fallo grave del sistema. Sistemas No Críticos: Sistemas flexibles de tiempo real en los cuales un incumplimiento esporádico de los requisitos temporales no condiciona al sistema. Características de diseño y soporte del sistema operativo en tiempo real: A la hora de considerar el diseño y el soporte de un sistema operativo en tiempo real debemos considerar aspectos relacionados con los mismos tales como su procesador, los procesos y su planificación, su sincronización y comunicación, las interrupciones, la gestión de memoria y las comunicaciones. Procesador Este tipo de sistemas operativos tienen problemas en cuanto a la capacidad de procesamiento, no son eficientes en cuanto a tener una capacidad de procesamiento alta. Una dificultad que presentan es que les cuesta cumplir con el período del reloj interno del ordenador, dado que disponen de un algoritmo de programación muy especializado y las interrupciones o correcciones que deben hacer son muchas, es decir que la tasa de interrupciones que poseen es muy elevada. Por eso es que se pone en compromiso la velocidad de procesamiento de la CPU. Tenemos dos tipos de diseño de los sistemas operativos en cuanto al manejo de eventos o interrupciones: Guiado por eventos, donde solo se cambia de tarea cuando un evento necesita el servicio y diseño de Compartición, donde solo se cambia de 3 Ingeniería en sistemas de Información Teoría de Control – Grupo Nº11 Ciclo2010 tareas por interrupciones de reloj y por eventos. Este diseño consume más tiempo de CPU porque efectúa cambios de tarea innecesarios, pero da una ilusión de multitarea. Planificación y Procesos En este tipo de sistemas, toda tarea puede estar en uno de tres estados: ejecución, preparado y bloqueado. En la mayor parte del tiempo solo se tiene una tarea en ejecución y las demás se encuentran bloqueadas. La cola de procesos suele ser corta y casi siempre las tareas están bloqueadas. Es complicado diseñar el programador porque en cada búsqueda, inserción o eliminación de procesos hay que usar interrupciones durante un tiempo muy pequeño. Lo conveniente es que las tareas sean ordenadas por orden de prioridad. Esto es porque el sistema debe ser determinista. El tiempo de búsqueda debe ser mínimo para poder así poder pasar el proceso listo a ejecución. El tiempo que se necesita para poner en cola una nueva tarea y reconfigurar el estado de la tarea con la prioridad más alta se llama “tiempo de respuesta crítico”. Comunicación entre procesos y Sincronización Igual que en el caso de los sistemas operativos convencionales, los procesos no pueden acceder al mismo recurso en común al mismo tiempo ni manipularlo conjuntamente porque se presentarían resultados inconsistentes en el procesamiento. Esto a su vez generaría consecuencias indeseables en los sistemas. Una solución para la sincronización de procesos consistiría en hacer uso de los semáforos. Los semáforos pueden estar en dos estados, cerrado o abierto. Cuando está cerrado, los demás procesos se encolan frente a él para esperar que se abra y poder ingresar. Esto tiene dos problemas: inversión de prioridades y punto muerto. En el caso de inversión de prioridades, una tarea de mucha prioridad espera porque otra tarea de baja prioridad tiene un semáforo. En un punto muerto, dos tareas tienen dos semáforos pero en el orden inverso. Esto se resuelve normalmente mediante un diseño cuidadoso, realizando colas o quitando semáforos, que pasan el control de un semáforo a la tarea de más alta prioridad en determinadas condiciones. Una solución extra es el envío de mensajes entre procesos. Esto, si bien presenta los mismos problemas que el uso de semáforos, pueden desplegarse y comportarse mejor que los segundos. Interrupciones En los sistemas de tiempo real se usan interrupciones para dar aviso de la presencia de diferentes eventos al mismo. El sistema debe atender a la interrupción y procesar la información asociada antes de que se presente la siguiente. Como el microprocesador solo puede atender una interrupción a la vez, para dar soporte a lo anterior, los controladores de tiempo real deben ejecutarse en el menor tiempo posible. Esto se logra enviando un mensaje a la tarea o con un semáforo. El planificador se encarga de activar la tarea y esta se encarga de adquirir la información y completar el procesamiento de la misma.. Memoria Tenemos problemas en cuanto a la repartición de memoria en este tipo de sistemas operativos. La velocidad de acceso es importante. Si se usa un esquema de reparto estándar de memoria, se recorre una lista de longitud indeterminada para poder encontrar un bloque de memoria libre, pero esto no es conveniente porque el reparto de memoria debe ocurrir en un tiempo fijo. Luego está el problema de la fragmentación. Cuando las particiones libres se separan por regiones que están en uso, esto puede provocar que se pare un programa sin la opción de obtener más memoria aunque en su totalidad por la suma de las particiones 4 Ingeniería en sistemas de Información Teoría de Control – Grupo Nº11 Ciclo2010 sea posible. La solución es aplicar el algoritmo LIFO para la gestión de los bloques de memoria. En los sistemas de tiempo real, la paginación se desactiva porque es un factor aleatorio e impredecible y eso hace variar el tiempo de respuesta del sistema con lo cuál no podríamos asegurar que se cumplan los plazos establecidos. Comunicaciones Se suelen usar conexiones o redes deterministas LAN bus o puertos serie, ya que las redes más usuales, como Ethernet son no deterministas y no pueden garantizarnos el tiempo de respuesta. El sistema LAN bus es utilizado para la interconexión de dispositivos electrónicos de control (ECU) en los vehículos. 1. Arquitectura de un sistema operativo en tiempo real. Arquitectura de un Sistema Operativo de tiempo real La memoria física de un ordenador se divide en dos regiones. Una esta reservada para el usuario, se llama User Space y la otra está reservada para el kernel del sistema operativo, y se llama Kernel Space. El kernel es multitarea y es capaz de gestionar varias aplicaciones del usuario, que se ejecutan en el espacio de memoria reservado para dicho fin y que le hacen creer de qué dispone de toda la memoria física y todo el hardware para tal propósito. También controla el acceso al hardware del sistema y por ello todos los programas del espacio de memoria del usuario no conocen los detalles físicos de estas máquinas. En el espacio de usuario se encuentran todas las operaciones entre programas y en el espacio del kernel se hacen mediante llamadas al sistema. Dichas llamadas lo que hacen es acceder a recursos físicos compartidos por ambas particiones de la memoria. Aspectos puntuales: El hardware sólo interactúa con el kernel y el kernel se comunica con el usuario El Jitter es otra medida, y son las variaciones del periodo normal de los eventos en el sistema. Los sistemas operativos en tiempo real requieren que la latencia y el Jitter estén definidos y no relacionados con la carga del sistema. Los Sistemas Operativos de tiempo real requieren proveer un nivel de servicio adecuado a las aplicaciones, dando la respuesta en un intervalo de tiempo 5 Ingeniería en sistemas de Información Teoría de Control – Grupo Nº11 Ciclo2010 determinado. Esto se traduce en requerimientos temporales y se los brinda mediante interrupciones de software y hardware. Por eso la latencia y el Jitter son dos aspectos importantes. Tenemos tres clases de tiempo real: Tiempo real estricto (Hard Real Time): todas las acciones deben ocurrir dentro del plazo especificado. Tiempo real flexible (Soft Real Time): se pueden perder plazos de vez en cuando. El valor de la respuesta decrece con el tiempo. Tiempo real firme (Firm Real Time): se pueden perder plazos ocasionalmente. Una respuesta tardía no tiene valor. Los sistemas operativos en tiempo real deben reducir la latencia y el Jitter al orden de microsegundos. El elemento que influye en eso es el gestor de interrupciones. El procesamiento de interrupciones en el kernel estándar esta dividido en dos tareas, una de ellas que se encarga de leer los datos del dispositivo físico y escribirlos en un buffer, llamado manejador de interrupciones; otra tarea que se encarga de pasar los datos del buffer a otro para que sean accesibles por el kernel. Para reducir la latencia y el Jitter se desarrollaron diferentes alternativas que modifican al kernel. Tenemos entonces, dos corrientes de diseño: Atención prioritaria en el kernel estándar (Preemptable kernel) Modificaciones sobre el kernel estándar (Patch) Atención prioritaria en el kernel estándar En este caso lo que se hace es modificar al kernel para permitir que los procesos del kernel se puedan ejecutar con prioridad alta y máxima. De esta manera aquellos procesos de menor prioridad pueden ser interrumpidos en el caso de que los procesos de mayor prioridad quieran recursos que actualmente hayan sido asignados a los anteriores. El manejador de interrupciones debe no bloquear a aquellas interrupciones que sean de alta prioridad mientras maneja otras interrupciones que sean de prioridad baja. El planificador de procesos sabe que aquellos procesos de tiempo real tienen mayor prioridad que los procesos que no sean de tiempo real. Esta metodología trae como ventajas el hecho de que se protege la memoria disponible, los procesos no pueden quebrar al kernel, el acceso a los servicios del sistema es completo y se da soporte a herramientas de depuración. Como desventajas 6 Ingeniería en sistemas de Información Teoría de Control – Grupo Nº11 Ciclo2010 es que se tiene un rendimiento global reducido, un rendimiento bajo para baja latencia y se debe hacer un cambio considerable en el código del kernel. Modificaciones en el kernel estándar (Patch) En esta metodología tenemos cuatro estrategias para modificar al kernel del sistema operativo para que pueda dar soporte al tiempo real. Una de ellas implica la modificación directa del código del kernel para añadirle características de tiempo real, y las otras tres implican añadir un segundo kernel, kernel dual para poder manejar las tareas de tiempo real. Las estrategias son: Micro kernel Nano kernel Recurso kernel Extensiones POSIX de tiempo real añadidas al kernel Microkernel La estrategia consiste en añadir un segundo kernel, que en realidad es una capa de interfaz entre el hardware y el kernel estándar. Esto se llama HAL (Hardware Abstraction Layer). Esta capa de microkernel controla la ejecución de procesos en tiempo real y ejecuta el kernel estándar como una tarea en background, es decir cuando no hay tareas de tiempo real pendientes. Además intercepta las interrupciones de hardware y asegura que los procesos de tiempo real se ejecuten con la mayor prioridad posible, para poder así minimizar la latencia. 7 Ingeniería en sistemas de Información Teoría de Control – Grupo Nº11 Ciclo2010 Nanokernel Esta estrategia es parecida a la de micro kernel, pero se trata de evitar una patente que tiene la estrategia de microkernel, fijada por Yodaiken (quién fue uno de los fundadores de los sistemas RTS Linux). El nanokernel lo que hace es capturar interrupciones de hardware y permitir la ejecución paralela de varios sistemas operativos por encima de él. La estrategia en sí es una capa intermedia entre el hardware y el sistema operativo, siendo que este último puede ser o no de tiempo real. Extensión con un nuevo kernel de acceso a los recursos – Recurso Kernel En esta estrategia lo que se hace es añadir un kernel de modo que brinde una puerta de acceso a los recursos como al sistema de ficheros, al puerto paralelo, etc. Tanto para el kernel estándar como para los procesos de usuario. El recurso kernel captura las interrupciones y también proporciona un mecanismo donde los programas de usuario pueden requerir, reservar y garantizar un porcentaje finito de los recursos como pueden ser de cpu, memoria, etc. Extensiones POSIX de tiempo real añadidas al kernel 8 Ingeniería en sistemas de Información Teoría de Control – Grupo Nº11 Ciclo2010 Por último, en esta estrategia lo que se hace es modificar directamente al kernel del sistema operativo añadiendo librerías que implementen extensiones de tiempo real de POSIX (Portable Operating System Interface ). Las modificaciones que se hacen al kernel consisten en implementar relojes, señales, semáforos, memoria compartida, planificador por prioridades, etc. Según lo especificado en el estándar IEEE 1003.1d. Arquitectura del microkernel de QNX QNX se basa en 2 principios fundamentales para lograr la eficacia, modularidad, y simplicidad: La arquitectura del Microkernel La comunicación entre procesos basada en mensajes. La arquitectura consiste en un pequeño kernel a cargo de un grupo de procesos cooperativos. Microkernel El microkernel es muy pequeño y tiene las siguientes responsabilidades: IPC - el Microkernel supervisa el ruteo de mensajes; también maneja otras dos formas de IPC: proxies y señales. La comunicación de la red a bajo nivel - el Microkernel entrega todos los mensajes destinados a los procesos en otros nodos. Scheduling de procesos - el scheduler del Microkernel decide qué proceso se ejecutará luego. Manejo de interrupciones del primer nivel - todas las interrupciones de hardware y las fallas se rutean primero a través del Microkernel, luego se pasa al driver o al administrador del sistema. La estructura interna del microkernel tiene la siguiente forma: 9 Ingeniería en sistemas de Información Teoría de Control – Grupo Nº11 Ciclo2010 La comunicación entre procesos El QNX Microkernel apoya tres tipos esenciales de IPC: mensajes, proxies y señales Mensajes - la forma fundamental de IPC en QNX. Ellos proporcionan la comunicación síncrona entre procesos cooperativos dónde el proceso que envía el mensaje requiere acuse de recibo y potencialmente una contestación al mensaje. Proxies - una forma especial de mensaje. Están especialmente preparados para notificación de eventos dónde el proceso que lo envía no necesita actuar recíprocamente con el destinatario. Señales - una forma tradicional de IPC. Se utilizan para apoyar la comunicación entre procesos de forma asíncrona. Los procesos del sistema Todos los servicios de QNX, excepto aquellos proporcionados por el Microkernel, se manejan como procesos comunes. Una configuración de QNX típica tiene los procesos de sistema siguientes: Administrador de procesos (Proc) Administrador del sistema de archivos (Fsys) Administrador de dispositivos (Dev) Administrador de red (Net) El Administrador de Procesos Para proporcionar los servicios esenciales del sistema operativo el administrador de procesos trabaja conjuntamente con el microkernel. Aunque comparte el mismo espacio de dirección con el Microkernel, el Administrador de Procesos corre como un verdadero proceso, por lo que también el Microkernel realiza scheluding sobre él. Es responsable de crear nuevos procesos en el sistema y manejar los recursos fundamentales asociados a un proceso. Estos servicios son todos proporcionados vía 10 Ingeniería en sistemas de Información Teoría de Control – Grupo Nº11 Ciclo2010 mensajes. Por ejemplo, si un proceso corriente quiere crear un nuevo proceso, envía un mensaje que contiene los detalles del nuevo proceso a ser creado. Primitivas de creación de procesos QNX soporta tres primitivas de la creación de procesos: Fork () exec () spawn () Fork () y exec () se definen por POSIX, mientras que la aplicación de spawn () es única para QNX. Fork (): crea un nuevo proceso que es una imagen exacta del proceso de llamada. exec (): sustituye a la primitiva imagen de proceso de llamadas con una nueva imagen de proceso. spawn (): El spawn () primitiva crea un nuevo proceso como un hijo del proceso de llamada. Se puede evitar la necesidad de Fork () y exec (), lo que resulta en una más rápida y eficiente medio para crear nuevos procesos. El ciclo de vida de un proceso Un proceso pasa por cuatro fases: Creación: Crear un proceso consiste en asignar un PID para el nuevo proceso y preparar la información que define el ambiente del nuevo proceso. La mayoría de esta información se hereda del padre del nuevo proceso. Carga: La carga de imágenes del proceso se hace por un hilo del LOADER. El código del LOADER reside en el Administrador del Procesos, pero el hilo corre bajo el PID del nuevo proceso. Esto permite al Administrador de Procesos atender otras demandas mientras los programas se cargan. Ejecución: Una vez que el código del programa se ha cargado, el proceso está listo para la ejecución; empieza a competir con otros procesos por los recursos de CPU. Todos los procesos se ejecutan concurrentemente con sus padres. Además, la muerte de un proceso padre no causa la muerte de sus procesos hijos automáticamente. Terminación: Un proceso se termina de dos maneras: - Por una señal cuya acción cause la terminación deliberada del proceso. - El proceso invoca exit() El Administrador del Filesystem 11 Ingeniería en sistemas de Información Teoría de Control – Grupo Nº11 Ciclo2010 El Administrador de Filesystem (Fsys) proporciona un método estándar de guardar y acceder a los datos en los subsistemas de discos. Fsys es responsable de ocuparse de todas las demandas para abrir, cerrar, leer, y escribir los archivos. En QNX, un archivo es un objeto que puede escribirse, leerse, o ambos. QNX implementa seis tipos de archivos; de los cuales cinco de éstos son manejados por Fsys: Archivos regulares - consisten en secuencia de bytes que pueden ser accedidas de forma aleatoria y no tiene ninguna otra estructura predefinida. Los directorios - contienen la información necesaria para localizar los archivos regulares; también contienen información del estado y los atributos para cada archivo regular. Accesos directos - contienen una ruta a un archivo o directorio. Estos archivos se usan a menudo para proporcionar múltiples caminos a un solo archivo. Pipes y FIFOs - sirven como canales I/O entre procesos que cooperan. Archivos de bloques especiales - refiere a los dispositivos, como las unidades de disco, cintas, y particiones de la unidad de disco. Estos archivos normalmente se acceden de una manera que esconde las características del hardware del dispositivo de las aplicaciones. El sexto tipo de archivo, el archivo especial de carácter, se maneja por el Administrador de Dispositivos. Fecha y marcas de tiempo Fsys mantiene cuatro momentos diferentes para cada archivo: fecha del último acceso (leer) fecha de la última escritura fecha de la última modificación fecha de creación (única para QNX) El acceso al archivo Hay tres tipos de accesos a los archivos regulares y directorios: usuario sólo único grupo otros Un proceso también puede ejecutarse con el ID de usuario o ID de grupo de un archivo en lugar de las de su proceso padre. El mecanismo que permite que esto se conoce como setuid (programar una ID de usuario en ejecución) y setgid (programar una ID de grupo en la ejecución). El Administrador del Dispositivo 12 Ingeniería en sistemas de Información Teoría de Control – Grupo Nº11 Ciclo2010 El Administrador de Dispositivos (Dev) es la interface entre los procesos y los dispositivos terminales. Estos dispositivos terminales se localizan en el namespace de I/O con nombres que comienzan con /dev. Los servicios de dispositivos Un dispositivo terminal se presenta a un proceso de QNX como un flujo bidireccional de bytes que pueden leerse o pueden escribirse por el proceso. El Administrador del Dispositivos regula el flujo de datos entre una aplicación y el dispositivo. Algo del procesamiento de los datos es realizado por Dev según los parámetros en una estructura de control terminal (llamada el termios) que existe para cada dispositivo. Los parámetros del termios controlan la funcionalidad de bajo nivel como: la disciplina de línea de mando (incluso la proporción del baudio, paridad, los bits de stop y los bits de datos) Eco de caracteres Edición de la línea de entrada Reconocimiento y solución sobre pausas y cortes Control de flujo por hardware y software la traducción de caracteres salida Driver de Dispositivos 13 Ingeniería en sistemas de Información Teoría de Control – Grupo Nº11 Ciclo2010 La ilustración siguiente muestra un subsistema típico de un dispositivo en QNX. El proceso de Administrador de Dispositivos (Dev) maneja el flujo de datos a y de los procesos de aplicación QNX. La interface del hardware se maneja por procesos de drivers individuales. El dato fluye entre Dev y sus drivers a través de un conjunto de colas de memoria compartida para cada dispositivo terminal. Ya que se usan colas de memoria compartida, es necesario que Dev y todos sus drivers residan en el mismo CPU físico. La ventaja es que se incrementa la Performance. Se usan tres colas para cada dispositivo. Cada cola se implementa usando FIFO. Una estructura de control también es asociada con cada cola. Los datos recibidos se ponen en la cola de entrada por el driver y sólo se consume por Dev cuando la aplicación procesa los datos de la demanda. Los tamaños de todas estas colas son configurables por el administrador del sistema; la única restricción es que el total de la suma de las tres colas no puede exceder 64K. Los valores por defecto normalmente son más que adecuados para manejar la mayoría de las configuraciones del hardware. 14 Ingeniería en sistemas de Información Teoría de Control – Grupo Nº11 Ciclo2010 El Administrador de la Red Comunicándose directamente con el Microkernel, el Administrador de la Red mejora el intercambio de mensajes (IPC) propagando los mensajes eficazmente a las máquinas remotas. Además, el Administrador de la Red ofrece tres rasgos avanzados: un mayor rendimiento a través de equilibrio de carga tolerancia a fallos a través de conectividad redundante puente entre las redes de QNX En pocas palabras, Qnet es una red basada en el envío de mensajes que le brinda acceso transparente a cualquier recurso del sistema. Qnet le permite construir aplicaciones eficientes y tolerantes a fallos que pueden ser escaladas fácilmente. Qnet está integrada en el corazón de las primitivas de manejo de procesos y envió de mensajes de QNX, haciendo que la intercomunicación de procesos local y a través de una red sea lo mismo. Usando Qnet, una red de nodos individuales se convierte en una supercomputadora virtual, donde cada nodo tiene acceso a todos los recursos del sistema. El diseño único de Qnet le hace posible crear redes altamente escalables y tolerantes a fallo con soporte para balancear la carga. Con Qnet, cualquier dispositivo en el sistema puede acceder cualquier recurso en forma transparente. Qnet extiende el mecanismo de envió de mensajes que forma el núcleo de la plataforma QNX. Utilizando Qnet, los mensajes son enviados de forma transparente de un nodo a otro, lo que hace posible acceder y utilizar recursos como por ejemplo sistemas de archivos, I/O, recursos de hardware, administradores de procesos y más. Diferencias con otros sistemas operativos Vamos a comparar tres familias de sistemas operativos, Unix, Windows y QNX. De la familia UNIX, que son sistemas operativos portable, multitarea y multiusuario, se desprenden dos sistemas operativos muy conocidos, Linux y Mac OS X que describiremos a continuación: Linux: Es un sistema operativo que posee estabilidad y facilidad de escalabilidad. Linux es una reimplementación completamente gratuita de las especificaciones POSIX 1, con extensiones de SYSV y BSD (lo cual significa que parece Unix pero no proviene del mismo código fuente base), que está disponible tanto en su versión fuente como ya compilada. El copyright pertenece a Linus B. Torvalds ([email protected]) y otros colaboradores, y es libremente redistribuible bajo las condiciones de la "GNU Public License". Provee de acceso al código fuente lo que me permite personalizar el funcionamiento y auditar la seguridad y privacidad de los datos tratados. Como consecuencia de que sea libremente redistribuible, me garantiza la independencia de 15 Ingeniería en sistemas de Información Teoría de Control – Grupo Nº11 Ciclo2010 proveedor. Sufre de pocos ataques de virus. Implementa la interfaz grafica llamada X Window para su presentación de escritorio, o se puede usar el modo consola. Los escritorios mas populares son GNOME, KDE, LXDE, Xfce. Funciona en procesadores Intel, Sparc, Alpha y Power PC; con una cantidad máxima de 16 procesadores. Se lo utiliza en computadoras personales y servidores, dado su seguridad y capacidad de configuración. Mac OS X: Este sistema operativo usado en las maquinas Mac esta basado en las especificaciones POSIX. Implementa interfaz grafica desarrollada en Objective-C y actualmente corre bajo procesadores INTEL. Sufre de pocos ataques de virus. Dicho sistema no permite el acceso al código fuente. Y su utilización se da en computadoras personales. La familia Windows que se destaca por ser sistemas operativos basados en interfaz grafica (GUI), vamos a comprar el sistema operativo de núcleo hibrido, basado en núcleo NT. Podemos comenzar comentado que es un SO multitarea, cuya presentación al usuario es totalmente grafica. Define una forma homogénea de utilizar los recursos de la computadora, lo cual permite compartir datos entre las distintas aplicaciones, así como utilizar con facilidad los elementos hardware ya instalados. No provee de acceso al código. Puede funcionar en procesadores Intel y Alpha. Sufre de un alto ataque de virus. Su utilización se da en computadoras personales fundamentalmente. De la familia de los sistemas operativos en tiempo real, seguimos con QNX, que como ya estamos leyendo está basado en Unix y cumple con las especificaciones POSIX. Es un sistema operativo multitarea, flexible por lo que los desarrolladores pueden personalizar el sistema operativo fácilmente para satisfacer las necesidades de su aplicación; con estabilidad avanzada frente a fallos de dispositivos, aplicaciones, etc. Utiliza una interfaz grafica llamada Photon o Photon microGUI que es el sistema de ventanas. Está orientado a su utilización en microcontroladores y sistemas críticos. Corre bajo procesadores INTEL: 386, 486, Pentiums y sus clones como AMD, Nat Semiconductor, Cyrix y SGS Thompson. Prácticamente no sufre ataques de virus. Utilización en microcontroladores y sistemas críticos. Resumen: QNX Windows Unix Sistemas operativo en tiempo real basado en Unix que cumple con la norma POSIX Familia de SO de interfaz grafica (GUI) Portable, multitarea y multiusuario Multitarea Estabilidad Multitarea Linux Mac OS X Multitarea Multitarea Estabilidad 16 Ingeniería en sistemas de Información Teoría de Control – Grupo Nº11 Ciclo2010 avanzada Escalabilidad Escalabilidad Flexible Interfaz grafica Toda la información llamada Photon presentada al o Photon usuario es microGUI que es el gráfica. sistema de ventanas. Interfaz grafica llamada X Window o puede funcionar en modo consola. Interfaz Grafica desarrollada en ObjectiveC Prácticamente Altamente atacado ningún ataque de por virus virus. Bajo ataque de virus Bajo ataque de virus Utilización en Utilización en microcontroladores y computadores sistemas críticos. personales. Utilización en computadores personales y servidores debido a su seguridad. Utilización en computadores personales. Funciona en Funciona en procesadores INTEL: procesadores 386, 486, Pentiums y Intel y Alpha. sus clones como AMD, Nat Semiconductor, Cyrix y SGS Thompson. Funciona en procesadores Intel, Sparc, Alpha y Power PC. Funciona en procesadores Intel. Desarrolladores No permite el pueden personalizar acceso al código el sistema operativo fuente fácilmente para satisfacer las necesidades de su aplicación Acceso al Código fuente (permite personalizar el funcionamiento y auditar la seguridad y privacidad de los datos tratados) No permite el acceso al código fuente Instalación típica de QNX: Una instalación del desktop de QNX es aproximadamente de 10M. El Photon microGUI®, que incluye el QNX OS, browser de VoyagerTM, y TCP/IP, requiere más de 160M de espacio del disco. Antes de continuar con la instalación, asegúrese de leer las instrucciones de instalación, así como las notas de la versión que viene con el software. Las notas de la 17 Ingeniería en sistemas de Información Teoría de Control – Grupo Nº11 Ciclo2010 versión contienen información importante que podría influir en la forma que elija para instalar el software. También debe leer la arquitectura del sistema manual, lo que explica la filosofía básica y el funcionamiento de QNX. Suponemos que tiene este nivel básico de familiaridad con el sistema operativo. Requisitos del sistema Los requerimientos del sistema varían, dependiendo de los productos que desea instalar. Por ejemplo, para instalar la base en su sistema de desarrollo, necesitará al menos 14M de espacio libre en disco. Para obtener más información, consulte las instrucciones de instalación que se incluyen con cada producto. Su sistema de destino es probable que requieran menos espacio de disco, RAM, etc. que su sistema de desarrollo. Desde que QNX es un sistema operativo modular, se puede configurar fácilmente el sistema de destino para utilizar sólo los módulos realmente necesarios en tiempo de ejecución. Es conveniente que la partición donde se instale el sistema operativo sea FAT32, para lograr una mayor compatibilidad. Medios de distribución QNX productos pueden ser enviados en cualquiera de estos dos medios: Disquete CD-ROM En ambos casos, va a utilizar un programa de instalación para instalar QNX en su disco duro. El programa crea una estructura de directorios, copia el software en el disco duro, y construye una imagen de arranque del sistema operativo configurado de acuerdo con su opinión durante el proceso de instalación. Durante el procedimiento de instalación, se le pedirá que confirme su configuración de hardware. Asegúrese de tener la información correcta sobre su hardware antes de empezar: El tamaño del disco duro y partición (s) Disco duro tipo de controlador (IDE, SCSI Adaptec 2940, etc) Tipo de tarjeta de red y el fabricante (por ejemplo, Ethernet de Novell NE2000) CD-ROM de la distribución Si el software de QNX fue enviada en un CD, el procedimiento de instalación es muy sencilla: 1) Inserte el CD en la unidad de CD-ROM. 2) Reinicie su computadora. 18 Ingeniería en sistemas de Información Teoría de Control – Grupo Nº11 Ciclo2010 3) Cuando arranca el sistema, simplemente siga las instrucciones que aparecen en pantalla. Distribución de disquete Para instalar QNX desde disquetes, siga estos pasos: 1) Coloque el disquete de arranque QNX en la unidad de disquete y reinicie el equipo. 2) Usted debe ver una flecha de giro o una serie de puntos en la esquina superior izquierda de la pantalla, seguido por el logotipo de QNX, un mensaje de bienvenida, y un intérprete de comandos. Si desea información sobre la instalación de las opciones antes de seguir, el tipo de uso de instalar en la línea de comandos. Para transferir el software desde los disquetes en el disco duro, escriba el siguiente comando en el intérprete de comandos: Install Simplemente siga las instrucciones que aparecen en pantalla para configurar su disco duro por lo que se iniciará QNX. Reinicie desde el disco duro. Una vez que todos los archivos se han instalado desde el disquete, debe eliminar cualquier disquete y reinicie el ordenador desde el disco duro. QNX ahora debería estar en funcionamiento. En este punto, tendrá que iniciar la sesión como raíz. Ahora está listo para instalar software adicional, personalizar la instalación, configurar la red, etc QNX Neutrino RTOS La última versión del sistema operativo en tiempo real QNX, llamada QNX Neutrino RTOS es un completo y robusto sistema operativo que permite satisfacer las necesidades de recursos limitados en tiempo real de sistemas embebidos. Su diseño microkernel y su arquitectura modular permite a los clientes crear sistemas altamente fiables y optimizados, con bajo coste de propiedad. Ya sea que se trate de pequeños o grandes, simples o distribuidos, estos sistemas son conocidos por su capacidad de operar las 24 horas al día, los 365 días al año, sin parar. Se diferencia de otros productos por la fiabilidad, tolerancia a fallas y escalabilidad. Además, ofrece grandes ventajas a nivel técnico, económico y alto rendimiento, incluso en hardware barato, gracias a sus principales características: tiempos de respuesta predecibles y muy rápida interrupción de latencias y cambios de contexto (tiempo real); la arquitectura Microkernel; la partición adaptativa. 19 Ingeniería en sistemas de Información Teoría de Control – Grupo Nº11 Ciclo2010 Tiempo real La característica de microkernel preventiva y el planificador basado en prioridades, permite que QNX Neutrino RTOS proporcione tiempos de respuesta rápidos y predecibles, deterministas tanto a nivel de aplicaciones como de todos los subsistemas. Esto es posible mediante: La rápida interrupción de latencias y cambios de contexto que ayudan a exprimir el más rápido tiempo de respuesta posible de hardware integrado. Prioridad para eliminar la herencia de la inversión de prioridades. Simplificación de modelado en tiempo real a través de las actividades de mensaje síncrono. Interrupciones anidadas y una determinada cota superior de la latencia de interrupción, asegurando que las interrupciones de alta prioridad se atiendan primero, en un plazo previsible, permitiendo que se cumplan sus plazos aún en condiciones de carga pesada. Arquitectura Microkernel Su arquitectura microkernel lo posiciona como un sistema robusto, facilitando la identificación y resolución de errores, y permitiendo actualizaciones de componentes en forma segura y rápida, sin tiempos de inactividad costosos o cortes en el sistema; y auto-reparable, posibilitando que ante la falla de cualquier componente el sistema se reinicie automáticamente sin afectar al núcleo u otros componentes; ofreciendo así un alto nivel de contención y recuperación ante fallos. El microkernel incluye sólo los servicios esenciales, como la señalización, temporizadores y programadores. Todos los demás componentes, como ser sistemas de archivos, drivers, pilas de protocolos y aplicaciones, se ejecutan en la seguridad del espacio de usuario en memoria protegida. QNX Neutrino RTOS microkernel 20 Ingeniería en sistemas de Información Teoría de Control – Grupo Nº11 Ciclo2010 Además, ayuda a crear tolerancia a fallos y sistemas auto-reparables mediante: Ciclos de CPU para la detección de errores y recuperación del sistema que aseguran la recuperación rápida del mismo. Posibilidad de poder determinar siempre el estado del sistema, independientemente de la carga del procesador (mediante interfaz de usuario o consola). Reinicio automático de procesos fracasados, sin un reinicio del sistema. Recuperación automática de las comunicaciones entre procesos tras fallos del proceso. Ante la falla de cualquier componente, el sistema operativo lo denuncia y reclama los recursos que estaba utilizando, sin necesidad de reiniciar el sistema y sin perjudicar al núcleo ni a los demás componentes. La falla se limita únicamente a ese componente, reduciendo al mínimo el tiempo medio de reparación. Las características de autoreparación y particionado, además de servicio redundante, es decir, procesamiento distribuido transparente (arquitectura de redes) que permite la construcción rápida de los servicios redundantes, aseguran la alta disponibilidad de los servicios. Partición adaptativa La partición (conjunto de procesos o hilos) QNX adaptativa permite el uso óptimo de toda la capacidad disponible de la CPU, sobretodo en sistemas de uso intensivo de procesador, asegurando que los procesos críticos nunca tengan carencia de recursos y puedan cumplir con los plazos de tiempo real. En condiciones normales, las particiones pueden usar cualquier cantidad ciclos de CPU disponibles. Sin embargo, durante una sobrecarga, es decir, cuando se requiere más cálculo del que el sistema puede sostener en el tiempo, el programador de partición QNX impone límites a los ciclos de CPU que se le pueden asignar a cada partición, garantizando que el mínimo requerido de recursos de la CPU esté siempre disponible para los procesos especificados (se asegura que cada una de las aplicaciones reciba una fracción de los recursos que requiere). Cuando existen ciclos de procesamiento disponibles, las particiones pueden superar sus presupuestos de tiempo de uso de CPU. Los ciclos disponibles se asignan dinámicamente a aquellas particiones que se puedan beneficiar de tiempo adicional de CPU, eligiendo siempre a aquellas de mayor prioridad de ejecución, o a aquellas que fueron designadas como críticas independientemente de la carga del sistema y el presupuesto de partición. Manteniéndose de esta manera el determinismo en tiempo real. Es decir, que tanto en condiciones de disponibilidad de recursos como de limitación de los mismos, las aplicaciones cuentan con recursos para poder operar. 21 Ingeniería en sistemas de Información Teoría de Control – Grupo Nº11 Ciclo2010 Diseños de partición fija Partición QNX adaptativa Son ineficientes. La capacidad sobrante de CPU no puede ser utilizada. Los requerimientos de CPU se fijan de antemano para prever la demanda máxima. Ofrece las garantías mínimas de tiempo de CPU a las particiones. La capacidad sobrante CPU se utiliza cuando está disponible. Los procesos pueden superar sus límites de presupuesto cuando hay ciclos disponibles. Otras de las características de QNX Neutrino RTOS que pueden mencionarse son: Procesamiento transparente distribuido El procesamiento transparente distribuido (TDP) permite que los recursos tengan una independencia de su localización en la red. El software en cualquier nodo de la red puede acceder a cualquier recurso publicado. Para lograr la interconexión dinámica de recursos, TDP envía un mensajes estándar a través de cualquier tecnología de interconexión de redes, permitiendo así que los recursos, tanto hardware como software, que se encuentran en los extremos puedan compartirse. TDP se caracteriza por el empleo de redundancia y balanceo de carga. Esta cualidad permite evitar la pérdida de servicio, ya que si un eslabón falla los datos son reenrutados a través de los demás eslabones. Si ocurre un error en un nodo/enlace, los datos se cargan en forma equilibrada sobre los nodos/enlaces restantes. 22 Ingeniería en sistemas de Información Teoría de Control – Grupo Nº11 Ciclo2010 Todos los componentes del sistema operativo se comunican a través de una sola capa, mediante mensajes bien definidos. Este mensaje forma una capa de "bus" que permite la inserción y la eliminación de componentes de software en cualquier momento. El flujo de mensajes de forma transparente a través del procesador, brinda un acceso también transparente a cualquier recurso, en cualquier parte de la red. El procesamiento transparente distribuido, permite a los desarrolladores crear sistemas robustos y tolerantes a fallos que ofrezcan acceso on-demand a recursos en múltiples terminales. Si una no está disponible, un recurso similar se puede acceder de forma transparente en otra. Arranque rápido QNX Neutrino RTOS ofrece varias estrategias de arranque rápido: BIOS- less boot: se reemplaza la BIOS estándar por inicialización personalizada de los periféricos, gracias a que los conductores de estos dispositivos están fuera de la BIOS. Esto permite seleccionar qué se inicia y cuándo, eliminar inicializaciones no necesarias y posponer otras hasta después del arranque. 23 Ingeniería en sistemas de Información Teoría de Control – Grupo Nº11 Ciclo2010 Microkernel: permite modificar la secuencia de arranque para sacar provecho del tiempo de inactividad, siendo posible determinar qué arranca cuándo. Activación instantánea de dispositivo (IDA): utiliza minicontroladores, que se ejecutan antes de que el núcleo del sistema operativo se inicie, para iniciar las aplicaciones necesarias a fin cumplir con los requisitos de disposición temprana. Photon microGUI Photon microGUI es un sistema de ventanas, para QNX que se entrega con QNX Software Development Platform (SDP). Dentro de sus características cabe destacar: Configuración de pantallas múltiples: soporta visualización individual a varios monitores (presenta toda la Photon microGUI en una serie de monitores) y para múltiples pantallas en múltiples monitores con una sola CPU. Rápida creación de prototipos sin extensa codificación, gracias a Photon widgets fáciles de usar, la reducción del tamaño de bibliotecas compartidas y la reutilización de código en nuevos componentes. Dispone del constructor de aplicaciones (Application Builder) para probar las mismas. Personalizar la GUI (ventanas, botones, menús) es muy sencillo ya sea en forma individual o global, al igual que los widgets. Compatibilidad con lenguajes asiáticos y fuentes escalables, como fuentes True Type y mapa de bits. Cualquier parte de la interfaz gráfica de usuario puede actualizarse, modificarse, recibir adiciones y sustituciones sin necesidad de reiniciar el sistema. El enfoque de desarrollo HMI (Human Machine Interface) simplifica y acelera el trabajo necesario para crear interfaces de usuario sofisticadas. Permite crear interfaces de usuario libres de distracciones y parpadeo, reduciendo el consumo de CPU y optimizando el rendimiento mediante la eliminación de cálculos redundantes. Existen componentes opcionales que incluyen bibliotecas con más de 80 widgets, controladores de gráficos, datos de entrada (ratón, teclado, pantalla táctil) y utilidades de Photon, tales como terminales, gestoras de archivos, gestoras de escritorio multipantalla, editores y lectores de HTML y código fuente para servicios públicos y el programa de ejemplo. Phindows Para lograr la interacción con aplicaciones Photon desde un escritorio Windows, ya sea a través de una red IP o conexión serie, se utiliza la herramienta de conexión a distancia Phindows. Esta herramienta permite: Reducir los costos de hardware: dispositivos embebidos no requieren una pantalla o un teclado físico dedicado. Aumentar la productividad del desarrollador: las aplicaciones Photon pueden ser construidas y probadas desde un escritorio Windows, reduciendo así la necesidad de simuladores. Portabilidad: una aplicación Photon puede ejecutarse tanto en un entorno QNX, como en un escritorio de Windows sin necesidad de recodificar o recompilar. 24 Ingeniería en sistemas de Información Teoría de Control – Grupo Nº11 Ciclo2010 Usuarios remotos: los desarrolladores no necesitan estar en el lugar para depurar aplicaciones. El rendimiento de Phindows se puede ajustar para obtener un rendimiento óptimo con la velocidad de conexión disponible, la memoria RAM, recursos de disco y los requisitos de seguridad. Brinda soporte para: Compresión de datos en la transferencia de datos. RAM configurable y cachés de disco: imágenes caché en la máquina Windows que se transfieran sólo una vez y persisten en los reinicios. Fuentes de la ventana local: las fuentes pueden ser representadas como mapas de bits y enviadas al escritorio Windows o representadas en Windows utilizando archivos de fuentes locales, para mantener la apariencia de la fuente deseada mientras se minimiza la carga de transmisión de datos. Seguridad: los desarrolladores pueden especificar una clave de cifrado para el final de Windows remoto que debe coincidir con la clave en el host QNX. Se requieren una identificación de usuario y contraseña en la conexión. Requisitos del sistema QNX 6,3 o más reciente Windows 2000 o Windows XP SOFTWARE SOBRE QNX: REALFLEX RealFlex es un proveedor líder y global de software de SCADA y de control de procesos. Tiene clientes como Plantas de Gas, Órganos de gobierno, empresas multinacionales y de telecomunicaciones. Entre sus productos, el producto RealFlex 6 combina las características de tiempo real, multi tarea y da soporte a QNX Neutrino, tiene interfaces gráficas basada en Windows o Photon. Este producto RealFlex es un paquete de software para aplicaciones de control de procesos que puede correr sobre el sistema operativo QNX. Sus características principales son: Soporte de tiempo real, para seguimiento y control Configuración STAND BY Alto rendimiento y diseño eficaz para grandes bases de datos Procesa datos en tiempo real Guarda un histórico de las bases de datos Dispone de alarmas, procesadores de eventos, de cálculos Tiene capacidad de control Tiene CSL- Lenguaje de comandos de secuencia Soporta una amplia gama de protocolos estándares 25 Ingeniería en sistemas de Información Teoría de Control – Grupo Nº11 Ciclo2010 Migración automática de sistemas heredados RealFlex 4 Dispone de API del servidor de aplicaciones para interactuar con consolas QNX Dispone de un kit de desarrollo de personal Sus beneficios son: Alta velocidad Redundancia en el procesamiento para recuperación ante fallos Los usuarios tienen acceso a la interfaz del operador, bases de datos SQL, páginas web Compatibilidad con un gran número de RTOS Permite efectuar captura de eventos del sistema Se pueden desarrollar aplicaciones Requerimientos de Hardware: Procesador Intel Pentium 64 Mb de memoria RAM Espacio de 120 Mb libres en disco Unidad de CDROM 1 o más puertos serie RS232 26 Ingeniería en sistemas de Información Teoría de Control – Grupo Nº11 Ciclo2010 Interface Gráfica de Usuario 27 Ingeniería en sistemas de Información Teoría de Control – Grupo Nº11 Ciclo2010 Fuentes: http://toastytech.com/guis/qnxdemo.html http://qdn.qnx.com/developers/docs/qnx_4.25_docs/qnx4/user_guide/install. html http://www.qnx.com/products/hmi/photon.html http://www.utvikling.com/photon.asp http://www.qnx.com/products/neutrino-rtos/neutrino-rtos.html#technology 28