Download 1. Introducción.

Document related concepts
no text concepts found
Transcript
1. Introducción.
En este capítulo se presenta una introducción al proyecto abordando el tema
principal en el cual esta centrado: aprovechar las posibilidades que ofrece la maquina
virtual de la plataforma J2ME, la KVM.
La KVM forma parte de la versión mas reducida del entorno de ejecución Java y
se incluye en el software de la plataforma Java 2 Micro Edition (plataforma J2ME). Se
usa en dispositivos con memoria y potencia de procesador limitada. Los teléfonos
móviles, buscapersonas y asistentes digitales personales (PDA) suelen utilizar una
KVM para ofrecer ciertas funciones informáticas habituales.
La KVM es similar a la JVM (Máquina virtual Java) ya que ambas son motores
que ejecutan las aplicaciones y los applets que utilizan tecnología Java. Se usa en
teléfonos y dispositivos móviles mientras que la JVM se utiliza en equipos informáticos.
De hecho, la KVM fue concebida como una versión reducida de la maquina
virtual genérica limitando el consumo de recursos de la misma. Así por ejemplo de los
variados algoritmos de gestión de memoria de los que dispone la JVM solo se mantiene
en la KVM uno de ellos que además resulta ser el mas sencillo. Adicionalmente se
incorporan mecanismos extras que permiten agilizar la ejecución de ciertas tareas como
es el caso de la ejecución de los bytecodes que componen los archivos de clases.
La tecnología J2ME utiliza varias máquina virtuales de tamaños distintos aparte
de la KVM, que es únicamente una implementación de las Configuraciones para
dispositivos con conectividad limitada (Connected Limited Device Configurations,
CLDC) disponibles para la ejecución de Java en dispositivos móviles.
La plataforma de ejecución Java conlleva una serie de etapas o fases
consecutivas:
•
•
•
Desarrollo de las aplicaciones Java.
Compilación del código fuente de dichas aplicaciones. Mediante esta etapa cada
uno de los archivos Java se traduce en un archivo de clases (.class).
Interpretación: ejecución del archivo de clases.
La maquina virtual opera en tiempo de ejecución en la última de las tres fases
anteriormente expuestas. El archivo de clases que se genera en la compilación es
básicamente un conjunto de instrucciones especiales denominadas bytecodes que la
maquina virtual es capaz de entender. Precisamente la maquina virtual se encarga de
transformar esos bytecodes en las funciones que el sistema operativo puede emplear
para ejecutar las aplicaciones. Es lo que se conoce como fase de interpretación y es
común a todos los lenguajes denominados interpretados.
De esta forma la KVM, partiendo del archivo de clases, ejecuta una serie de
módulos de forma secuencial y que en primera aproximación se encuentran resumidos
en la figura 2.1 dentro del bloque Java run-time environment:
Figura 2.1: Estructura simplificada interna de la maquina virtual.
Como se puede observar en la Figura 2.1 la maquina virtual tiene cuatro
módulos:
•
•
•
•
Loader: para cargar las clases que se han de ejecutar en memoria.
Verifier: verifica las clases que se han cargado.
Intérprete: ejecuta los bytecodes.
JIT compiler: compila e interpreta los bytecodes en tiempo de ejecución.
El JIT compiler es variante del flujo de ejecución normal que permite mejorar el
rendimiento en ejecución realizando la compilación e interpretación de forma
concurrente.
Adicionalmente existen otros módulos que realizan las distintas tareas que para
un programador Java son totalmente transparentes. Ejemplos de estas tareas son:
•
Reserva de memoria para objetos recién creados.
•
•
•
Suspensión de un hilo de ejecución.
Sincronización en las operaciones de entrada/salida con los recursos del sistema
operativo.
….
Cuando se programan aplicaciones en la plataforma móvil de Java, los
desarrolladores se tienen que enfrentar a un esfuerzo adicional añadido al del diseño e
implementación de la aplicación. Dicho esfuerzo consiste en adaptar la aplicación a la
forma en la que trabaja la maquina virtual para poder aprovechar al máximo los muy
limitados recursos de los dispositivos finales.
Otra posibilidad para mejorar aspectos concretos de las aplicaciones J2ME es
emplear una implementación propia de la KVM. Para ello es necesario un estudio
detallado de la arquitectura y funcionamiento de la misma así como realizar las
oportunas pruebas para asegurar sus resultados. Dichas pruebas son en realidad
aplicaciones Java que al ejecutarse sobre la maquina virtual realizan mediciones de
distinta naturalezas. Estas mediciones suelen ser temporales indicando de esta forma el
tiempo que invierte la maquina virtual en realizar determinadas tareas.
Las motivaciones que llevan a realizar un estudio de los módulos y del
funcionamiento global de la maquina virtual están referidas a hacer mas independiente
el diseño de software del dispositivo sobre el que se ejecutan. Es decir, se pretende
introducir mejoras específicas en la KVM para lograr que las aplicaciones Java
demanden menor cantidad de recursos del procesador. De esta forma, estas aplicaciones
podrían ejecutarse en un rango mayor de dispositivos móviles manteniendo las mismas
características de funcionamiento.
1.1. Estructuración del proyecto.
A continuación se va a describir de forma somera la estructura del proyecto y el
contenido de cada uno de los capítulos que integran esta memoria.
Los capítulos 2 y 3 presentan una introducción gradual acerca de los términos de
los conceptos que serán de utilidad a lo largo de los capítulos. En particular el capítulo 2
presenta una introducción a la tecnología Java en general y el capítulo 3 se adentra un
poco más en la plataforma para terminales móviles de Java, la J2ME.
En el capítulo 4 se presenta ya una visión global de la estructuración interna de
la maquina virtual que emplea la plataforma J2ME denominada KVM. Se comenta en
este capítulo a grandes rangos la visión funcional de la arquitectura de la maquina
virtual y cuales son los distintos módulos que la integran.
Se ha estructurado el proyecto de forma que cada capítulo trata de forma extensa
cada uno de los módulos pero siempre siguiendo una estructura común a todos ellos:
•
•
•
Presentación de conceptos genéricos asociados.
Particularización de dichos conceptos para la KVM.
Análisis de la implementación del módulo en cuestión.
De los tres puntos anteriormente expuestos el más relevante es el último de ellos
y a su vez se estructura de forma lógica en distintos apartados:
•
•
•
•
•
Funcionamiento global del módulo.
Presentación de las estructuras de datos que se manejan tales como estructuras,
uniones, variables, etc...
Estudio de cada una de las operaciones externas que pueden ser invocadas.
Configuración parametral del módulo.
Conclusiones y visión global.
El capítulo 18 recoge como fruto del recorrido a lo largo de la KVM los
numerosos parámetros que se han empleado a lo largo de los módulos para configurarla
y como se pueden aprovechar para un uso particular.
Los capítulos 19 y 20 exponen la forma en la cual todo el análisis de la KVM
presentando se puede emplear para adecuar o bien crear nuestra propia implementación
de la KVM optimizando o degradando aquel aspecto que nos interese.