miércoles, 30 de marzo de 2011

Ensayo (tarea 5)

Maquinas secuenciales y maquinas paralelas

Una máquina secuencial es aquella que realiza una serie de operaciones una tras otra en el tiempo, es aquella que su salida depende, además de sus entradas, de los estados anteriores del sistema (el sistema tiene memoria).
Las funciones que desempaña una maquina de estado finito es un factor importante debido a que tienen un campo muy amplio de aplicación, cada uno de los elementos que se requieren para que estas maquinas desempeñen funciones necesarias e importantes.

la mayoria de los problemas complejos se pueden resolver eficientemente en una máquina paralela. Esto se debe a que las máquinas paralelas pueden simularse con máquinas secuenciales.
Las computadoras multiprocesadores en paralelo efectúan las mismas operaciones a un conjunto de datos en forma paralela. Los procesadores trabajan síncronamente.El cómputo paralelo ofrece una serie de ventajas que lo hacen particularmente atractivo Una de estas ventajas es económica. El uso de componentes comúnmente disponibles, en grandes cantidades, permite ofrecer mayor rendimiento, a un precio menor que el de máquinas con procesadores especialmente diseñados (como por ejemplo las máquinas de procesadores vectoriales y de propósito específico). 

Modelos de memoria comparitida y memoria distribuida

fig.1 memoria compartida


fig.2 memoria distribuida

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

la simulación es de mucha utilidad cuando se implementan sistemas de tiempo real porque es una manera de saber como se comporta el mismo, y conocer bajo que parámetros lo va a hacer. También, con la simulación se puede ahorrar dinero y tiempo al evitar la completa puesta en marcha no hasta saber si el sistema esta respondiendo como queremos.


http://148.202.148.5/cursos/cc209/teoriacomp/MODULO_2/Teoria_2_1.htm
http://homepage.cem.itesm.mx/rogomez/SlidesDist/dsm.pdf
www.cimat.mx/ciencia_para_jovenes/tcj/2002/optica/notas.../sesion2.ppt
http://www.josecc.net/archivos/tesis/tesis_html1

lunes, 28 de marzo de 2011

Resumen conferencia "OpenMP"


En la conferencia “OpenMP” se trato el tema sobre el sistema de multi procesamiento OpenMP, se dijo que es una interfaz de programación de aplicaciones (API) utilizada en la programación multiproceso de memoria compartida en múltiples plataformas, se mencionó también que esta API permite añadir concurrencia a los programas escritos en C, C++ y FORTRAN sobre la base modelo de ejecución “fork/join”. Se trató también el tema sobre la programación paralela la cual es un tipo de estructuración de órdenes para sistemas de tiempo real en donde se requiere una respuesta rápida y exacta; se mencionó también que para poder realizar este tipo de programación es necesario un hardware especial el cual tiene la característica que está formado por varios núcleos de procesamiento que deja como gran ventaja que el tiempo de ejecución en este sistema es considerable si se compara con una respuesta de un procesamiento normal.

Lengujes de Programacion en Tiempo Real (RTPL) (Tarea 4)



Un lenguaje de programación de sistemas de tiempo real debe facilitar la realización de sistemas
– concurrentes,
– fiables,
– puntuales.

Las características más importantes para la realización de programas en pequeña escala son
– léxico
– tipos de datos y objetos
– instrucciones
– subprogramas
– estructura de programas

ADA
Su nombre rinde honor a Lady Ada de Lovelanle, la cual fue colaboradora de Charles Babbage. El ADA, cuyo primer estándar se definió en 1983, se diseño y desarrolló por encargo del Departamento de defensa de los Estados Unidos, orientado a la programación y desarrollo de sistemas empotrados. ADA integra la noción de tipo abstracto y un mecanismo que permite expresar la cooperación y comunicación entre procesos. Sus principales características son:

-Soporta tecnologías de software avanzadas.
-Incluye concurrencia, tiempo real, acceso a recursos de bajo nivel y un potente tratamiento de excepciones.
-Transportabilidad, legibilidad, eficiencia, seguridad.

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.

Es un lenguaje imperativo, descendiente de Pascal
– estructura en bloques
– fuertemente tipado
-Es un lenguaje pensado para realizar sistemas empotrados de gran dimensión

Dos versiones normalizadas
– Ada 83 (ISO 8652:1987)
– Ada 95 (ISO 8652:1995)

OCCAM
Occam es un lenguaje de programación imperativo y estructurado (al igual que Pascal). 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.El lenguaje Occam es un lenguaje asociado a la plataforma Transputer. No es adecuado para el desarrollo de grandes aplicaciones.

C
C es un lenguaje de programación creado en 1972 por Dennis M. Ritchie en los Laboratorios Bell como evolución del anterior lenguaje B, a su vez basado en BCPL.

Al igual que B, es un lenguaje orientado a la implementación de Sistemas Operativos, concretamente Unix. C es apreciado por la eficiencia del código que produce y es el lenguaje de programación más popular para crear software de sistemas, aunque también se utiliza para crear aplicaciones.

Se trata de un lenguaje débilmente tipificado de medio nivel pero con muchas características de bajo nivel. Dispone de las estructuras típicas de los lenguajes de alto nivel pero, a su vez, dispone de construcciones del lenguaje que permiten un control a muy bajo nivel. Los compiladores suelen ofrecer extensiones al lenguaje que posibilitan mezclar código en ensamblador con código C o acceder directamente a memoria o dispositivos periféricos.

JAVA
Java es un lenguaje de programación orientado a objetos, desarrollado por Sun Microsystems a principios de los años 90. El lenguaje en sí mismo toma mucha de su sintaxis de C y C++, pero tiene un modelo de objetos más simple y elimina herramientas de bajo nivel, que suelen inducir a muchos errores, como la manipulación directa de punteros o memoria.

Las aplicaciones Java están típicamente compiladas en un bytecode, aunque la compilación en código máquina nativo también es posible. En el tiempo de ejecución, el bytecode es normalmente interpretado o compilado a código nativo para la ejecución, aunque la ejecución directa por hardware del bytecode por un procesador Java también es posible.

MODULA-2
El lenguaje Modula-2 es un descendiente del Modula y del Pascal. Las funciones de concurrencia y restricciones temporales se realizan en un módulo especifico denominado núcleo. Es un lenguaje que se muestra adecuado para el desarrollo de aplicaciones de tamaño pequeño a medio.

FORTRAN
cuenta con la ventaja de poseer un nivel de abstracción más alto, pero dependen del sistema operativo para las funciones de concurrencia y temporización, además suele ser necesario realizar algunas funciones en ensamblador. A este lenguajes se le añade una serie de funciones y mecanismos:

-Funciones para ejecución en tiempo real ( run time system, tareas…)
-Bibliotecas de funciones software que dan al programador un cierto nivel de comodidad a la hora de trabajar   con la interface del proceso o con el control del tiempo de ejecución.
-Compiladores que generen un código eficaz



1. Burns,A.,Wellings, A.(2002) Sistemas de Tiempo Real y Lenguajes de Programación (3ª Edición). España: Addison-Wesley Iberoamericana.

sábado, 26 de marzo de 2011

Sistemas Operativos de Tiempo Real (RTOS) (Tarea 4)


Arquitecturade un SistemaOperativo de PropósitoGeneral

La memoria física de un computar esta dividida entre el espacio reservado para los usuarios (“user-space”) y el espacio reservado para el kernel (“kernel-space”). El kernel multitarea es capaz de manejar múltiples aplicaciones de usuarios que ejecutan en el espacio de usuario haciendo creer a cada uno que dispone de todo el espacio de memoria y de todos los recursos hardware. 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.

Diferencias entre los sistemas operativos convencionales y los de tiempo real


      Los sistemas convencionales proveen un nivel de servicio adecuado a las aplicaciones que requieran una respuesta en un intervalo de tiempo determinado.

·         
En los sistemas convencionales 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.
·         
En  En un sistema convencional todos los accesos a los recursos hardware son controlados por el kernel de modo que los programas de usuario no conozcan los detalles físicos de los dispositivos.


·         Todos los sistemas operativos tienden a tener una baja latencia y un bajo jitter, pero los sistemas operativos de tiempo real requieren que esos valores estén determinados y que no dependan de la carga del sistema.
·         
La característica principal de los sistemas operativos de tiempo real es la respuesta ante eventos internos o externos, tales como interrupciones hardware externas, interrupciones software internas o interrupciones de reloj internas, es decir los requerimientos temporales.


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


·         La parte fundamental para convertir un sistema operativo de propósito general en un sistema operativo de tiempo real es el manejo de las interrupciones.



Rendimiento de un sistema


                                           Aplicación                         Latencia/Jitter
estándar OS                         Nom Real-Time                  100μs to 100ms
estándar Linux (>2.5.X)        Soft Real-Time                   1ms
IEEE 1003.1d                        Hard Real-Time                  10 to 100μs
Micro-Kernel                         Hard Real-Time                  1 to 10μs
RTOS Kernel                         Hard Real-Time                  1 to 10μs

Distribuciones

Clasificación



Descripción

ADEOS – Adaptative Domain Environment Operating Systems

El objetivo de ADEOS es proporcionar 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 de éstos dominios necesariamente 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.

Real Time Application Interface

RTAI 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. RTAI además proporciona una amplia selección de mecanismos de comunicación entre procesos y otros servicios de tiempo real.
Adicionalmente, RTAI proporciona un módulo llamado LXRT para facilitar el desarrollo de aplicaciones de tiempo  real en el espacio de usuario.

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 retrasados por operaciones que no son de tiempo real.
La primera versión de RTLinux estaba diseñada para ejecutarse en la plataforma x86 y proporcionaba una  pequeña API y un pequeño entorno de programación. La versión 2, que fue totalmente reescrita, fue diseñada para el soporte de multiprocesamiento simétrico (SMP) y para ser ejecutada en una amplia variedad de arquitecturas.
RTLinux proporciona la capacidad de ejecutar tareas de tiempo real y manejadores de interrupciones en la misma máquina que el Linux estándar. Estas tareas y los manejadores ejecutan cuando se necesitan en detrimento de lo que estuviera ejecutando Linux. 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.

ART Linux

ART Linux es una extensión de tiempo real sobre Linux basado en RTLinux y desarrollado por Youichi Ishiwata.

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.

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.

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.

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.

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

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.

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.
REDICE-Linux es un sistema operativo embebido ideal para aplicaciones de internet, dispositivos de redes, dispositivos médicos, industriales, adquisición de datos, control de máquinas y otros donde el tiempo es crítico, además de aplicaciones que requieran una determinada y garantizada calidad de servicio.

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.

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.

Mapa Mental de los RTOS






1. Zamarron L. D. (2004) Analisis de Sistemas Operativos de tiempo Real Libres. GNU free document license.

miércoles, 9 de marzo de 2011

Comentario sobre el video "Robot Pendulo Invertido"


Este vídeo nos muestra un robot con ruedas que controla el equilibrio de una vara metálica. Es un sistema de tiempo real ya que el robot responde al instante cuando siente que la vara va hacia un lado, de manera que busca su equilibrio, se ve que entre mas se desequilibre la vara mas rápido se mueve el robot.

lunes, 7 de marzo de 2011

definición: latencia, tarea, proceso, concurrencia

Latencia: En informática, latencia es el lapso necesario para que un paquete de información viaje desde la fuente hasta su destino. La latencia y el ancho de banda, juntos, definen la capacidad y la velocidad de una red.

Tarea:  En computación, una tarea es una instancia de un programa. Actualmente los sistemas multitarea soportan la ejecución de múltiples procesos, dando la apariencia de que pueden correr simultáneamente (de forma concurrente). De hecho, sólo un proceso puede estar siendo ejecutado al mismo tiempo por el CPU (excepto los CPU con múltiples procesadores). Los procesos son creados, destruidos y comunicados entre sí por el sistema operativo.

Proceso: En informática, un proceso se refiere a las instrucciones que ejecutará el microprocesador mientras lee un programa determinado. Esto también implica a la memoria reservada y a sus contenidos, el estado de ejecución en determinado momento, y la información que permite al sistema operativo planificar. 


Concurrencia: En computación, la concurrencia es la propiedad de los sistemas que permiten que múltiples procesos sean ejecutados al mismo tiempo, y que potencialmente puedan interactuar entre sí.



latencia
tarea
proceso
concurrencia

miércoles, 2 de marzo de 2011

Ejemplo de Sistema en Tiempo Real


Sistema de captura de movimiento de brazos en tiempo real y robot humanoide


Robot Humanoide de 6 gdl Controlado Mediante un Sistema Sensorial

 Estudio Virtual 3D en Tiempo Real




Sistemas Deterministas

Un sistema determinista es un modelo conceptual del filosófico doctrina de determinismo aplicado a a sistema a para entender todo que tiene y ocurrirá en el sistema, basado en los resultados físicos de casualidad. 
En un sistema determinista, cada acción, o la causa, produce una reacción, o efecto, y cada reacción, alternadamente, se convierte en la causa de reacciones subsecuentes. La totalidad de estos acontecimientos de conexión en cascada puede demostrar teóricamente exactamente cómo existirá el sistema en todo momento adentro tiempo


fuente
fuente2
 

SOFT Real Time System & HARD Real Time System


El tiempo real suave (Soft real time system)significa que no existe problema si se rebasa un tiempo límite.

Ejemplo de sistema de tiempo real suave.

  • Conmutador telefónico.


Un sistema de tiempo real duro (Hard real time system) es aquel en el que un tiempo límite no cumplido puede resultar catastrófico.

Ejemplo de sistema de tiempo real duro.

  • Alarma sísmica.
Un sistema se dice que es en tiempo real si la corrección total de una operación no sólo depende de su corrección lógica, sino también en el momento en el que se lleva a cabo. La concepción clásica es que en un sistema de tiempo real en tiempo real o inmediato, la realización de una operación después de su fecha límite se considera inútil - en última instancia, esto puede causar un fallo crítico del sistema completo. Un Soft en tiempo real por el contrario va a tolerar tales retrasos, y puede responder con la calidad del servicio disminuyó (por ejemplo, omitiendo los marcos mientras se muestra un vídeo). 

El Hard de tiempo real se utiliza cuando es imprescindible que un evento se reacciona dentro de un plazo estricto. Tales garantías fuertes se requieren de sistemas para los que no reaccionen en un cierto intervalo de tiempo podría causar una gran pérdida de alguna manera, sobre todo dañar el entorno físico o amenazar las vidas humanas (aunque la definición estricta es simplemente que falta el plazo constituye el fracaso del sistema ). Por ejemplo, un motor del coche sistema de control es un sistema de tiempo real debido a una señal retrasada puede causar una falla o avería del motor. Otros ejemplos de sistemas embebidos duro en tiempo real son los sistemas médicos como los marcapasos y los controladores de procesos industriales. El Hard de tiempo real normalmente se encuentran interactuando en un nivel bajo con el hardware físico, en sistemas embebidos. Los primeros sistemas de videojuegos como el Atari 2600 y los gráficos vectoriales Cinematronics había requisitos de tiempo real debido a la naturaleza de los gráficos y el hardware de tiempo. 




martes, 1 de marzo de 2011

Sistema de Tiempo Real 

Definición:

Cualquier sistema en el que el tiempo en el que se produce la salida es significativo. Esto generalmente es por que la entrada corresponde a algún movimiento en el mundo físico, y la salida esta relacionada con dicho movimiento. el intervalo entre el tiempo de entrada y el de salida debe ser lo suficientemente pequeño para una temporalidad aceptable.



sistemas de tiempo real y lenguajes de programación, Burns-Wellings. pag. 2