Mobilidade de Código com μcode Projeto Giga Alexandre Lages [email protected] 1 Sumário Introdução Agentes Móveis μcode 2 Introdução Um Agente é um programa cujo código de execução possui recursos capazes de armazenar dados, transferir-se de um local para outro da rede e reiniciar sua execução. Envolve a instalação de código em uma máquina remota; Applets e Servlets como exemplos; Característica principal: pouca utilização da rede; 3 Introdução Vantagens em relação a abordagem cliente/servidor: Economia de espaço; Redução do tráfego; Interação assíncrona e em tempo real; Robustez; Operação em ambientes heterogêneos; Extensibilidade em tempo real; Fácil atualização; 4 Agentes Móveis Um sistema de agentes móveis é composto de: Código do agente; Estado de execução do agente; Contexto de execução; Mecanismo de deslocamento; Permissões de acesso; 5 μcode API desenvolvida em Java que fornece uma série de primitivas de mobilidade de código. Características: Código pequeno; Execução “leve”; Projeto modular; Suporte para vários métodos de realocação de classe; Suporte a compressão; 6 μcode Mobile Agent System Segurança JVM Comunicação Sem-JVM Hardware/SO Persistência Persistência Segurança Eventos Comunicação Mobile Agent System X μcode: Mobile Agent μcode JVM Hardware/SO 7 μcode Desenvolvimento baseado pelas seguintes motivações: Ênfase em mobilidade do código: características adicionais através da adição de módulos; Permite especificar dinamicamente ou individualmente a estratégia de alocação de classes; Tamanho do código pequeno; Transparente para o usuário; 8 μcode Ambiente de execução: Única unidade de Mobilidade Realocação do código e do estado Extração das classes e objetos Espaço para as classes e objetos Group Group μserver Group handler μserver Class Space Group handler Class Space μcode μcode JVM JVM Hardware/SO Hardware/SO 9 μcode Resolução de classes: Group μserver Group handler Class Space μcode JVM Grupo com uma classe C precisa da classe C1: 1. Classe C1 pertence a API do java ou μcode; 2. Classe C1 pertence ao ClassSpace privativo do grupo; 3. Classe C1 pertence ClassSpace compartilhado; 4. Tenta realizar o download da classe C1 de um outro μserver; 5. Exceção é gerada; Hardware/SO 10 μcode A unidade de migração do μcode é um grupo, composto por um conjunto de classes e objetos. As threads geradas a partir de classes recebidas por um μserver são mantidas em um espaço de classes privativa, de forma a evitar conflitos de nomes com outras classes locais. A tarefa de extrair as classes é feita pelo group handler; É possível publicar classes em um espaço de classe compartilhado associado ao μserver, de forma que as mesmas possam ser acessadas por outras classes do próprio μserver ou de μserver remotos. 11 μcode Vantagens de utilização do μcode: Minimização: conjunto mínimo de primitivas e abstrações; Extensibilidade: não requer processamento adicional significativo em relação à máquina virtual; Flexibilidade: seleção de diferentes estratégias para o mesmo código em diferentes situações; Portabilidade; 12 μcode public class Clone implements Runnable, java.io.Serializable { public void run() { while (true) { System.out.println("Clone i = " + i++); try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } } } public static void main(String[] args) { try { Clone r = new Clone(); new Thread(r).start(); MuServer s = new MuServer(); new Launcher(s).parseArgs(args, 1); new Relocator(s).copyThread(“localhost”, r, Relocator.FULLCLOSURE, null, false); System.out.println(“Fim..."); } catch (Exception e) { e.printStackTrace(); } } 13 } μcode Classe Relocator prover as seguintes primitivas para a realocação de classes e objetos: copyThread: permite a cópia de uma thread de um μserver para outro; spawnThread: permite gerar uma thread para um outro μserver; shipClasses: permite enviar uma classe para o ClassSpace de um outro μserver; fetchClasses: permite buscar uma classe de um outro μserver; 14 μcode Limitações do μcode: Suporte para apenas mobilidade fraca: salvamento somente do estado em relação aos dados, mas não o seu estado de execução; O núcleo do μcode não suporta nenhuma forma de comunicação direta entre duas threads móveis. Pode ser resolvido através do uso de uma estrutura de dados compartilhada; 15 μcode Problemas no desenvolvimento do μcode: Falta de atualização por parte dos desenvolvedores; JDK 1.1; 16