Académique Documents
Professionnel Documents
Culture Documents
Aluno: Rodrigo Moreira Barbosa (aluno de mestrado) Orientador: Prof. Dr. Alfredo Goldman vel Lejbman
DCC/IME/USP
Projeto InteGrade
Aglomerados custam muito caro Em geral, passam a maior parte do tempo ociosos Ocupam muito espao Fazem muito barulho, esquentam Desperdcio de recursos ambientais Somos um pas pobre: no podemos nos dar ao luxo de jogar recursos fora desta forma
Qualquer empresa, universidade, instituio possui muitos computadores que ficam ociosos a maior parte do tempo. Por que no disponibilizar esse tempo de processamento ocioso para execuo de tarefas que exijam grande uso de recursos computacionais?
Criao de um middleware para interligar estes computadores em uma grade. InteGrade: Projeto da USP, PUC-Rio e UFMS.
Linhas de Pesquisa:
Arquitetura geral do sistema (CORBA) Segurana Monitorao de recursos (processador, memria, disco, rede, hardware especfico etc.) Identificao de padres de uso e ociosidade
entender o passado para prever o futuro
Execuo de diferentes classes de algoritmos paralelos Integrao com sistemas ubquos Criao de uma infra-estrutura para agentes mveis
Utilizar agentes mveis para encapsular tarefas longas que no necessitem se comunicar com outras tarefas. Essas tarefas constituiriam se tornariam agentes oportunistas, tentando diminuir ainda mais a ociosidade da grade e fariam a busca por mquinas ociosas de forma autnoma. O ambiente de execuo dos agentes mveis deve ser o mais leve possvel e deve minimizar a sobrecarga da migrao.
Agentes mveis so programas que podem ser despachados de um computador e transferidos para outro computador, continuando sua execuo.
Aglets atualmente o sistema de agentes mveis mais utilizado. Aglets muito bem avaliado como plataforma para agentes mveis. [AGKSW2000] Existem pessoas no IME j utilizando Aglets (Roberto Speicys Cardoso e Leo K. Ueda )
Aglets
O Aglets foi desenvolvido inicialmente pela IBM, tendo sua frente os pesquisadores Mitsuro Oshima, Guenter Karjoth, Kouichi Ono. Atualmente mantido por uma iniciativa de cdigo aberto: (aglets.sourceforge.net)
O Aglets Software Development Kit um ambiente para programao de agentes mveis em Java Aglets so objetos Java que podem mover-se de uma mquina para outra na rede. Ou seja, um aglet que executa em um dado computador, pode repentinamente parar sua execuo, despachar-se para uma uma mquina remota, e comear a executar de novo.
Aglets fornece o mecanismo de migrao fraca, j que no preserva pilha de execuo das linhas de execuo do aglet, devido a limitaes da JVM. No entanto, o estado dos objetos do aglet so mantidos.
Diagrama
com.ibm.aglet.Aglet: A classe abstrata que define os mtodos fundamentais usados para controlar a mobilidade e ciclo de vidas dos agentes mveis. Alguns mtodos elementares e sua semntica:
dispose (): Descarta o objeto dispatch (URL): Despacha o aglet para o destino especificado na URL deactivate (long duration): Instrui o aglet para armazenar a si mesmo em uma mdia persistente. getAgletInfo (): Obtm informaes sobre o aglet
com.ibm.aglet.AgletId: Objeto que mantm um identificador nico, enquanto encapsula seus detalhes de representao. com.ibm.aglet.AgletProxy: Essa interface age com um gancho para o aglet e fornece um modo comum de acessar o aglet por detrs dele. Garante a segurana do aglet e a transparncia de localizao.
AgletContext.getAgletProxies()
AgletContext.getAgletProxy(AgletID) Aglets.getAgletProxy(String contextName, AgletID)
com.ibm.AgletContext: Prov uma interface para o ambiente de execuo que o aglet ocupa. Quando o aglet despachado, a referncia para o contexto antigo desfeita e a referncia para o novo contexto atada a ele quando de sua chegada.
com.ibm.aglet.Message: Os aglets se comunicam trocando objetos desta classe. Uma mensagem tem uma String para especificar o tipo da mensagem e um objeto arbitrrio. com.ibm.aglet.Ticket: Serve para especificar como um aglet transferido: destino, protocolo, timeout, integridade, etc. Este objeto deve ser utilizado onde a URL utilizada como meio de especificar destino.
com.ibm.aglet.FutureReply: Objeto retornado por uma transmisso assncrona de mensagem. Serve para a verificao de chegada de alguma resposta.
Linhas gerais:
estender a classe com.ibm.aglet.Aglet Pode estender outra classe que implementa Aglet No pode sobrescrever os mtodos dispatch () e getAgletContext(), declarados como final. No pode implementar um construtor, visto que a classe Aglet inicializada depois da instanciao. Deve-se utilizar o mtodo onCreation (), ao invs do construtor.
void Aglet.onCreation (Object init): Mtodo chamado somente uma vez na vida do aglet, quando de sua criao. Utilizado para inicializar o aglet. void Aglet.onDisposing (): Chamado depois do dispose (). Utilizado para desalocar os recursos locais utilizados pelo aglet antes de sua morte. void Aglet.run (): Mtodo chamado sempre que uma instncia criada ou reiniciada. Bom lugar para se definir a tarefa comum. boolean Aglet.handleMessage (Message msg): Trata mensagens recebidas. Se a mensagem tratada devolve true, caso contrrio devolve false.
AgletContext.createAglet (URL codebase, String name, Object init) -> Aglet.onCreation (Object init) Aglet.clone () Aglet.dispatch (atp://aglets.ibm.com:1434/context_name) Aglet.deactivate (long timeout) Aglets no podem ser recolhidos pela JVM. Sendo assim, devem ser mortos explicitamente pelo dispose ().
Visto que a JVM no permite, por motivos de segurana, que se acesse a pilha de execuo de uma linha de execuo, impossvel armazen-la para permitir o reincio da execuo a partir dela. Sendo assim, Aglets s suporta migrao fraca, visto que no interessante desviar-se da verso padro da JVM. Aglets usa um esquema de eventos para permitir a implementao de uma ao que emula a migrao.
Mobilidade de Objetos
Quando um aglet despachado, clonado ou desativado, ele transformado em um fluxo de bytes e ento restaurado dele depois. Aglets usa o mecanismo de serializao para criar o fluxo de bytes e recriar o objeto. Estes objetos devem implementar ento a interface java.io.Serializable ou java.io.Externalizable, ou referenciados como transient.
Variveis de classe:
public class MyAglet { static int class_variable = 0; public void onCreation(Object init) { class_variable = 10; dispatch("atp://next.place"); } public void run() { if (class_variable != 10) { System.out.println("Class variable never get transferred!"); } } }
Passagem de mensagens
Aglet.handleMessage ():
MyAglet extends Aglet { public boolean handleMessage(Message msg) { if (msg.sameKind("doJob")) { doJob(); } else if (msg.sameKind("shutdown")) { deactivate(0); } } }
Now-type:
Future-type:
FutureReply future = proxy.sendAsyncMessage(new Message("question")); int num_task = 10; // do private job at most 10 times while waiting for the result. while(future.isAvailable() == false && num_task-- >0) { doPrivateJob(); } System.out.println( (String)future.getReply() );
Oneway-type: Nos outros tipos de envio, se um objeto envia uma mensagem para si mesmo, ela colocada no incio da fila. Com a Oneway, a mensagem colocada sempre no fim da fila.
proxy.sendOnewayMessage (new Message (question));
System.out.println(ex.getException());
}
Mensagens em Aglets suportam o recurso de enviar cincia, antes mesmo de terminar de tratar a mensagem.
public boolean handleMessage(Message msg) { if (msg.sameKind("accessDB")) { openDB(); // pseudo code Object reply = accessDB(msg.getArg()); msg.sendReply(reply); closeDB(); return true; // i know this message... } return false; // false, otherwise }
Mensagens de Sincronizao
public StackAglet extends Aglets { static int capacity = 10; Object stack[] = new Object[capacity]; int num = 0; public handleMessage(Message msg) { if (msg.sameKind("push")) { push(msg); } else if (msg.sameKind("pop")) { pop(msg); } else if (msg.sameKind("isFull")) { msg.sendReply( num == capacity); } else if (msg.sameKind("isEmpty")) { msg.sendReply( num == 0 ); } else return false;
Camada de comunicao:
Derivada do padro OMG, MASIF (Mobile Agent System Interoperability Facility)
Referncias
[AGKSW2000] Using Mobile Agents in Real World: A Survey and Evaluation of Agents Plataforms (Josef Altmann et. al)