7. Estructura de Directorios.

Anuncio
7. Estructura de Directorios.
7.1. Estructura Genérica.
El contenido de la implementación de referencia del CLDC de J2ME propuesta por
Sun tiene el siguiente contenido:
•
•
•
•
•
•
•
•
Api: contiene el código fuente Java de la librería suministrada con esta
distribución.
Bin: contiene los archivos binarios ejecutables ya compilados de las
clases Java.
Build: contiene los makefiles para construir la KVM.
Doc: Documentación.
Jam: contiene el código fuente del componente opcional Java Apliccation
Manager(JAM) que es suministrado junto con la KVM.
Kvm: código fuente de la KVM y objeto de nuestro estudio en este
proyecto.
Samples: código fuente e iconos de algunos ejemplos ilustrativos.
Tools: código fuente e iconos de una serie de utilidades:
o JavaCodeCompact.
o Preverifier.
o KDWP Debug Proxy
o Palm tools.
Dicho contenido puede descargarse del sitio oficial de Sun: www.sun.com.
7.2. Estructura directorios ficheros código fuente KVM.
Dentro del directorio correspondiente al código fuente de la KVM tenemos
varios directorios que agrupan los archivos de código dependiendo del sistema
operativo final en el cual se va implementar la KVM. Veamos estos directorios por
separado.
7.2.1. VmCommon.
Todo el código fuente común e independiente de la plataforma objetivo se
aglutina en este directorio tanto los archivos con el código *.c como los archivos de
cabecera con las correspondientes macros y variables de diseño.
Los archivos que realizan estas funciones comunes y que analizaremos en
profundidad son los siguientes:
Archivo
startJVM.c
Descripción
Inicio de la maquina virtual y lectura de
bytecodes.c
cache.h
cache.c
class.c
class.h
events.c
events.c
fields.c
fields.h
frame.c
frame.h
garbage.c
garbage.h
collector.c
collectorDebug.c
global.c
global.h
hashTable.c
hashtable.h
interpret.c
interpret.h
kni.c
kni.h
loader.c
loader.h
log.c
log.h
long.h
main.h
messages.h
native.h
native.c
nativeCore.c
pool.c
pool.h
profiling.c
argumentos por la línea de comandos.
Definición de los Java bytecodes
necesario para el rediseño del intérprete de
bytecodes que emplea la KVM respecto a
la JVM.
Operaciones de caché para aumentar la
velocidad en la búsqueda de métodos de
ejecución y para el soporte de bytecodes
rápidos.
Operaciones y estructuras de datos
internas en tiempo de ejecución para
representar las clases de Java(los *.class)
Implementación del sistema de eventos.
Operaciones y estructuras de datos
internas en tiempo de ejecución para
representar las propiedades y los métodos
de las clases Java.
Operaciones de soporte de excepciones y
pila de objetos.
Colector de basura y gestión de memoria.
Variables globales y definciones.
Implementacion de una Hashtable usada
internamente por la KVM.
Interprete de bytecodes.
Soporte para la K Native Interface(KNI)
Checkeo de la carga de clases y su
formato requerido por el verificador de
archivos de clase.
Operaciones de diagnóstico y registro para
depuración/profiling.
Macros especiales para el soporte de
operaciones de 64 bits en un diseño
portable.
Opciones de compilación y propiedades
genéricas del sistema.
Mensajes de error y warnings.
Operaciones y estructuras de datos que en
tiempo de ejecución representen las
constantes de almacén.
Operaciones y declaraciones de datos para
profiling.h
property.c
property.h
rom.h
la ejecución de perfiles.
Operaciones para acceder a las
propiedades de sistema de Java.
Macros empleadas por el ROMizer
incluido dentro de la aplicación
JavaCodeCompact.
Plantillas de función para ciertas
operaciones especificas de una maquina
en particular que han de ser definidas para
cada implementación de la KVM.
Operaciones de mapeo de pila que se
emplean para soportar recolección de
basura lo mas exacta posible.
Manejo de hilos de ejecución.
runtime.h
stackmap.c
thread.c
thread.h
verifier.c
verifier.h
verifierUtil.c
verifierUtil.h
Verificador de archivos de clase.
Tabla 7.1: Ficheros comunes a todas las plataformas.
7.2.2. VmExtra.
Este directorio contiene componentes adicionales que pueden resultar útiles para
un gran número de plataformas de implementación. Estos archivos incluyen por
ejemplo:
•
•
•
•
•
Una implementación de los protocolos de comunicación para Windows y Unix
más comúnmente usados.
Un interfaz de archivos para la carga de clases en aquellas plataformas objetivo
que tengan un sistema de archivos normal.
Lectura/Creación de archivos JAR.
Implementación del Java-Level Debbuger.
Implementación de la interfaz KDWP (KVM Debug Wire Protocol).
Además se definen una serie de macros para manejo de eventos asíncronos así
como las operaciones de inicio de la maquina virtual para plataformas no basadas en
ejecución desde línea de comandos como Solaris o Windows.
A continuación listamos los archivos que realizan estas funciones:
Archivo
asyn.c
asyn.h
loaderFile.c
Descripcion
Macros para soporte de operaciones E/S
asincronas.
Puente a bajo nivel entre el sistema de
archivos, cargador de clases y el lector
JAR para aquellas plataformas que
main.c
jar.h
inflate.h
inflateint.h
inflatetables.h
jar.c
inflate.c
commProtocol.h
commProtocol.c
socketProtocol.h
socketProtocol.c
datagramProtocol.h
datagramProtocol.c
resource.c
debugger.c
debugger.h
debuggerCommands.h
debuggerStreams.h
debuggerInputStream.h
debuggerOutputStream.h
debuggerSocketIO.h
fakeStaticMemory.c
nativeSpotlet.c
nativeSpotlet.h
dispongan de un sistema de ficheros real.
Programa principal para aquellas
plataformas que tienen un sistema de
archivos y soporte de inicio de la MV
desde la línea de comandos.
Gestion de archivos JAR
Implementaciones de los protocolos de
comunicación mas comunes
(comunicaciones serie,sockets, server
sockets, datagramas).
Implementación de un protocolo basado
en flujos para lectura de recursos externos.
Implementación del Java-Level Debugger
y del KDWP.
Definiciones de gestión de memoria que
permiten a la KVM emular el modo
USESTATIC especial de Windows/Unix
para depurado.
Define las operaciones de bajo nivel para
manejo de eventos, captura de eventos del
sistema operativo e invocación de los
métodos que gestionan esos eventos.
Tabla 7.2: Ficheros adicionales a todas las plataformas.
7.2.3. VmPort.
Dentro de este directorio se incluyen el código fuente y configuraciones
particulares de cada plataforma donde se va a instalar la maquina virtual. Así en la
implementación de referencia del CLDC que estamos estudiando figuran dos ejemplos:
una versión para Windows (VmWin) y otra para Unix (VmUnix).
Así tenemos los siguientes archivos:
Archivo
machine_md.h
Descripcion
Incluye todas las definiciones de
commProtocol_md.c
datagramProtocol_md.c
socketProtocol_md.c
runtime_md.c
parámetros específicos para la
plataforma(sustituyendo a los de main.h)
Implementaciones de los protocolos de
comunicación específicos de la plataforma
en cuestión.
Implementación especifica de ciertos
aspectos de ejecución de la maquina
virtual para la plataforma objetivo.
Tabla 7.3: Ficheros específicos del sistema operativo.
7.3. Conclusiones.
Se puede observar como el código fuente correspondiente a la maquina virtual
de la plataforma J2ME esta estructurado en una serie de directorios dependiendo de la
naturaleza del contenido de los mismos. Así dentro de VmCommon se ubica el código
fuente de las operaciones de la KVM comunes a todos los sistemas operativos y
dispositivos y en VmPort(con Port el sistema en concreto, por ejemplo Win en
Windows) el código específico del sistema operativo al cual este destinado la
implementacion de la maquina virtual.
En cuanto a la estructuración genérica del código se emplea la metodología
típica de las aplicaciones construidas en C. Así cada módulo tiene:
•
•
Un fichero de cabecera que contiene la declaración de los distintos elementos:
métodos, variables, constantes, macros.
Un fichero con extensión c que mantiene el código de implementación del
módulo de las operaciones del módulo.
Hay que tener en cuenta que el código fuente de VmPort es tan solo un esqueleto
de cómo se construyen las operaciones específicas del sistema operativ. Por lo tanto
para poder adaptar de forma adecuada la maquina virtual a nuestro sistema operativo, se
hace necesario revisar y completar cuando sea necesario este esqueleto.
Descargar