ilike

http://octavio-razo.blogspot.com/

sábado, 25 de junio de 2011

¿Qué es un sistema en tiempo real?.
El Diccionario Oxford de computación dice:

Cualquier sistema en el que el tiempo en el que se produce la salida es significativo. El intervalo entre el tiempo de entrada y el de salida debe ser lo suficientemente pequeño para una temporalidad aceptable.

Un sistema en tiempo real es la expresada por Donald Gillies1:
"A real‐time system is one in which the correctness of the computations not
only depends upon the logical correctness of the computation but also upon
the time at which the result is produced.
If the timing constraints of the system are not met, system failure is said to
have occurred."
que traducida al español sería:
Un sistema de tiempo real (STR) es aquel en cual los resultados son correctos, y no sólo depende
de si la lógica e implementación de los programas computacionales son correctos, sino también el
tiempo en el cual se producen dichos resultados.
Si no se verifican las restricciones de tiempo, se dice que se ha producido un fallo en el sistema.
1

(Actividad 4, parte 2)


Diferencias entre S.O. Convencionales y S.O. de Tiempo Real


Características
S.O. en Tiempo Real
S.O. Convencional
Uso
Uso específico en área de trabajo industrial es decir más complejo (control industrial, conmutación telefónica, control de vuelo, simulaciones en tiempo real., aplicaciones militares, etc)
Uso de oficina u hogar, entorno mas agradable y simple para tareas de contabilidad y similares
Determinismo.
Si
No
Valoración de tiempo
Si
No
Tiempo de respuesta
Prioridad Rápida
Prioridad Normal
Restricción de tiempo
Si
No
Objetivo
Es proporcionar rápidos tiempos de respuesta.
Permite que los recursos de la computadora se usen de la manera más eficiente posible
Evolucionar
Si
Si
Recuperación de errores
Si
Si (conservar la máxima capacidad y los máximos datos posibles en caso de fallos)
Control del usuario
Si
No
Multiusuario
No
Si
Multitarea
Si
No
Planificación
Por prioridad
Secuencial
Gestión de memoria
Menos exigente que tiempo compartido.  
Los procesos ocupan más.
Gestión de archivos
se orienta más a velocidad de acceso
Se orienta más a la utilización eficiente del recurso
Ejemplos
VxWorks, Solaris, Lyns OS y Spectra.
Windows 98, Windows Me, Windows Vista, Windows Seven, Linux Ubuntu, Linux Xubuntu


  

Lenguajes de Programacion en tiempo real



Los programas creados para la programacion exclusiva en tiempo real, son dos, Ada y Occam, los cuales presento un pequeño resumen a continuacion.

Ada                                                                                       
Es un lenguaje de programación orientado a objetos y fuertemente tipado de forma estática que fue diseñado por Jean Ichbiah de CII Honeywell Bull por encargo del Departamento de Defensa de los Estados Unidos. Es un lenguaje multipropósito, orientado a objetos y concurrente, pudiendo llegar desde la facilidad de Pascal hasta la flexibilidad de C++.
Fue diseñado con la seguridad en mente y con una filosofía orientada a la reducción de errores comunes y difíciles de descubrir. Para ello se basa en un tipado muy fuerte y en chequeos en tiempo de ejecución (desactivables en beneficio del rendimiento). La sincronización de tareas se realiza mediante la primitiva rendezvous.
Ada se usa principalmente en entornos en los que se necesita una gran seguridad y fiabilidad como la defensa, la aeronáutica (Boeing o Airbus), la gestión del tráfico aéreo (como Indraen España) y la industria aeroespacial entre otros.
Uno de sus compiladores muy usado es GNAT, originalmente desarrollado por la Universidad de Nueva York bajo patrocinio del DoD. Está basado en la tecnología de GCC y es software libre. Pero existen otros compiladores comerciales.

Características

  • La sintaxis, inspirada en Pascal, es bastante legible incluso para personas que no conozcan el lenguaje. Es un lenguaje que no escatima en la longitud de las palabras clave, en la filosofía de que un programa se escribe una vez, se modifica decenas de veces y se lee miles de veces (legibilidad es más importante que rapidez de escritura).
  • Es indiferente el uso de mayúsculas y minúsculas en los identificadores y palabras claves, es decir es un lenguaje case-insensitive.
  • En Ada, todo el programa es un único procedimiento, que puede contener subprogramas (procedimientos o funciones).
  • Cada sentencia se cierra con end qué_cerramos. Es un modo de evitar errores y facilitar la lectura. No es necesario hacerlo en el caso de subprogramas, aunque todos los manuales lo aconsejan y casi todos los programadores de Ada lo hacen.
  • El operador de asignación es :=, el de igualdad =. A los programadores de C y similares les puede confundir este rasgo inspirado en Pascal.
  • Se distingue entre "procedimientos"  y "funciones" .

Occam 

Es un lenguaje de programación imperativo y estructurado (al igual que Pascal). Poco conocido y Con muy pero muy poca informacion en la red. Fue desarrollado por David May en Inmos Limited, Bristol, Inglaterra, para desarrollar software para su línea de procesadores Transputers, existiendo también implementaciones para otras plataformas.

Es un lenguaje de procesamiento en paralelo; se basa en el álgebra de procesos CSP (Communicating Sequential Processes) y comparte muchas de sus características. Lleva el nombre de William of Ockham famoso por ser el creador de la navaja de Occam.

Occam incorpora soporte para grano muy fino, facilidad para usar hilos y el apoyo sin fisuras de los entornos multi-procesador. Puede ser utilizado en sistemas de memoria compartida o distribuida, y sus fuertes fundamentos en CSP lo hace una excelente opción cuando se requieren pruebas formales de corrección.

Actualmente el Occam esta tambien como aplicación en el lenguaje Java.

lunes, 20 de junio de 2011

Acciones atómicas y Transacciones Atómicas

 Acciones atómicas 
Definiciones.

Una acción es atómica si los procesos que la realizan no saben de la existencia de ningún otro proceso activo, y ningún otro proceso activo tiene constancia de las actividades de los procesos durante el tiempo en el que están realizando la acción.
Una acción es atómica  si los procesos que la realizan no se comunican con otros procesos mientras se está realizando la acción.
Una acción es atómica  si los procesos que la realizan no pueden detectar ningún cambio de estado salvo aquellos realizados por ellos mismos, y si no revelan sus cambios de estado hasta 
que la acción se haya completado.
Las acciones son atómicas si, en lo que respecta a otros procesos, pueden ser consideradas indivisibles e instantáneas, de forma que los efectos sobre el sistema sean como si estuvieran entrelazadas y no en concurrencia.
Presentacion Informatica 3; 2009- Ing Estela D'Angostino
dsi.fceia.unr.edu.ar/downloads/Concurrencia-2010a(1).ppt



Transacciones Atómicas

Como el programador debe enfrentarse directamente con los detalles de:
  • La exclusión mutua.
  • El manejo de las regiones críticas.
  • La prevención de bloqueos.
  • La recuperación de fallas.
Se precisan técnicas de abstracción de mayor nivel que:
  • Oculten estos aspectos técnicos.
  • Permitan a los programadores concentrarse en los algoritmos y la forma en que los procesos trabajan juntos en paralelo.
Tal abstracción la llamaremos transacción atómica, transacción o acción atómica.
La principal propiedad de la transacción atómica es el “todo o nada”:
  • se hace todo lo que se tenía que hacer como una unidad o no se hace nada.
Ejemplo:
    • Un cliente llama al Banco mediante una PC con un módem para:
      • Retirar dinero de una cuenta.
      • Depositar el dinero en otra cuenta.
    • La operación tiene dos etapas.
    • Si la conexión telefónica falla luego de la primer etapa pero antes de la segunda:
      • Habrá un retiro pero no un depósito.
    • La solución consiste en agrupar las dos operaciones en una transacción atómica:
      • Las dos operaciones terminarían o no terminaría ninguna.
      • Se debe regresar al estado inicial si la transacción no puede concluir.

Protocolo de Techo de Prioridad Inmediata - Expocición


Definición de protocolo: 

En informática, un protocolo es un conjunto de reglas usadas por computadoras para comunicarse unas con otras a través de una red. Puede ser definido como las reglas que dominan la sintaxis, semántica y sincronización de la comunicación.

A su más bajo nivel, un protocolo define el comportamiento de una conexión de hardware.


Protocolo de techo de prioridad:


Este protocolo designa como techo de prioridad de un recurso a la máxima prioridad de las tareas que lo usan. El protocolo consiste en que la prioridad de una tarea sea dinámica y que su valor sea el máximo entre su prioridad básica y las prioridades de las tareas a las que bloquea. 

Entonces, una tarea solo puede usar un recurso si su prioridad dinámica es mayor que el techo de todos los recursos en uso por otras tareas. 

Características

  • Cada tarea tiene prioridad estática por defecto. 
  • Cada tarea tiene una prioridad dinámica. 

  • Cada recurso tiene un valor techo estático. 

  • Una tarea solo puede bloquear un recurso si su prioridad dinámica supera el techo de prioridad de todos los recursos ya bloqueados por otras tareas.

domingo, 3 de abril de 2011

TAREA 5

Diferencia entre maquina paralela y secuencial.
Una maquina con  procesamiento secuencial hace una tarea va después de otra. Es un proceso lento en el que si una tarea se enlentece, el sistema completo debe esperar. La ventaja es que es fácil de entender y de implementar.
En el procesamiento paralelo, varios procesos ocurren al mismo tiempo mejorando el rendimiento general del sistema. Su contrapartida es la complejidad. No siempre se puede paralelizar una tarea. Aunque se pueda, no siempre es fácil hacerlo. En principio, cuanto más nodos actúen en paralelo, más rápido ira el sistema. Hasta cierto punto. Lo común es que haya un límite en que añadir más nodos no aumente la eficiencia, sino que incluso la reduzca. Normalmente las tareas en paralelo tienen una fase secuencial al principio en la que se dividen las tareas y otra al final en la que consolidan resultados.

Tareas secuenciales.

§  Leer una novela (obligatoriamente una página detrás de otra, si no, el resultado varía).
§  Consultar el saldo, dar dinero, actualizar el saldo (en un cajero automático)
§  Ver a alguien, reconocerle, preguntarle por su familia.

Tareas paralelas

§  Consultar entra varias personas palabras en la enciclopedia (personas en paralelo)
§  Contar los votos en un proceso electoral (mesas en paralelo).
§  Buscar los “López” en una base de datos. (se divide la base de datos en trozos y se busca en paralelo).
§  Reconocer a una persona. Se analizan los rasgos faciales, el movimiento, los gestos, la voz, la entonación en paralelo.

Para mi la mayor diferencia es el tiempo, la maquina secuencial es mas lenta, por lo tanto en casos es insuficiente

Modelos de memoria compartida y distribuida 
Memoria Distribuida

Memoria Compartida

¿Por qué es util hacer simulación cuando se implementan sistemas de tiempo real?

Considero que la simulación permite ver la realidad el problema, en este caso de un sistema en tiempo real, así el analista imitara los peores casos que pasen en la realidad y así atender los problemas que pudieran aparecer, esto es vital en un so. en tiempo real pues en estos el tiempo puede ocasionar perdidas humanas o monetarias muy altas.


Resumen conferencia de openMP


En la conferencia  del lunes pasado, empezó con una introducción a que es el paralelismo, a sus inicios, vimos puntos  muy importantes, tales como  porque nacieron los procesadores de dos o mas núcleos, esto es porque  como no se puede alcanzar mayor velocidad que la de la luz, por tanto una forma de superar la velocidad de los procesadores fue poniendo mas núcleos, los cuales trabajaran simultáneamente para la resolución de problemas, después de esto dio el ejemplo de como hacer si no tener una maquina multiprocesador (caso real practicado en la tesis del Dr. Ramos) conecto las computadoras del laboratorios en LAN, utilizando una como la directora de todas, y asi usaba las computadoras para trabajar en paralelo.  Dio también el dato que la UNAM tiene la computadora con mas procesadores aquí en México;  Mostró el OpenMP, el cual es  un modelo de programación en paralelo con memoria compartida y con extensiones a lenguajes de programación existentes como Fortran, C y CPP
Programa sencillo
La mayoría de las construcciones son directivas de compilación o pragmas
La parte central de OpenMP es la paralelización de lazos

Programa Secuencial
void main() {
   double a[1000],b[1000],c[1000];
   for (int i = 0; i< 1000; i++){
         a[i] = b[iI] + c[i];
}  }


Programa Paralelo
void main() {
   double a[1000],b[1000],c[1000];
   #pragma omp parallel for
for (int i = 0; i< 1000; i++){
         a[i] = b[iI] + c[i];
}}

domingo, 27 de marzo de 2011

1.- Introducción

Dentro de las distribuciones de sistemas operativos de tiempo real, nos fijaremos en aquellas que usan como base el kernel estándar de Linux, en sus distintas versiones, y más en particular en aquellas que se distribuyen bajo la licencia GNU/GPL ya que de estas últimas obtendremos mucha mayor información y será una de estas distribuciones libres las que escojamos para nuestro trabajo.

Primero, se realizará una descripción de las del S.O. y convertir un sistema operativo de propósito general en uno de tiempo real.

Seguido de esto, se hará una introducción a distintas distribuciones de sistemas operativos de tiempo real.

Después, se elegirá una de las distribuciones y se procederá a instalar. Y finalmente se realizará un driver.

2.- Arquitectura de un S.O. de Tiempo Real


2.1.- Arquitectura de un S.O. de Propósito General


La memoria física de una computara esta dividida entre el espacio reservado para los usuarios (“user-space”) y el espacio reservado para el kernel (“kernel-space”). El kernel multitarea maneja múltiples aplicaciones de usuarios haciendo creer a cada uno que dispone de todo el espacio de memoria. La comunicación entre los programas en el espacio de usuario y el espacio del kernel se realiza a través de las llamadas al sistema. Todos los accesos a los recursos hardware son controlados por el kernel.

Las funcionalidades principales de un S.O. de propósito general son:

ü  Gestión de procesos. Planificación de procesos.
ü  Gestión de memoria.
ü  Interactuar con el Hardware.
ü  Servidor de Ficheros.
ü  Servidor de Comunicaciones.

En cambio la funcionalidad principal y requerida para un sistema operativo de tiempo real es proveer de un nivel de servicio adecuado a las aplicaciones que requieran una respuesta en un intervalo de tiempo determinado. Una de las medidas de rendimiento de un Sistema Operativo de Tiempo Real es la latencia, ó tiempo desde que ocurre el evento y éste es tratado. La otra medida es el jitter, ó variaciones en el periodo normal de ocurrencia de eventos periódicos.

2.2.- Clases de tiempo real


Un programa ó un sistema operativo es considerado como de tiempo real, si a pesar de las restricciones de tiempo le permiten trabajar y funcionar correctamente. Se distinguen las siguientes clases:

Ø  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.

2.3.- Características de rendimiento


El criterio fundamental de evaluación del rendimiento de un sistema operativo de tiempo real es la latencia y el periodo del jitter ante un evento. Un evento es cualquier tipo de interrupción, tanto interna, como externa.

Latencia en un evento

Puede ser tanto una interrupción hardware como una interrupción software. La latencia ante una interrupción hardware es el tiempo desde que se produce la interrupción hasta que se ejecuta la primera instrucción de la rutina de tratamiento. Puede haber retrasos debido al acceso al bus.

La latencia ante una interrupción software es el tiempo desde que la señal es generada hasta que la primera instrucción de la tarea es ejecutada. Aquí el valor depende únicamente del acceso a los registros del procesador.


Periodo del Jitter

El periodo del jitter se refiere a las variaciones en el tiempo que experimenta una tarea cuando se ejecuta de manera repetitiva.

2.4.- Arquitectura de un S.O. de Tiempo Real


El procesamiento de interrupciones en el kernel estándar esta divido en 2 tareas. Una se encarga de leer los datos del dispositivo físico y escribirlos en un buffer, es lo que se conoce como manejador de interrupciones” , y la otra es la 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 han desarrollado distintas alternativas que modifican el kernel de linux en este aspecto fundamentalmente.
Actualmente hay dos corrientes de diseño:

Atención prioritaria en el kernel estándar (Preemptable kernel)
Esta metodología modifica el kernel en profundidad de forma que los procesos de kernel ejecuten con máxima prioridad





Modificaciones sobre el kernel estándar (Patch)
Hay 4 estrategias de modificación del kernel de Linux para proveer capacidades de tiempo real. Tres de ellas implican añadir un segundo kernel (kernel dual) para manejar las tareas de tiempo real y el cuarto implica modificar directamente el código del kernel para añadir características de tiempo real.




2.5.- Rendimiento de un sistema


Si comparamos por ejemplo el kernel estándar con RTLinux podremos observar claramente como existe gran diferencia tanto en la latencia en las interrupciones como en el jitter, siendo mucho menos para el caso de RTLinux y siempre en el orden de 1 a 10 microsegundos para un Pentium a 100Mhz.

3.- Distribuciones


3.1.- Introducción


Hay alrededor de 30 distribuciones, la mayoría para el sistema operativo Linux y en menor medida para Windows, las que se realizará una breve descripción de su arquitectura, su licencia y el entorno para la cual esta diseñada. Algunas de éstas están en continuo desarrollo y otras por el contrario están un poco estancadas ó definitivamente olvidadas.

3.2.- Clasificación




En el mercado hay tanto distribuciones comerciales y de código abierto, como distribuciones libres. También se observa, que actualmente, las distribuciones libres ADEOS y RTAI son las que están más actualizadas porque están planeando sacar versiones validas para la versión 2.6 del kernel estándar de Linux. El resto ó están muy dejadas ó tardan bastante en sacar nuevas versiones. También se puede observar y se notará más adelante, que las distribuciones GNU/GPL proporcionan más información.

3.3.- Descripción


3.3.1.- ADEOS – Adaptative Domain Environment Operating Systems


Proporciona un entorno flexible para compartir los recursos hardware para múltiples sistemas operativos ó múltiples instancias de un mismo sistema operativo. ADEOS activa múltiples kernels, llamados dominios, que existen simultáneamente sobre el mismo hardware. Ninguno conoce la existencia del resto, pero todos ellos si conocen de la existencia de ADEOS. Un dominio puede ser un Sistema Operativo completo, pero no necesariamente.

Actualmente ADEOS permite compartir las interrupciones hardware. Y cuenta con una licencia: GNU/GPL

La arquitectura de ADEOS es la de kernel dual y más específicamente la llamada Nano-kernel.

Un dominio es un componente software del kernel base al cuál Adeos puede notificar:

ü   Las interrupciones hardware.
ü   Llamadas al sistema de las aplicaciones Linux.
ü   Eventos del sistema lanzados por el kernel de Linux.
ü   Otros eventos que personalicemos nosotros.

ADEOS controla todas las interrupciones, los traps de la CPU y las excepciones del nivel hardware, ya que reprograma el software del manejador.


Ejemplo: Dados los dominios A,B,C donde la prioridad es A>B>C, se puede decir que:
Si A ejecuta, entonces B y C están interrumpidos ó suspendidos.
Si B ejecuta, entonces A esta suspendido y C esta interrumpido ó suspendido.
Si C ejecuta, entonces A y B deben estar suspendidos.

Enlaces:
ADEOS (web oficial distribución) --> http://www.opersys.com/adeos/
ADEOS (web oficial desarrollo) --> https://gna.org/projects/adeos/


3.3.2.- RTAI – Real Time Application Interface


Es una implementación de Linux para tiempo real basada en RTLinux. Añade un pequeño kernel de tiempo real bajo el kernel estándar de linux y trata al kernel de linux como una tarea con la menor prioridad. Cuenta con Licencia: GNU/GPL.

HAL – Hardware Abstraction Layer

Los desarrolladores de RTAI introducen el concepto de Real Time Hardware Abstraction Layer (RTHAL) que es usado para interceptar las interrupciones hardware y procesarlas después. RTHAL es una estructura instalada en el kernel de Linux que reúne los punteros a los datos internos del hardware relacionados en el kernel y las funciones  necesarias por RTAI para operar. El objetivo de RTHAL es minimizar el número de cambios necesarios sobre el código del kernel.

La unidades de planificación de RTAI son las tareas. Siempre hay al menos una tarea Actualmente hay tres tipos de planificadores dependiendo del tipo de máquina:

§  Uniprocesador (UP)
§  Multiprocesador simétrico (SMP)
§  Multi-Uniprocesador (MUP)

Enlaces:
RTAI (web oficial) --> http://www.aero.polimi.it/~rtai/index.html

3.3.3.- RTLinux


RTLinux es un sistema operativo de tiempo real que ejecuta Linux como un thread de menos prioridad que las tareas de tiempo real. Con este diseño, las tareas de tiempo real y los manejadores de interrupciones nunca se ven etrasados por operaciones que no son de tiempo real. El peor caso de tiempo es entre que se detecta la interrupción hardware y el procesador ejecuta la primera instrucción del manejador de la interrupción. Este tiempo es del orden de los 10 microsegundos en la plataforma x86. Licencia: Actualmente hay 2 versiones de RTLinux:

§   RTLinux/Open: Disponible bajo la licencia GPL, pero que ya no se trabaja en ella desde 2001.
§   RTLinux/Pro: Distribución comercial.

RTLinux es un pequeño y rápido S.O. que sigue el estándar POSIX 1003.13: sistema operativo de tiempo real mínimo. Esta es la arquitectura de micro-kernel. Sus características son:

·         Soporte de múltiples arquitecturas y válida para arquitecturas multiprocesador.
·         Gestión de procesos: Planificación, soporte de threads periódicos, amplio rango de prioridades, creación y borrado de threads, etc.
·         Gestión de memoria: No protección de memoria en el kernel y no asignación de memoria de forma dinámica.
·         Comunicación entre procesos: Semáforos, Mutex, control de inversión de prioridades, memoria compartida y FIFO's.
·         Tiempo y relojes: Resolución de nanosegundos. No relojes de usuario. Facilidades para añadir nuevos relojes
·         hardware.
·         Programación de drivers: Se proporcionan funciones de acceso a dispositivos.
·         No proporciona herramientas de calidad de servicio.

 Enlaces
http://www.fsmlabs.com
http://www.rtlinux.com
http://www.rtlinux.org

3.3.4.- ART Linux


ART Linux es una extensión de tiempo real sobre Linux basado en RTLinux y desarrollado por Youichi Ishiwata.
ART Linux es un parche sobre el kernel estándar de Linux pero que actualmente no se distribuye bajo la licencia GPL ya que contiene código desarrollado por Ishiwata en exclusiva. Debido a que Ishiwata trabaja para el gobierno y existe una ley de propiedad intelectual del gobierno.

La arquitectura es similar a la de RTLinux por tanto tienen arquitectura de kernel dual. Sus ventajas de ART Linux:

v  ART Linux permite reusar los drivers de dispositivos existentes en el Linux estándar así como las aplicaciones.
v  Compatibilidad a nivel de fuente de los drivers con el Linux estándar. Es decir si recompilas el driver, puede seguir siendo usado por las tareas de tiempo real.
v  No inversión de prioridades. Se resuelven automáticamente los problemas de inversión de prioridades.
v  Compatibilidad a nivel binario de los programas de usuario con el Linux estándar. No es necesario recompilar los programas con el objetivo de que sean usados por las tareas de tiempo real.
v  Evita indeterminismo en la ejecución de tiempo real debido a las interrupciones ya que trata las interrupciones con una estrategia periódica.
v  Las tareas de tiempo real ejecutan en modo usuario pero privilegiado, de forma que se beneficia de la protección de memoria y por tanto las tareas de tiempo real son seguras y no pueden provocar fallos en el kernel.

Enlaces


3.3.5.- KURT – Kansas University Real Time


KURT junto con UTIME es una extensión al kernel estándar de Linux para proporcionar, bajo demanda, resolución de microsegundos en los relojes y planificación de tiempo real. Su licencia es desconocida.

El kernel estándar de linux ofrece 10ms de resolución en la sincronización.  No suiciente para los S.O. tiempo real.
Enlaces
KURT (web oficial) --> http://www.ittc.ku.edu/kurt/

3.3.6.- Linux/RK – Linux/Resource Kernel


Linux/RK significa Linux / Resource Kernel y consiste en incorporar extensiones de tiempo real a Linux mediante una abstracción llamada recurso kernel. Su licencia es desconocida. Un recurso kernel es un kernel de tiempo real que proporciona el oportuno y garantizado acceso a los recursos del sistema para las aplicaciones que lo requieran.

Actualmente las actividades que soporta Linux/RK son:
·         Reserva de ancho de banda en acceso a los discos.
·         Reserva de ancho de banda de la red.
·         Co-planificación de varios recursos.
·         Integración con Java para tiempo real.
·         Lista de control de recursos.

Enlaces
Página oficial: http://www-2.cs.cmu.edu/afs/cs/project/art-6/www/
Página del Coordinador: http://www-2.cs.cmu.edu/~rajkumar/linux-rk.html

3.3.7.- Qlinux


Qlinux es un kernel de Linux que proporciona calidad de servicio garantizada para requerimientos de tiempo real flexible. Por tanto no es un sistema operativo específico de tiempo real, sino que esta orientado hacia aplicaciones multimedia que requieren una determinada calidad de servicio. Su licencia es GNU/GPL. Usa una arquitectura precursora a la de “kernel preemptable”, pero en este caso no solo aplicada al acceso de la CPU sino que también aplicada al acceso a la red y al disco.

Enlaces
Página oficial: http://lass.cs.umass.edu/software/qlinux/

3.3.8.- RED-Linux


RED-Linux es una versión de Linux para tiempo real y embebida. Proporciona capacidades adicionales al kernel
estándar de Linux para proporcionar comportamiento de tiempo real. Con licencia desconosida.

RED-Linux soporta un pequeño nucleo. Su respuesta a las tareas es rápida, y tiene una modularidad y planificación del CPU reemplazable en tiempo de ejecución.

Enlaces
RED-Linux (Web oficial) [No funciona]: http://linux.ece.uci.edu/RED-Linux/index.html




3.3.9.- BlueCat RT


BlueCat RT es una versión de Linux para tiempo real y embebida. Es una solución híbrida entre el sistema operativo embebido BlueCat (LinuxWorks) y el sistema RTLinux/Pro (FSMLabs). Su licencia es Comercial. Open source
Algunas de sus ventajas son:

Asegura el manejo de interrupciones con tiempo crítico y otras operaciones hardware de bajo nivel para implementar el kernel de Linux como un thread pequeño. Este mini sistema operativo de tiempo real  aptura las interrupciones y otras funcionalidades de bajo nivel.
Los dos sistemas operativos forman una solución híbrida que ejecuta en un solo procesador.
Incluye un API de tiempo real compatible con POSIX y con IEEE 1003.13.
Basado en estándares abiertos y en código abierto, lo que facilita la migración de aplicaciones hacia BlueCat RT.

Es una distribución estable porque se basa en un sistema operativo embebido con cierto grado de comercialidad y
por tanto se diseña para que sea flexible, escalable y con productividad inmediata. Mientras que su soporte es de un completo rango de configuraciones.

Enlaces
BlueCat RT: http://www.lynuxworks.com/products/bluecat-rt/bluecat-rt.php3
http://www.bluecat.com/
http://www.lynuxworks.com/

3.3.10.- RedHawk


Es una versión de tiempo real del código abierto de Linux desarrollada por la empresa Concurrent Computer
Corporation's RedHawk bajo los estándares industriales y POSIX. RedHawk es compatible con la distribución Red Hat Linux proporcionando alto rendimiento de entrada/salida, tiempo de respuesta garantizado a evento externos y
comunicación entre procesos optimizada. RedHawk es ideal para ambientes con complejas aplicaciones de tiempo real como pueden ser la simulación, la adquisición de datos ó los sistemas de control industrial. Su licecia es comercial,

Características
·         Ambiente completo de desarrollo. Ofrece un conjunto completo de herramientas de desarrollo, desde
·         compiladores a debuggers y herramientas que muestran la traza de ejecución.
·         SMP escalable y protección de procesador.
·         Multithread y kernel prioritario.
·         Planificador basado en la frecuencia.
·         Reloj de tiempo real y módulo de interrupciones.
·         Herramientas de desarrollo de aplicaciones de tiempo real.
·         Depurador de código fuente.
·         Analizador de eventos mediante traza de código.
·         Simulador de un planificador.
·         Monitor de datos de prueba.

Enlaces
RedHawk (web oficial): http://www.ccur.com/isd_solutions_redhawklinux.asp?o9=1
Artículo: http://www.linuxdevices.com/products/PD3887955999.html

3.3.11.- REDICE-Linux


REDICE-Linux es un kernel de tiempo real que combina la planificación de tiempo real estricto y un kernel prioritario con la baja latencia de un completo kernel de tiempo real estricto como es el de RTAI. Es decir, combina ambas tecnologías de diseño de sistemas operativos de tiempo real. Con una licencia: Libre de Royalties. Open Source. Soporte es de pago.

Esta diseñada con una arquitectura dual, por una parte utiliza la arquitectura de microkernel, es decir tiene un
segundo kernel, que es el de RTAI, y por la otra, modifica el kernel estándar de Linux para que se convierta en
“kernel preemptable”. Sus ventajas son:

Ahorro de dinero.
Fiabilidad.
Pronosticable.
Sensibilidad.

Enlaces

REDSonic (Web oficial): http://www.redsonic.com/products/redice.htm

3.3.12.- TimeSys Linux


TimeSys Linux es más que una distribución de un kernel de tiempo real, es un conjunto completo de herramientas para el desarrollo de aplicaciones de tiempo real de forma cómoda y rápida. Es una distribución para sistemas embebidos. Con una licencia Comercial, menos algunos elementos que se distribuyen bajo la licencia GNU/GPL.

TimeSys Linux se basa en la arquitectura de “kernel preemptable” para proporcionar rendimiento predecible y
latencia limitada.En el peor de los casos, tiempo de respuesta de 100 microsegundos. Soporte en el mismo sistema, de tiempo real estricto y tiempo real flexible. También  tiene soporte para aplicaciones Linux estándar y con interfaces POSIX, así como relojes con resolución de microsegundos (dependiendo del hardware). Sus ventajas:

Flexibilidad, fiabilidad y fuerza del código abierto de Linux.
Mejor control sobre el rendimiento de las.
Mejora las aplicaciones embebidas actuales.
Soporte empotrado para el desarrollo de aplicaciones tanto en ordenadores Linux como Windows.
Escalabilidad para futuros requerimientos de rendimiento.

Enlaces
TimeSys (Página principal): http://www.timesys.com/

3.3.13.- Linux-SRT


Linux-SRT es una extensión al kernel de Linux que inició el camino hacia la ejecución de aplicaciones de tiempo real. El kernel estándar de Linux no era un sistema operativo multimedia, no garantizaba que el audio, el vídeo u otro proceso crítico ejecutará con una transferencia fijada, por eso nació este proyecto con el objetivo de crear un sistema operativo multimedia que proporcionara una calidad de servicio determinada, pero no estricta, de ahí el nombre, Linux-SRT (soft real time). No es adecuado para sistemas críticos. Este proyecto se ha abandonado actualmente debido al laborioso proceso de modificación del kernel. Con licencia  GNU/GPL

El paquete correspondiente al planificador permite especificar términos de calidad de servicio, como por ejemplo el uso de un determinado porcentaje máximo a cada tarea de tiempo real. Esto es útil por ejemplo para grabar cd´s ó escuchar mp3's sin interrupción. La asignación de CPU a una tarea no es el único factor que afecta a la velocidad de las aplicaciones, también lo es el servidor X, por eso se modifica para priorizar la renderización de gráficos en función de los parámetros de planificación de cada cliente X. y para el interfaz de usuario le permite la configuración de parámetros de planificación.

Enlaces

4.- Elección de distribución/es


4.1.- Manuales de Instalación


Ø   http://gayuba1.datsi.fi.upm.es/~dlopez/cache/doc/choosing_an_rtos.pdf
Ø   http://gayuba1.datsi.fi.upm.es/~dlopez/cache/doc/embedded.linux.distro.pdf
Ø   http://gayuba1.datsi.fi.upm.es/~dlopez/cache/doc/selection_of_rt_linux.doc

5.- Driver sobre la distribución elegida


Consultando en las siguientes páginas y sus foros:

http://www.aero.polimi.it/~rtai/index.html (Programación en RTAI)
http://www.beyondlogic.org/ (Descripción del puerto paralelo)

5.1.- Descripción del hardware

5.1.1.- Introducción


El objetivo del módulo de entrada/salida es poder conectar un PC con diferentes tipos de dispositivos, los cuáles aceptan dos valores (activado y reposo).

Debido a que el número de líneas que el PC posee tanto de salida, como sobre todo de entrada, es limitado, se limita el número de elementos que podríamos conectar de forma directa al puerto paralelo (por ejemplo tendríamos 8 líneas de salida para el bus de datos). Para aumentar el número de elementos que se pueden controlar se recurre a la  multiplexación, tanto de las entradas como de las salidas. Esto conlleva a reducir la frecuencia máxima con la que se podría cerrar un lazo de control. El número de entradas/salidas elegido se ha fijado en 32 entradas y 32 salidas, lo que permite una frecuencia máxima de 400 Hz.

6.- diferencias entre los S.O normales y S.O en tiempo real

6.1 SISTEMAS OPERATIVOS CONVENCIONALES

·         Conveniencia. Un Sistema Operativo  hace  más conveniente el uso  de una computadora.
·         Eficiencia. Un Sistema Operativo permite que los recursos de la computadora se usen de la manera más eficiente posible.
·         Habilidad para evolucionar. Un Sistema Operativo deberá construirse de manera que permita el desarrollo,   o introducción efectiva de nuevas funciones del sistema sin interferir con el servicio.
·         Encargado de administrar el hardware. El Sistema Operativo se encarga de   de una mejor manera los recursos de la computadora en cuanto a hardware se refiere, esto es, asignar a cada proceso una parte del procesador para poder compartir los recursos.
·         Relacionar dispositivos (gestionar a través del kernel). El Sistema Operativo se debe encargar de comunicar a los dispositivos periféricos, cuando el usuario así lo requiera.
·         Organizar datos para acceso rápido y seguro.
·         Manejar las comunicaciones en red. El Sistema Operativo permite al usuario manejar con alta facilidad todo lo referente a la instalación y uso de las redes de computadoras.
·         Procesamiento por bytes de flujo a través del bus de datos.
·         Facilitar la  s   y salidas. Un Sistema Operativo debe hacerle fácil al usuario el acceso  y   de los dispositivos de Entrada/Salida de la computadora.
·         Técnicas  de   de errores.
·         Evita que otros usuarios interfieran. El Sistema Operativo evita que los usuarios se bloqueen entre ellos, informándoles si esa aplicación esta siendo ocupada por otro usuario.
·         Generación de estadísticas.
·         Permite que se puedan compartir el hardware y los datos entre los usuarios.

6.2.- Sistemas Operativos en tiempo real.

·       Determinista si realiza las operaciones en instantes fijos y predeterminados o en intervalos de tiempos predeterminados.
·       Sensibilidad. se refiere a cuanto tiempo consume un sistema operativo en dar servicio a la interrupción después de reconocerla.
1- La cantidad de tiempo necesario para iniciar la gestión de la interrupción y comenzar la ejecución de su rutina de tratamiento (ISR, interrupt service routine).
2- La cantidad de tiempo necesario para ejecutar la ISR. Generalmente, depende de la plataforma del hardware.
3- El efecto del tratamiento de interrupciones. El servicio se retrasara si una ISR puede ser interrumpida por la llegada de otra interrupción.
·         Fiabilidad es normalmente mucho mas importante en sistemas en tiempo real que en los que no lo son. Un fallo transitorio en un sistema que no sea en tiempo real puede resolverse simplemente volviendo a reiniciar el sistema. Un fallo de un procesador en un multiprocesador que no sea en tiempo real produce una reducción del nivel de servicio hasta que se repara o sustituye el procesador averiado. Pero un sistema en tiempo real responde y controla sucesos en tiempo real. Las perdidas o degradaciones del rendimiento pueden tener consecuencias catastróficas, que pueden ir desde perdida financieras hasta daños en equipo e incluso perdida de vidas humanas.

·       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 por Un aspecto importante a la tolerancia a los fallos es la estabilidad. Un sistema en tiempo real si, en los casos en los que es imposible cumplir todos los plazos de ejecución de las tareas, el sistema cumple los plazos de las tareas mas criticas y de mayor prioridad, incluso si no se cumple los de alguna tarea menos critica.
Para cumplir los requisitos anteriores los sistemas operativos actuales en tiempo real incluyen normalmente las siguientes características:

ü      Cambios rápidos de procesos o hilos.
ü      Pequeño tamaño (con una mínima funcionalidad asociada).
ü      Capacidad de responder rápidamente a interrupciones externas.
ü      Multitarea con herramientas de comunicación entre procesos, como semáforos, señales y sucesos.
ü      Uso de archivos secuénciales especiales que puedan acumular datos a alta velocidad.
ü      Planificación preferente basadas en prioridades.
ü      Reducción de intervalos en los que están inhabilitadas las interrupciones.
ü      Primitivas para demorar tareas durante un tiempo fijo y para detenerlas y reanudarlas.
ü      Alarmas  especiales y temporizadores.

6.3.- Diferencia entre los dos tipos de Sistemas Operativos

La gran diferencia es que en los sistemas de tiempo real se maneja el tiempo, es decir, esos sistemas trabajan al instante y un error sale caro, puede ser desde perdidas económicas, o perdidas humanas, mientras que los sistemas cotidianos si se llega a trabar solo se reinicia el sistema y a empezar de nuevo, también el sistema cotidiano tiene mucho menos trato de errores o/u problemas que presenten al momento.

7.- Lenguajes de Programación en tiempo real.