Download Maquina Virtual

Document related concepts
no text concepts found
Transcript
Maquina Virtual
La máquina virtual de Java o JVM es un
entorno de ejecución para aplicaciones de
Java, cuya finalidad es la de adaptar los
programas
Java
compilados
a
las
características del sistema operativo donde se
van a ejecutar.
Proceso de compilación y ejecución de aplicaciones Java
Código Fuente
.java
Compilación
Byte Codes
.class
Ejecusión
VM
(Windows)
VM
(linux)
VM
(otro)
S.O. Windows
S.O. Linux
Otro S.O.
Todo programa Java está organizado en clases, éstas se codifican
en archivos de texto con extensión .java. Cada archivo de código
fuente . Java puede contener una o varias clases , aunque lo
normal es que haya un archivo por clase.
Cuando se compila un .java se genera uno o varios archivos .class
de código binario (uno por cada clase) denominados bytecodes,
que son independientes de la arquitectura.
Dicha independencia supone que los bytecodes no pueden ser ejecutados
directamente por ningún sistema operativo, es durante la fase de ejecución
cuando los archivos .class se someten a un proceso de interpretación,
consistente en traducir los bytecodes a código ejecutable por el sistema
operativo para el que ha sido diseñada.
Los sistemas de programación como PVM (Máquina virtual
paralela) y Linda se valen de grupos de máquinas heterogéneas
interconectadas para proporcionar un entorno de computación
paralela
Estos sistemas permiten a los usuarios resolver problemas de
gran tamaño en redes de estaciones de trabajo creando la
ilusión de una sola máquina paralela.
La unidad básica de cómputo en PVM se llama tarea (task) y es análoga a un
proceso de UNIX. Un programa PVM invoca funciones de biblioteca PVM para
crear tareas.
Las tareas que cooperan ya sea mediante comunicación o sincronización
se organizan en grupos llamados cómputos (computation). Pvm maneja
comunicación directa, difusión y barreras dentro de un cómputo
Entrada y partición
Cómputo 2
Cómputo 1
Tarea
Salida y exhibición
cómputo
Para ejecutar una aplicación PVM, lo primero que debe hacer el usuario es
designar el conjunto de máquinas o nodo que constituyen la máquina virtual
y luego inicia el demonio de control de PVM, pvmd, en cada uno de estos
nodos
El demonio de control se comunica con la consola de usuario y
se encarga de la comunicación y control de las tareas en su
máquina.
En la siguiente figura se muestra cómo se establece la correspondencia entre una
aplicación y la máquina virtual. Las tareas que constituyen un cómputo lógico no
necesariamente se asignan al mismo nodo; podrían distribuirse entre todos los nodos
de la máquina virtual.
Nodo 1
Nodo 2
PVMD
PVMD
Nodo 3
PVMD
Entrada y partición
PVMD
Salida y exhibición
Consola del usuario
La máquina virtual no muy paralela (NTPVM)
Es un despachador que posee muchas de las características de un demonio de control
PVM, pvmd. El despachador NTPVM se encarga de crear y controlar tareas, como se
muestra en la siguiente figura
Entrada estándar
Salida estándar
Despachador
NTPVM
Nodo
Tarea
El despachador recibe solicitudes a través de su entrada estándar y responde a través de su
salida estándar. (Posteriormente, la entrada y la salida estándar se pueden redirigir a puertos de
comunicación de la red.) El despachador podría recibir una solicitud pidiéndole crear una tarea o
enviar de nuevo datos a una tarea que esta bajo su control
Una tarea no es más que un proceso que ejecuta un programa especificado. Cada
tarea se identifica mediante un ID de cómputo y un ID de tarea. Cuando el
despachador recibe una solicitud para crear una tarea con un ID de cómputo y un ID
de cómputo y un ID de tarea determinados, crea un par de entubamientos y bifurca
un hijo para ejecutar la tarea.
Entrada estándar
[0]
Salida estándar
Despachador
NTPVM
[1]
[writefd]
[writefd]
[0]
[1]
Tarea
En la figura se muestra la capa de comunicación entre una tarea y su despachador. El
entubamiento que lleva la comunicación a la tarea hija se etiqueta con writefd en el extremo del
despachador. El hijo redirige su entrada estándar a este entubamiento. De forma similar, el
entubamiento que lleva la comunicación del hijo al despachador se rotula con readfd en el
extremo del despachador. El hijo redirige su salida estándar a este entubamiento.
El despachador se comunica con el mundo exterior leyendo los
paquetes de su entrada estándar y escribiendo paquetes a una
salida estándar. El despachador podría recibir un paquete
indicándole que debe crear una tarea nueva, o un paquete de
datos destinado a una tarea que ésta bajo su control. El
despachador envía a su vez las salidas generadas por las tareas a
su propia salida estándar en forma de paquetes.
Typedef enum ptype {START_TASK, DATA, BROADCAST, DONE, TERMINATE, BARRIER} packet_t;
Typedef struct {
int comp_id;
int task_id;
packet_t type;
int length;
} task_packet_t;
Typedef struct {
int comp_id;
int task_id;
int writedf;
int readfd;
int total_packs_sent;
int total_bytes_sent;
int total_packs_recv;
pid_t task_pid
int barrier;
int end_of_input
} task_t;
/* ID de computo para la tarea */
/* ID de tarea para la tarea */
/* contiene fd de despachador  hijo */
/* contiene fd de hijo  despachador */
#define MAX_PACK_SIZE 1024
#define MAX_TASKS 10
/* ID de proceso de la tarea bifurcada */
/* número de barrera o -1 si no está en la barrera */
/* true si ya no hay entradas en la barrera */
•Un ID de cómputo
•Un ID de tarea
•Un tipo de paquete
•La longitud de la información del paquete
•La Información del paquete