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