Download Movilidad de Código - Programación Distribuida y Tiempo Real

Document related concepts
no text concepts found
Transcript
Programación Distribuida y Tiempo Real
Movilidad de Código
1. Movilidad – Migración de Código
1.1. Hasta ahora: múltiples formas de transferir información/datos
1.2. Movilidad: transferir programas o código ejecutable.
1.3. Se usan como sinónimos (aunque necesariamente no lo son)
1.3.1. Movilidad de código
1.3.2. Migración de código/procesos
2. Razones para migrar código
2.1. Aumentar la eficiencia: repartir carga computacional y/o disminuir carga de la
red de comunicaciones
2.2. Permitir la carga dinámica de código: código no conocido a priori o código
por demanda y/o mejorar la distribución/instalación del código en sistemas
grandes y/o muy distribuidos
2.3. Últimamente, más relacionado con la eficiencia: mejorar la capacidad o
velocidad de respuesta para un usuario
3. El término “migración” se ha utilizado históricamente en el contexto de
procesamiento distribuido/paralelo para balance de carga: un proceso en
ejecución en una computadora se transfiere a otra computadora para continuar.
Programación Distribuida y Tiempo Real – Notas de Clase
4. Lo que tiene un proceso en ejecución (1998_fuggetta_picco_vigna_understanding.pdf)
4.1. Código: binario ejecutable de un proceso
4.2. Estado
4.2.1. Estado de ejecución: recursos no compartidos y propios de la ejecución,
como la pila, registros del procesador y puntero de programa
4.2.2. Espacio de datos: recursos a los que se accede/utiliza (en t de ejec.)
como archivos o impresoras
5. Modelos de movilidad (o también llamados de migración)
5.1. Según lo que se transfiere (también conocido como tipos de movilidad)
5.1.1. Débil: solamente el código de un proceso. No es un proceso en
ejecución sino el código ejecutable
5.1.2. Fuerte: código y estado del proceso. Es un proceso en ejecución, es lo
que tradicionalmente se llama migración
5.2. Según quién inicia la movilidad
5.2.1. Proactiva: el origen del código inicia la transferencia
5.2.2. Reactiva: el destino del código inicia la transferencia
6. Relación entre “sincronismo” y tipos de movilidad
7. En el caso de movilidad débil: dónde (contexto) se ejecuta el código móvil
7.1. En “el” proceso receptor, se transfiere una porción de código, ej: JavaScript
7.2. En un proceso separado, ej: Applet
Programación Distribuida y Tiempo Real – Notas de Clase
8. En el caso de movilidad fuerte: qué se hace con el proceso original
8.1. Migrar: el proceso literalmente se “mueve” y deja de existir en el sistema
inicial/original
8.2. Clonar: se crea una copia exactamente igual en otro sistema y ambos
coexisten
9. El gráfico (quizás clásico) de movilidad de código (Tanenbaum, 2Ed.):
(notar que se utiliza la expresión “code migration” en el título de la Figura y luego
“mobility” en toda la Figura)
Programación Distribuida y Tiempo Real – Notas de Clase
10. En el caso de movilidad fuerte, existe un problema a resolver con los recursos
10.1. Descripción en Tanenbaum, 2ed
10.2. No es el único problema ¿cuál/es otro/s?
By identifier: id del recurso, conocido en todo el SD (URL)
By value: lo importante es el valor del recurso, ej: bibliotecas dinámicas
By type: más cercano al hardware, monitor, impresora, etc.
Unattached: no adjunto, no enlazado, desvinculado de otros o individual, simple
Fastened: adjunto, interrelacionado, vinculado a otros o complejo, un conjunto de
Fixed: fijo, propio de la máquina
11. El caso más frecuente (sistemas en producción) es el de movilidad débil
11.1. ¿Por qué?
11.2. Se mirará con más atención este tipo de movilidad
Programación Distribuida y Tiempo Real – Notas de Clase
12. Agentes y JADE
12.1. Agente: tiene mucha relación con IA, nos concentraremos en móviles
12.2. JADE: Java Agent DEvelopment Framework, http://jade.tilab.com/
12.3. Agente: Entidad autónoma, con capacidad de decisión y comunicación
12.4. Entidad autónoma: con ciclo de vida. El de JADE:
13.2. Móviles: + movilidad
13.3. Contenedores y Plataformas en general
13.3.1. Contenedor: ambiente de ejecución inmediato del agente (acceso rec.)
13.3.2. Plataforma: conjunto de contenedores
Programación Distribuida y Tiempo Real – Notas de Clase
13.4. Contenedores y Plataformas JADE
LADT: Local Agent Descriptor Table
GADT: Global Agent Descriptor Table
DF: Directory Facilitator
AMS: Agent Management System
14. JADE: instalación y ejecución
14.2. JADE-all-4.3.0.zip + unzips (JADE-bin…zip)
14.3. Prueba de funcionamiento de la instalación (directorio jade)
java -cp lib/jade.jar jade.Boot -gui
(en algunos casos) java -cp lib/jade.jar jade.Boot -gui -local-host 127.0.0.1
Programación Distribuida y Tiempo Real – Notas de Clase
15. JADE: primer agente (a guardar en myexamples)
import jade.core.*;
public class FirstAgent extends Agent
{
// Ejecutado por única vez en la creación
public void setup()
{
Location origen = here();
System.out.println("\n\nHola, agente con nombre local " + getLocalName());
System.out.println("Y nombre completo... " + getName());
System.out.println("Y en location " + origen.getID() + "\n\n");
}
}
mkdir classes
javac -classpath lib/jade.jar -d classes myexamples/FirstAgent.java
java -cp lib/jade.jar:classes jade.Boot -gui -agents thefirst:FirstAgent
“;” fuera de Linux...
Algunas acciones sobre el agente: clonar (¿por qué no imprime?)
Ya es móvil, creando otro contenedor (no “Main-Container”)
java -cp lib/jade.jar:classes jade.Boot -gui -container -host localhost
(la opción -host indica dónde está el Main-Container)
Programación Distribuida y Tiempo Real – Notas de Clase
16. JADE: primer agente que se mueve proactivamente
import jade.core.*;
public class SecondAgent extends Agent
{
// Ejecutado por única vez en la creación
public void setup()
{
Location origen = here();
System.out.println("\n\nHola, agente con nombre local " + getLocalName());
System.out.println("Y nombre completo... " + getName());
System.out.println("Y en location " + origen.getID() + "\n\n");
// Para migrar el agente
try {
ContainerID destino = new ContainerID("Main-Container", null);
System.out.println("Migrando el agente a " + destino.getID());
doMove(destino);
} catch (Exception e) {System.out.println("\n\n\nNo fue posible migrar el
agente\n\n\n");}
}
// Ejecutado al llegar a un contenedor como resultado de una migración
protected void afterMove()
{
Location origen = here();
System.out.println("\n\nHola, agente migrado con nombre local " + getLocalName());
System.out.println("Y nombre completo... " + getName());
System.out.println("Y en location " + origen.getID() + "\n\n");
}
}
Métodos doMove( ) y afterMove ( )
java -cp lib/jade.jar:classes jade.Boot –gui
java -cp lib/jade.jar:classes jade.Boot -gui -container -host localhost -agents
thesecond:SecondAgent
¿Qué debería pasar?
17. JADE: lo que queda
17.2. Casi todo…
JADE TUTORIAL. JADE PROGRAMMING FOR BEGINNERS
JADE PROGRAMMER’S GUIDE
17.3. Comportamientos (Behaviour)
17.4. Comunicación entre agentes
Programación Distribuida y Tiempo Real – Notas de Clase