Industria y comunicaciones en Tiempo-Real

Anuncio
PAC- Performance-centered Adaptive Curriculum for Employment Needs
Programa ERASMUS: Acción Multilateral - 517742-LLP-1-2011-1-BG-ERASMUS-ECUE
MASTER DEGREE:
Industrial Systems Engineering
ASIGNATURA ISE4:
Industria y comunicaciones en Tiempo-Real
MÓDULO 2:
Sistemas en Tiempo-Real
TAREA 2-2:
ELECCIÓN DE LOS OS EN TIEMPO-REAL. JAVA COMO UN OS EN TIEMPOREAL
Industria y comunicaciones en Tiempo-Real
Contenido
TAREA 2-2: ELECCIÓN DE LOS OS EN TIEMPO-REAL. JAVA COMO UN OS EN TIEMPO
REAL. .................................................................................................................................................................................................3
1. INTRODUCCIÓN Y OBJETIVOS ...........................................................................................................................3
2. CONTENIDO .....................................................................................................................................................................3
2.1 REQUISITOS BASICOS PARA OS EN TIEMPO-REAL ......................................................................3
2.2 ALGUNOS EJEMPLOS DE RTOS.................................................................................................................6
2.3. CARACTERÍSTICAS DE JAVA COMO RTOS ........................................................................................7
2.4. TIEMPO DE TAREAS Y METAS EN RTSJ .............................................................................................8
2.5. PROCESOS E HILOS (THREAD) EN EL CONTEXTO DE OS ...................................................8
2.6. PROCESOS E HILOS ......................................................................................................................................11
2.7 DIFERENCIA ENTRE PROCESOS E HILOS ..........................................................................................12
2.8. VENTAJAS DE LOS HILOS .........................................................................................................................13
2.9. CONDICIONES DE HILOS USADOS EN JAVA ...............................................................................14
2.10. PRIORIDADES DE HILOS (THREADS) EN RTSJ ...........................................................................16
2.11. TIPOS DE MEMORIA Y SU USO EN LA FUNCIÓN RTSJ ...................................................17
2.12. LAS FUENTES DE INCERTIDUMBRE EN LA APLICACIÓN JAVA .......................................18
2.13. RECOLECTOR DE BASURA (GC) EN SISTEMAS EN TIEMPO-REAL................................19
3. CONCLUSIONES .........................................................................................................................................................23
4. BIBLIOGRAFÍA Y/O REFERENCIAS ...................................................................................................................23
5. ENLACES DE INTERÉS ............................................................................................................................................23
Índice de figuras
Figura
Figura
Figura
Figura
Figura
1:
2:
3:
4:
5:
HILOS (THREADS)...........................................................................................................................................11
ESTADO DE LOS HILOS ............................................................................................................................15
GC BASADOS EN EL TRABAJO ............................................................................................................23
GC BASADOS EN EL TIEMPO ................................................................................................................23
GC HENRIKSSON ..........................................................................................................................................24
ELECCIÓN DE LOS OS EN TIEMPO-REAL. JAVA COMO UN OS EN TIEMPO-REAL
2
Industria y comunicaciones en Tiempo-Real
TAREA 2-1: FUNDAMENTO Y PROGRAMACIÓN DE
SISTEMAS EN TIEMPO-REAL.
1. INTRODUCCIÓN Y OBJETIVOS
En esta tarea nuestro objetivo principal será conocer las características de los
OS en Tiempo-Real (RTSO), así como sus ventajas respecto a un OS sin
Tiempo-Real.
En especial estudiaremos las características de Java como RTSO.
2. CONTENIDO
2.1 REQUISITOS BASICOS PARA OS EN TIEMPO-REAL
Un sistema operativo para tiempo real es un sistema operativo capaz de
garantizar los requisitos temporales de los procesos que controla.
La elección del sistema operativo de tiempo real (RTOS) es esencial para la
determinación total de RTS, para saber: la funcionalidad, el rendimiento, la
fiabilidad, tiempo de espera y el precio en el mercado
Los sistemas operativos convencionales no son apropiados para la realización
de sistemas de tiempo real, debido a que
– no tienen un comportamiento determinista y
– no permiten garantizar los tiempos de respuesta.
En los sistemas con una alta fiabilidad, hilos, dedicados al procesamiento y
visualización de datos (interfaz de usuario) compiten con los hilos que realizan
el seguimiento de los parámetros críticos y las condiciones de alarma, y los
hilos responsables de toma de decisiones y la conducción de diferentes
mecanismos. Se trata de una "lucha" por tiempo y recursos del sistema.
Un sistema operativo para tiempo real debe ofrecer las siguientes facilidades:
– concurrencia: procesos ligeros, hilos (threads) con memoria compartida.
– temporización: medida de tiempos y ejecución periódica.
– planificación: prioridades fijas con desalojo, acceso a recursos con
protocolos de herencias de prioridad.
– dispositivos de E/S: acceso a recursos hardware e interrupciones.
Para ser capaces de coexistir hilos de distintos grados de importancia en la
misma
aplicación,
el
sistema
operativo
debe
garantizar
una
adecuada
ELECCIÓN DE LOS OS EN TIEMPO-REAL. JAVA COMO UN OS EN TIEMPO-REAL
3
Industria y comunicaciones en Tiempo-Real
asignación
de
tiempo
de
CPU
y
otros
recursos
para
garantizar
su
disponibilidad en cualquier momento dado.
Los requisitos básicos se pueden resumir de la siguiente manera:
1. Protección de la memoria. La tolerancia de errores, y por lo tanto la
fiabilidad de un sistema dependen principalmente en los métodos de
protección de memoria
2. La tolerancia de errores y accesibilidad. Incluso el mejor software tiene,
errores latentes ocultos. Para este propósito RTOS debe proporcionar
mecanismos para la detección de errores y recuperación. OS debe
elegir la forma más adecuada para reaccionar - la posibilidad de
reiniciar el sistema o no: si una interfaz de usuario se puede reiniciar,
el programa para la gestión de los aviones no puede.
3. Derechos de acceso a los recursos del sistema. Hay dos tipos
principales de los derechos de acceso necesarios - y siempre que. Un
ejemplo del segundo tipo son los derechos de acceso a un archivo un proceso o hilo puede permitir el acceso a archivos a otro proceso
en el sistema. En los sistemas que requieren alta fiabilidad y seguridad
no es posible, y no debe ser aplicado el tipo requerido de derechos de
acceso a los objetos de sistema críticos. Ejemplo: sensor para controlar
un parámetro (por ejemplo, el nivel de radiación) del medio ambiente
en la planta de energía nuclear - el desarrollador del sistema debe
establecer los derechos y resolvió que sólo el programa de manejo del
sensor puede acceder a él.
4. 4. Acceso a la capacidad de memoria Garantizado. Para los sistemas
críticos, la fiabilidad es esencial para los procesos de fundamental
importancia, tener siempre memoria para recursos deseados. En la
mayoría de RTOS, la memoria para mantener el bloqueo de control de
cada hilo u otros objetos es asignado por un recurso central común.
Esta situación para las aplicaciones críticas no debe permitirse. Para
garantizar la memoria siempre disponible, RTOS debe proporcionar un
mecanismo para la asignación de cuotas de memoria de acuerdo con
las prioridades de los distintos procesos.
5. 5. Garantizar el acceso a los recursos "tiempo de CPU '. La mayoría de
RTOS se usa en principios de prioridad para la asignación de tiempo
de CPU. En este esquema, el hilo con la prioridad más alta obtiene el
tiempo de ejecución de CPU. Tener más de un hilo con la misma
ELECCIÓN DE LOS OS EN TIEMPO-REAL. JAVA COMO UN OS EN TIEMPO-REAL
4
Industria y comunicaciones en Tiempo-Real
prioridad, se emplea para el principio de tiempo compartido, que se
proporcionan a cada hilo por igual..
6. 6. Respuesta rápida del sistema. En aplicaciones de alta seguridad es
extremadamente importante para evaluar los parámetros temporales del
sistema, es decir, para determinar su rendimiento. No sólo el tiempo de
conexión, también el tiempo que RTOS ejecuta el código de programa
de los hilos individuales que deben ser calculados, pero solo el tiempo
adicional también asociado a cada hilo.
Para un pequeño sistema operativo para objetos relativamente simples y no
muy responsable, no hay hardware específico para la protección de la
memoria. Con las crecientes necesidades de aplicaciones modernas para los
sistemas integrados, están aumentando los requisitos para RTOS en términos
de margen de error, la disponibilidad de recursos, el rendimiento y la fiabilidad
de los sistemas. Por tanto, la elección del sistema operativo de tiempo real,
que será implementado en una aplicación, sus requisitos serán complejos,
sobre todo porque el mercado tiene un gran número de RTOS.
Problemas de los sistemas operativos convencionales:
• Existen algunas características de los sistemas operativos convencionales que
impiden su uso como RTOS (Real-Time Operating System).
• Lo veremos en el caso particular de un sistema operativo UNIX.
• Problemas:
1- Planificación para tiempo compartido:
• Uso de planificadores que aseguran un uso equitativo del tiempo de
CPU entre todos los procesos.
• Es conveniente para un usuario que usa el sistema desde una terminal.
• No para procesamiento de tiempo real, ya que la ejecución de
cualquier proceso depende de forma compleja e impredecible de la
carga del sistema y el comportamiento del resto de procesos.
2-
Baja resolución del temporizador:
• Históricamente a los procesos de usuario se les proporcionaban
señales de alarma y la llamada al sistema sleep() con sólo 1 segundo
de resolución Þ No es suficiente para procesamiento de tiempo real.
• Las versiones más modernas proporcionan medios de especificar
intervalos con mayor precisión.
Problemas (cont.):
3-
Núcleo no desalojable:
• Los procesos que se ejecutan en modo núcleo no pueden ser
desalojados.
ELECCIÓN DE LOS OS EN TIEMPO-REAL. JAVA COMO UN OS EN TIEMPO-REAL
5
Industria y comunicaciones en Tiempo-Real
• Una llamada al sistema podría tardar demasiado tiempo para poder
admitirlo en procesamiento de tiempo real.
4-
Deshabilitación de interrupciones:
• Muy cercano al anterior está el problema de la sincronización.
• Para proteger los datos que podrían ser accedidos asíncronamente,
algunos diseñadores optan por inhibir las interrupciones durante las
secciones críticas Þmás eficiente que los semáforos.
• Sin embargo, pone en peligro la posibilidad de responder a eventos
externos de forma adecuada.
5-
Memoria Virtual:
• En STR introduce un nivel de impredecibilidad intolerable.
Al elegir un sistema operativo en tiempo real, es necesario prestar atención al
objeto en el que están integrados en términos de escalabilidad, seguridad y
fiabilidad, etc. Así, por ejemplo, los objetos pequeños con sistemas integrados
MP tales como GSM, electrodomésticos, dispositivos de mano, etc. Los
sistemas operativos más utilizados, como Symbian, Itron, Android, Palm y otros.
mientras que para los sitios grandes con requisitos de alta fiabilidad, como las
centrales nucleares, militares y equipos aeroespaciales, equipos de control
médico en casos de emergencia y mucho más, requieren más sofisticación y
bien organizados sistema operativo en tiempo real.
2.2 ALGUNOS EJEMPLOS DE RTOS
Un primer ejemplo de un sistema operativo en tiempo real a gran escala fue
el Transaction Processing Facility desarrollado por American Airlines e IBM para
el sistema Sabre Airline Reservations.

En la actualidad el más conocido, de mayor despliegue, de sistemas
operativos de tiempo real son::

LynxOS

OSE

QNX

RTLinux

VxWorks
ELECCIÓN DE LOS OS EN TIEMPO-REAL. JAVA COMO UN OS EN TIEMPO-REAL
6
Industria y comunicaciones en Tiempo-Real


Windows CE

RTS Java и др.
Lista completa RTOS y su aplicación se puede ver en :
http://en.wikipedia.org/wiki/List_of_real-time_operating_systems
Vemos las soluciones de algunos sistemas operativos convencionales que
hemos visto anteriormente.
1. QNX:
• Cumple el estándar POSIX.1b.
• Arquitectura de microkernel Þel núcleo implementa sólo cuatro
servicios: planificación de procesos, comunicación entre procesos,
comunicación de red de bajo nivel y manejo de interrupciones.
• El resto de servicios se implementan como procesos de usuario.
2. VxWorks:
• RTOS patentado orientado hacia la aproximación host/target.
• Un host UNIX es usado para el desarrollo del software y para la
ejecución de las partes de la aplicación que no son de tiempo real.
• El núcleo de VxWorks (llamado wind) ejecuta las tareas de tiempo
real en la máquina target.
• Las máquinas se comunican utilizando TCP/IP.
• Proporciona algunas funciones POSIX.1b.
Direcciones de interés:
– QNX: http://www.qnx.com
– VxWorks: http://www.wrs.com/products/html/vxwks52.html
2.3. CARACTERÍSTICAS DE JAVA COMO RTOS
Java soporta paralelismos relativamente débiles (hilos y los métodos de
sincronización) y se puede utilizar para algunos RTS débiles
Java 2.0 no es adecuado para un fuerte RTS pero ahora hay nuevas versiones
de Java de tiempo real que solucionan y superan problemas como:
–
Si no se especifica el tiempo de ejecución de un hilo;
–
Tiempos diferentes para su ejecución en diferentes máquinas
virtuales;
ELECCIÓN DE LOS OS EN TIEMPO-REAL. JAVA COMO UN OS EN TIEMPO-REAL
7
Industria y comunicaciones en Tiempo-Real
–
Liberación incontrolada de memoria (recolección de basura);
–
Inaccesibilidad del hardware del sistema
–
Incapacidad para analizar el espacio y el rendimiento, y más
2.4. TIEMPO DE TAREAS Y METAS EN RTSJ
RTSJ Modela la parte de tiempo real de una aplicación como un conjunto de
tareas, cada una de las cuales tiene como objetivo la libre elección del
tiempo. Este objetivo determina cuando se debe completar la tarea. Tareas en
tiempo
real
se
dividen
en
varias
categorías
dependiendo
de
cómo
el
desarrollador puede predecir la frecuencia e implantación:
–
Periódicos:
Las
tareas
se
ejecutan
cíclicamente
durante
un
período de tiempo, tales como la lectura de un sensor cada 5
milisegundos.
–
Esporádica: tareas que no cumplen con ciertos períodos, pero
tienen una frecuencia máxima de ejecución.
–
Aperiódica: tareas cuya frecuencia de funcionamiento no se
puede predecir.
RTSJ utiliza información de dos tipos de tareas de diferentes maneras para
asegurar que las tareas críticas cumplan con sus objetivos. En primer lugar,
permite la asociación de cada tarea un controlador de las metas no
cumplidas. Si una tarea no se completa dentro del objetivo de tiempo, el
controlador adecuado es llamado. Información de fallo se puede utilizar para
tomar medidas correctivas o para proporcionar información sobre la eficacia o
el comportamiento caótico de un usuario o una aplicación de gestión.
2.5. PROCESOS E HILOS (THREAD) EN EL CONTEXTO DE OS
Antes de proceder a las preguntas sobre los procesos e hilos en Java RTS
recordemos
estos
conceptos
del
curso
"Introducción
a
los
Sistemas
Industriales".
ELECCIÓN DE LOS OS EN TIEMPO-REAL. JAVA COMO UN OS EN TIEMPO-REAL
8
Industria y comunicaciones en Tiempo-Real
Proceso es parte de un programa o un programa completo en acción. Cada
proceso tiene una tarea específica que hacer y necesita algunos recursos,
incluyendo tiempo de CPU, memoria, archivos y dispositivos I / O

Las cinco actividades principales del sistema operativo sobre la
gestión de procesos son :

Crear y eliminar procesos de usuario y del sistema.

Cese y reanudación de procesos.

Mecanismo para la sincronización de los procesos.

Mecanismo para la comunicación entre procesos.

Mecanismo
de
procesamiento
de
"deadlock"
en
caso
de
producirse
En la clásica arquitectura de computadores de von Neumann sólo un proceso
en una CPU puede tener lugar en un momento. Modernos sistemas operativos
permiten la ejecución simultánea de varios procesos a través del modo
multitarea, incluso con una CPU.
Cuando los equipos contienen una CPU, el modo multitarea es implementado
para cambiar rápidamente entre procesos.
En sistemas con múltiples CPU, las tareas y procesos se distribuyen entre los
procesadores y el sistema operativo se encarga de manera uniforme sobre la
carga de la CPU.
El proceso se define por un cierto conjunto de instrucciones de programa y
estados.

El estado de un proceso se define como un mínimo los siguientes
elementos :

El código de programa.

Programa de datos estáticos y dinámicos.

Programa stack de llamadas a procedimientos.

Contenido de registros de propósito general.

Contenido del contador de programa (PC)

El contenido de la palabra de estado del programa (PSW).
ELECCIÓN DE LOS OS EN TIEMPO-REAL. JAVA COMO UN OS EN TIEMPO-REAL
9
Industria y comunicaciones en Tiempo-Real

Recursos utilizados del sistema operativo.

Cada proceso puede crear nuevos procesos.
•
Cada proceso pasa a través de una serie de estados discretos :

Nuevo Estado - cuando se crean los procesos.

Ejecución de Estado - el proceso está en funcionamiento, el uso
de CPU y otros recursos.

Bloqueado o estado de espera - los procesos está bloqueado o
esperar a la finalización de la operación de otro proceso, los
recursos, etc.

Estado Ready - los procesos está listo para su ejecución y
esperar la CPU para liberarse de otro proceso, y para obtener el
tiempo de que.

Estado Terminado - la implementación del proceso es completa.
Un hilo de ejecución o thread , en sistemas operativos, es una característica
que permite a una aplicación realizar varias tareas concurrentemente. Los
distintos hilos de ejecución comparten una serie de recursos tales como el
espacio de memoria, los archivos abiertos, situación de autenticación, etc. Esta
técnica permite simplificar el diseño de una aplicación que debe llevar a cabo
distintas funciones simultáneamente.
Los hilos de ejecución que comparten los mismos recursos, sumados a estos
recursos, son en conjunto conocidos como un proceso. El hecho de que los
hilos de ejecución de un mismo proceso compartan los recursos hace que
cualquiera de estos hilos pueda modificar éstos. Cuando un hilo modifica un
dato en la memoria, los otros hilos acceden e ese dato modificado
inmediatamente a en la siguiente figura podemos observar un ejemplo de un
hilo de ejecución.
ELECCIÓN DE LOS OS EN TIEMPO-REAL. JAVA COMO UN OS EN TIEMPO-REAL
10
Industria y comunicaciones en Tiempo-Real
Fig.1: Hilos (threads).
Lo que es propio de cada hilo es el contador de programa, la pila de
ejecución y el estado de la CPU (incluyendo el valor de los registros).
El proceso sigue en ejecución mientras al menos uno de sus hilos de
ejecución siga activo. Cuando el proceso es terminado, todos sus hilos de
ejecución también lo son. Asimismo en el momento en el que todos los hilos
de ejecución finalizan, el proceso no existe más y todos sus recursos son
liberados.
Algunos lenguajes de programación tienen características de diseño
expresamente creadas para permitir a los programadores lidiar con hilos de
ejecución (como Java). Otros (la mayoría) desconocen la existencia de hilos de
ejecución y éstos deben ser creados mediante llamadas de biblioteca
especiales que dependen del sistema operativo en el que estos lenguajes
están siendo utilizados.
Un ejemplo de la utilización de hilos es tener un hilo atento a la interfaz
gráfica (iconos, botones, ventanas), mientras otro hilo hace una larga
operación internamente. De esta manera el programa responde de manera más
ágil a la interacción con el usuario. También pueden ser utilizados por una
aplicación servidora para dar servicio a múltiples clientes de procesos.
2.6. PROCESOS E HILOS
ELECCIÓN DE LOS OS EN TIEMPO-REAL. JAVA COMO UN OS EN TIEMPO-REAL
11
Industria y comunicaciones en Tiempo-Real
Ambos temas y procesos son los métodos de paralelización de una aplicación.
Sin embargo, los procesos de las unidades de ejecución son independientes,
estos contienen su propia información de estado, utilizan sus propios espacios
de direcciones, y sólo interactúan entre sí a través de mecanismos de
comunicación
entre
procesos
(generalmente
gestionados
por
el
sistema
operativo). Las solicitudes se suelen dividir en procesos durante la fase de
diseño, y un proceso maestro explícita generación de hilos cuando tiene
sentido a la funcionalidad de la aplicación significativa lógicamente separada.
Procesos, en otras palabras, son una construcción arquitectónica.
Por el contrario, un hilo es una construcción de codificación que no afecta a
la arquitectura de una aplicación. Un solo proceso puede contener varios
hilos; todos los temas de un proceso comparten el mismo estados y en el
mismo espacio de memoria, y puede comunicarse directamente entre sí, ya
que comparten las mismas variables.
Los hilos se utilizan para tareas pequeñas, mientras que los procesos se
utilizan para tareas más "pesadas" - básicamente la ejecución de aplicaciones.
2.7 DIFERENCIA ENTRE PROCESOS E HILOS
Los hilos se distinguen de los tradicionales procesos en que los procesos son
generalmente independientes, llevan bastante información de estados, e
interactúan sólo a través de mecanismos de comunicación dados por el
sistema. Por otra parte, muchos hilos generalmente comparten otros recursos
directamente. En muchos de los sistemas operativos que proveen facilidades
para los hilos, es más rápido cambiar de un hilo a otro dentro del mismo
proceso, que cambiar de un proceso a otro. Este fenómeno se debe a que los
hilos comparten datos y espacios de direcciones, mientras que los procesos al
ser independientes no lo hacen. Al cambiar de un proceso a otro el sistema
operativo (mediante el dispatcher) genera lo que se conoce como overhead,
que es tiempo desperdiciado por el procesador para realizar un cambio de
modo (mode switch), en este caso pasar del estado de Running al estado de
Waiting o Bloqueado y colocar el nuevo proceso en Running. En los hilos
como pertenecen a un mismo proceso al realizar un cambio de hilo este
overhead es casi despreciable.
Sistemas operativos como Windows NT, OS/2 y Linux (2.5 o superiores) han
dicho tener hilos 'baratos', y procesos 'costosos' mientras que en otros
sistemas no hay una gran diferencia.
ELECCIÓN DE LOS OS EN TIEMPO-REAL. JAVA COMO UN OS EN TIEMPO-REAL
12
Industria y comunicaciones en Tiempo-Real
He aquí un resumen de las diferencias entre los procesos e hilos:
1. Los hilos son fáciles para crear procesos, ya que no requieren un espacio
de direcciones independiente.
2. Multihilos requiere una cuidadosa programación desde hilos que comparten
estructuras de datos que sólo deben ser modificados por un hilo a la vez. A
diferencia de subprocesos, los procesos no comparten el mismo espacio de
direcciones.
3. Hilos se consideran ligeros porque utilizan muchos menos recursos que los
procesos.
4. Los procesos son independientes entre sí. Hilos, puesto que comparten el
mismo espacio de direcciones son interdependientes, por lo que se debe tener
cuidado para que los diferentes subprocesos no pisen entre sí. Esto es
realmente otra forma de decir # 2 arriba.
5. Un proceso puede consistir en múltiples hilos.
2.8. VENTAJAS DE LOS HILOS
Si bien los hilos son generados a partir de la creación de un proceso,
podemos decir que un proceso es un hilo de ejecución, conocido como
Monohilo. Pero las ventajas de los hilos se dan cuando hablamos de
Multihilos, que es cuando un proceso tiene múltiples hilos de ejecución los
cuales realizan actividades distintas, que pueden o no ser cooperativas entre
sí. Los beneficios de los hilos se derivan de las implicaciones de rendimiento.
Se tarda mucho menos tiempo en crear un hilo nuevo en un proceso existente
que en crear un proceso. Algunas investigaciones llevan al resultado que esto
es así en un factor de 10.
Se tarda mucho menos en terminar un hilo que un proceso, ya que cuando se
elimina un proceso se debe eliminar el BCP del mismo, mientras que un hilo
se elimina su contexto y pila.
Se tarda mucho menos tiempo en cambiar entre dos hilos de un mismo
proceso
Los hilos aumentan la eficiencia de la comunicación entre programas en
ejecución. En la mayoría de los sistemas en la comunicación entre procesos
debe intervenir el núcleo para ofrecer protección de los recursos y realizar la
ELECCIÓN DE LOS OS EN TIEMPO-REAL. JAVA COMO UN OS EN TIEMPO-REAL
13
Industria y comunicaciones en Tiempo-Real
comunicación misma. En cambio, entre hilos pueden comunicarse entre sí sin
la invocación al núcleo. Por lo tanto, si hay una aplicación que debe
implementarse como un conjunto de unidades de ejecución relacionadas, es
más eficiente hacerlo con una colección de hilos que con una colección de
procesos separados.
Como resumen podemos decir que:

Se necesita menos tiempo para la creación y terminación de un hilos
que de un proceso

El cambio entre dos hilos lleva menos tiempo que el cambio entre dos
procesos

Hilos pueden comunicarse entre sí sin la llamada del núcleo

El uso de múltiples hilos crea una impresión de la multitarea. La razón
es que el tiempo de un subproceso toma de CPU es muy corto
Casos en los que es conveniente utilizar hilos:

Servicio para muchos usuarios a la vez, como por ejemplo un servidor
Web

La comunicación a través de la red (sockets)

Realice la operación que consume tiempo

La distinción entre las tareas por prioridad

Para que la interfaz de usuario pueda continuar para "responder" a
consultas de los usuarios, mientras que se lleva a cabo la tarea de
fondo.
2.9. CONDICIONES DE HILOS USADOS EN JAVA

Características de los hilos en Java
 Los subprocesos en Java son objetos de la clase Thread, que es
parte del paquete java.lang.
 Al crear un nuevo subproceso es necesario redefinir el método
run (), toda la funcionalidad del subproceso está insertado en
este método.
ELECCIÓN DE LOS OS EN TIEMPO-REAL. JAVA COMO UN OS EN TIEMPO-REAL
14
Industria y comunicaciones en Tiempo-Real
 El método run () puede llamar a otros métodos.
 El subproceso se inicia mediante una llamada al método del
objeto start ().
 El método start (), a su vez llama al método run () y se encarga
de la realización de las tareas adicionales requeridas.

Ninguno de estos métodos tiene ningún parámetro.

En un programa puede usar muchas diferentes clases Thread y
muchos otros objetos la misma clase Thread.

Cada una de estas clases tiene su propio método run () que es
independiente de la run () para métodos de otras clases.

El estado del hilo muestra lo que hace actualmente y lo que es capaz
de realizar. Se puede estar en cuatro estados: New (Nuevo), running
(Runnable), broken / blocked (Bloqueado) y completed (Dead) (ver figura
siguiente).
Fig.2: Estados delos hilos.
ELECCIÓN DE LOS OS EN TIEMPO-REAL. JAVA COMO UN OS EN TIEMPO-REAL
15
Industria y comunicaciones en Tiempo-Real
2.10. PRIORIDADES DE HILOS (THREADS) EN RTSJ
En un ambiente de tiempo real, las prioridades de los threads son de extrema
importancia. Ningún sistema puede garantizar que todas las tareas vayan a
completarse en tiempo. Sin embargo, un sistema de tiempo real puede
garantizar que si algunas de las tareas van a incumplir sus metas de tiempo,
entonces las tareas de menor prioridad serán las primeras en ser sacrificadas.
Establecer la prioridad de los hilos puede ser muy útil si uno de ellos tiene
que realizar tareas más importantes que otros. Clase Thread tiene un
setPriority método (int level), gracias al cual se puede cambiar la prioridad.
Parámetro de nivel puede tener cualquier valor entre 1 (el menos importante)
a 10 (el más importante), y si el nivel no está establecido, sea pts defecto es
5.
En RTOS las prioridades de hilos son de gran importancia. Ningún sistema
puede garantizar que todas las tareas se completan a tiempo. Sin embargo, un
RTOS puede garantizar que si algunas tareas no pueden cumplir con los
objetivos de tiempo, entonces las tareas de menor prioridad se ejecutará
primero.
RTSJ define al menos 28 niveles de prioridad y requiere un cumplimiento
estricto de las mismas. Sin embargo, como ya se mencionó, RTSJ depende de
un sistema operativo en tiempo real para soportar múltiples prioridades.
El problema de la inversión de prioridades puede afectar negativamente a las
prioridades. De esta manera, RTJS requiere la herencia de prioridades en su
gestión. La herencia de prioridad evita la inversión de prioridades, aumentando
la prioridad del thread que está bloqueando un recurso para igual la prioridad
del thread de mayor prioridad que está esperando el recurso.
Esto
evita
que
un
thread
de
prioridad
alta
se
queda
esperando
indefinidamente a un thread de menor prioridad que tiene bloqueado el
recurso, pero que no puede liberar porque no obtiene los ciclos de CPU
necesarios para finalizar su tarea.
Además, RTJS está diseñado para permitir que actividades de tiempo real y de
no tiempo real coexistan en la misma aplicación Java. El grado de garantías
temporales brindadas a una actividad dependen del tipo de thread en la cual
se ejecuta la actividad: java.lang.Thread o javax.realtime.RealtimeThread.
ELECCIÓN DE LOS OS EN TIEMPO-REAL. JAVA COMO UN OS EN TIEMPO-REAL
16
Industria y comunicaciones en Tiempo-Real
•
Los
threads
comunes
java.lang.Thread
(JLT)
son
soportados
para
actividades no de tiempo real. Estos threads JTL pueden usar 10 niveles
de prioridad, pero no se brindan garantías de su ejecución en el
tiempo.
•
Los threads javax.realtime.RealtimeThread (RTT) toman ventaja de la
gestión de threads con prioridad de RTJS, y se administración de una
forma ejecutar-al-bloque, en lugar de por porciones de tiempo. Es decir,
el administrador de threads sólo va a realizar un thread switch cuando
un RTT de mayor prioridad esté listo para ejecutarse.
RTSJ
proporciona
una
subclase
de
hilos
por
RTT,
llamado
NoHeapRealtimeThread (NHRT). Las instancias de esta subclase están
protegidos de la interferencia de GC, como hilos NHRT están diseñados
para las actividades en tiempo real rígidos
2.11. TIPOS DE MEMORIA Y SU USO EN LA FUNCIÓN RTSJ
RTSJ brinda varias formas de reservar memoria para objetos, dependiendo
de la naturaleza de la tarea realizando la reserva. Los objetos pueden
asignarse a un área de memoria específica, y las diferentes áreas tienen
diferentes características de GC y límites de reserva.
•
Heap estándard. Como cualquier máquina virtual, RTJS mantiene un
heap con garbage collector, el cual puede ser usado por los threads
estándard o de tiempo real. Los NHRT no pueden usar el heap
estándard para poder garantizar predecibilidad.
•
Memoria inmortal. La memoria inmortal es un área de memoria que no
tiene un gargabe collector. Una vez que el objeto se asigna a la
memoria inmortal, la memoria usada por este objeto nunca va a ser
liberada (en principio). El uso principal de la memoria inmortal es que
las
actividades
reservando
pueden
estáticamente
evitar
la
reservas
memoria
que
de
memorias
necesitan
dinámicas,
antes
de
la
ejecución, y gestionándola ellas mismas. Gestionar la memoria inmortal
requiere mucho más cuidado que administrar la memoria del heap
estándard.
•
Memoria acotada. RTSJ brinda un tercer mecanismo de reserva llamada
memoria acotada, que sólo está disponible para threads de tiempo real
(RTT y NHRT). Estas áreas de memoria están pensadas para objetos
ELECCIÓN DE LOS OS EN TIEMPO-REAL. JAVA COMO UN OS EN TIEMPO-REAL
17
Industria y comunicaciones en Tiempo-Real
con un tiempo de vida conocido, como ser objetos temporales creados
durante el procesamiento de una tarea. Al igual que la memoria
inmortal, la memoria acotada no tiene un garbage collector, pero la
diferencia es que el área completa de memoria puede reclamarse al
finalizar su uso, como ser al fin de la tarea. Estas áreas de memoria
tienen un límite máximo asignado al crearse, de forma de poder
controlar su uso y crecimiento.
2.12. LAS FUENTES DE INCERTIDUMBRE EN LA APLICACIÓN JAVA
Hay varios factores que llevan a la impredecibilidad de la ejecución de las
aplicaciones en el tiempo, y por lo tanto pueden causar que una aplicación
Java estándard no cumpla con las metas de tiempo. Las causas más
comunes:
•
Gestión del sistema operativo. En la tecnología Java, los threads son
creados por la JVM pero, en última instancia, son gestionados por el
sistema
operativo.
Para
que
una
JVM
pueda
garantizar
latencias
temporales, es decir, la demora en el tiempo en reaccionar ante una
acción, el sistema operativo tiene que brindar garantizas sobre la
latencia de su gestión de threads.
•
Inversión de prioridades. Un riesgo en una aplicación con threads es la
inversión de prioridades. Si un thread de menor prioridad comparte un
recurso con otro de mayor prioridad, y si el recurso está sincronizado
por un monitor, el thread de menor prioridad podría tener bloqueado el
recurso al momento que el thread de mayor prioridad lo necesita. En
este caso, el thread de mayor prioridad no puede proceder hasta que
el thread de menor prioridad termina su trabajo: y esto puede causar
que el thread de mayor prioridad no cumpla con su meta de tiempo.
El efecto de la inversión de prioridad es que se "baja" la prioridad del
thread de mayor prioridad a aquel de menor prioridad.
•
Carga de clases, inicialización y compilación. La especificación del
lenguaje Java requiere que las clases sean inicializadas de manera
perezosa: cuando una aplicación las utiliza por primera vez. Estas
instanciaciones pueden ejecutar código de usuario, creando así latencias
variables la primera vez que se usa la clase. Además, la especificación
permite que las clases se carguen de manera perezosa también. Como
la carga de clases pueden requerir accesos a disco o a través de una
red para encontrar la definición de la clase, referenciar a una clase sin
ELECCIÓN DE LOS OS EN TIEMPO-REAL. JAVA COMO UN OS EN TIEMPO-REAL
18
Industria y comunicaciones en Tiempo-Real
referencia
previa
puede
ocasionar
una
demora
inesperada
(y
potencialmente enorme). Por último, la JVM puede decidir cuando, si lo
hace,
traducir
Usualmente
se
el
código
compila
bytecode
un
método
de
la
sólo
clase
a
cuando
código
se
nativo.
ejecuta
tan
frecuentemente que justifica el costo de la compilación.
•
Garbage collector. La principal fuente de impredeciblidad en Java es el
Garbage Collector (GC). Los algoritmos de GC que usan las JVM
estándard involucran, de una manera u otra, detener-el-mundo-y-limpiar:
se suspenden todos los threads para que el GC puede ejecutarse sin
interferencias. Las aplicaciones con requerimientos estrictos de tiempo
no pueden tolerar estas pausas causadas por el GC. A pesar de todo el
trabajo que se viene realizando para reducir estas pausas, incluso un
GC de baja-pausa no es suficiente para garantizar la predecibilidad de
la ejecución.
•
La aplicación. Otra importante fuente de impredecibilidad es la misma
aplicación, incluyendo a todas las librerías que utiliza. La mayoría de las
aplicaciones consisten de diversas actividades que compiten de manera
igual por los recursos del CPU. Las aplicaciones Java en general no
utilizan threads con prioridad, en particular porque la JVM ofrece muy
pocas garantías acerca de estas prioridades. Así, completar una tarea
puede tardar más de lo esperado, lo que provoca que otras tareas
tengan que esperar para recursos del CPU.
•
Otras actividades en el sistema. Pueden existir otras actividades de alta
prioridad en el sistema, como ser interrupciones de hardware, otras
aplicaciones de tiempo real, y demás. Estas otras actividades pueden
interferir con la aplicación, y así afectar el determinismo.
En RTSJ están buscando maneras de minimizar esta incertidumbre: mejor
gestión de la memoria, mejorar la comunicación entre hilos y diferentes
algoritmos para la planificación de la GC en tiempo real, que se discutirá más
adelante.
2.13. RECOLECTOR DE BASURA (GC) EN SISTEMAS EN TIEMPO-REAL
Dado que el recolector de basura del sistema es una de las principales
fuentes de incertidumbre en las aplicaciones Java, la máquina virtual de
tiempo real (VM) debe encontrar una forma de evitar las interrupciones
causadas por el GC, lo que provoca errores en la consecución de objetivos de
ELECCIÓN DE LOS OS EN TIEMPO-REAL. JAVA COMO UN OS EN TIEMPO-REAL
19
Industria y comunicaciones en Tiempo-Real
tiempo. Sin embargo, cabe señalar que la memoria descriptiva en RTSJ no
define explícita la generación de la especificación de tiempo real GC.
Aunque ambos enfoques reducen la duración GC y mejorar la previsibilidad de
perturbaciones específicas que pueden ser difíciles de usar y sincronizar con el
entorno de trabajo, lo que reduce su fiabilidad cuando se usa para los
sistemas de tiempo real rígidos.
Hay un tercer enfoque, llamado el enfoque Henriksson.
Existen varios enfoques para la planificación de la GC en entornos en tiempo
real, cada uno con sus propias ventajas y desventajas. Esto incluye dos
enfoques específicos basado en el trabajo y en función del tiempo. Estos dos
métodos se utilizan para minimizar los efectos de la GC en la planificación de
subprocesos.

A) Un enfoque basado en el trabajo
 Este modelo requiere que cada hilo realiza una parte del
crecimiento de trabajo específico GC siempre que se necesite
memoria
para
un
objeto.
Este
enfoque
tiene
algunas
características positivas de equilibrio en el sentido de que las
actividades que requieren más memoria para los objetos están
en mayor riesgo de CG, en comparación con aquellos que
"gastan" menos objetos.
 Desventajas: como el tiempo requerido para realizar una cierta
cantidad de trabajo por GC varía, es difícil predecir el efecto de
GC en la planificación, es decir, alta tarea de prioridad puede no
realiza los objetivos temporales si se pide la memoria para un
objeto.

B) Un enfoque basado en el tiempo
 En lugar de dividir el trabajo de GC a las crecientes peticiones
de cobro, el enfoque basado en el tiempo, tiene previsto un
período de tiempo de GC para cada período de programación.
Esto
iguala
el
costo de
implementación de
GC
con otras
actividades en el programa. Una vez más no hay ningún vínculo
entre la cantidad de tiempo aumentada en la ejecución de GC y
la cantidad de memoria que se requiere, de modo que el
enfoque en tiempo real para el problema puede ser similar al
enfoque basado en el trabajo.
ELECCIÓN DE LOS OS EN TIEMPO-REAL. JAVA COMO UN OS EN TIEMPO-REAL
20
Industria y comunicaciones en Tiempo-Real
 Aunque ambos enfoques reducen la duración GC y mejorar la
previsibilidad interrupciones específicas, puede ser difícil de usar
y sincronizarlos con el entorno de trabajo, lo que reduce la
fiabilidad cuando se utilizan para sistemas de tiempo real rígidos
(duro).

C) Existe un tercer método llamado enfoque Henriksson, que consiste en
la modificación del enfoque basado en el trabajo de manera que el
creciente uso de GC, la memoria de consulta relacionada con hilos
críticos se posponen hasta que un mensaje ha hecho su trabajo.

D) La recolección de basura (GC) de tiempo real realizada por el RTSJ
from Sun (Java RTS)
 El sistema de GC para tiempo real por Java from Sun (Java RTS),
http://java.sun.com/javase/technologies/realtime/,
es
una
implementación comercial de la Especificación de tiempo real
para
Java
(),
es
decir,
la
especificación
JSR
1,
RTS
2.0,
http://jcp.org/en/jsr/detail?id=1.
 La
realización
de
la
versión
2.0
de
Sun,
Java
proporciona un nuevo Tiempo real GC (RTGC), que utiliza el
algoritmo de Henriksson. El GC realiza una o más subprocesos
para tiempo real (RTT). Ellos se cumplen con una prioridad más
baja que todos los otros casos NoHeapRealtimeThread (NHRT), y
puede ser menor que la prioridad de algunos de los subprocesos
RTT, de tal manera que las tareas críticas se pueden interrumpir
GC y el uso de la CPU. Por lo tanto subprocesos críticos están
protegidos de los efectos de la GC.
En algoritmo RTGC está configurado la prioridad máxima GC. Esto divide la
prioridad en dos filas. subprocesos NHRT reciben la más alta prioridad y se
conocen como las tareas críticas. La siguiente prioridad son subprocesos en
tiempo real (RTT), seguido de subprocesos que no son críticas para en tiempo
real y, finalmente, las tareas que no son en tiempo real. Como estándar, GC
se hace con su prioridad que es menor que la de subprocesos que no son
críticas para tiempo real. Sin embargo, dependiendo de si memoria se vuelve
insuficiente (es decir, reduce la memoria disponible), JVM reduce o aumenta la
prioridad de la GC a su máxima prioridad
ELECCIÓN DE LOS OS EN TIEMPO-REAL. JAVA COMO UN OS EN TIEMPO-REAL
21
Industria y comunicaciones en Tiempo-Real
Fig.3: GC BASADO EN EL TRABAJO.
Fig.4: GC BASADOS EN EL TIEMPO.
ELECCIÓN DE LOS OS EN TIEMPO-REAL. JAVA COMO UN OS EN TIEMPO-REAL
22
Industria y comunicaciones en Tiempo-Real
Fig.5: GC HENRIKSSON.
3. CONCLUSIONES
Ahora podemos entender cómo funcionan los OS en Tiempo-Real, las ventajas
y desventajas que proporcionan. En particular Java como OS en tiempo real.
4. BIBLIOGRAFÍA Y/O REFERENCIAS
[1] Elección de los OS en Tiempo Real. prof. Manuel Castro, de la Universidad
UNED de Madrid. Algunas adiciones fueron hechas por el prof. Anton Petrov departamento ЕCIТ en PU Plovdiv.
[2] An introduction to Real-Time Java Technology: Part 1, The Real-Time
specification for Java. http://www.oracle.com/technetwork/java/index.html
[3] An introduction to Real-Time Java Technology: Part 2, Garbage collection
and Java RTS
5. ENLACES DE INTERÉS
•
http://java.sun.com/javase/technologies/realtime/index.jsp
ELECCIÓN DE LOS OS EN TIEMPO-REAL. JAVA COMO UN OS EN TIEMPO-REAL
23
Industria y comunicaciones en Tiempo-Real
•
http://jcp.org/aboutJava/communityprocess/mrel/jsr001/index2.html
•
http://www.timesys.com/java/
ELECCIÓN DE LOS OS EN TIEMPO-REAL. JAVA COMO UN OS EN TIEMPO-REAL
24
Descargar