WirelessBR |
WirelessBr é um site brasileiro, independente, sem vínculos com empresas ou organizações, sem finalidade comercial, feito por voluntários, para divulgação de tecnologia em telecomunicações |
|
Pesquisa
e Projeto de uma Aplicação em Computação Móvel para |
||
Autora: Líliam Carla Gaiotto Maluta |
Capítulo
3 (Cont)
3.4 Sistemas de Agentes Móveis
Um
sistema de agentes móveis é um framework computacional que implementa
o paradigma de agentes móveis (FILHO,
2000). Este ambiente provê
suporte a criação, ativação, desativação e gerenciamento de agentes,
incluindo mecanismos para migração, comunicação, persistência e recuperação
de falhas.
Este
tipo de sistema deve incorporar certas características ao nível de sistema,
para que possa assistir ao desenvolvimento de agentes de sofware e sistemas
multi-agentes[5]
(SILVA, 2001) como as seguintes:
Mobilidade
-
um agente tem completa
autonomia de trafegar entre os diferentes hosts de uma rede, sem que a
aplicação que o criou tenha qualquer conhecimento disso. Desta feita, se
o host no qual estiver executando for desligado, seu estado é perdido
prejudicando todo o sistema. Assim, seria interessante que o sistema
habilitasse um mecanismo de recuperação e um protocolo transparente à
mobilidade;
Coordenação
-
Agentes executam de
forma cooperativa e sincronizada a fim de evitar duplicidades e outros
problemas, mas para que isso ocorra é necessário algum tipo de coordenação.
É muito difícil garantir coordenação global sem um controle global
específico e este não é fácil de implementar devido à dinâmica e
autonomia dos agentes;
Comunicação
-
O próprio sistema
deveria implementar um protocolo de comunicação interfaceando agentes,
possibilitando a troca de informações;
Persistência
-
Agentes tem autonomia
para tornarem-se ativos ou inativos, armazenando seus estados de forma
persistente. Quando é posto para ‘dormir’, o sistema deveria
assegurar que o mesmo voltasse a atividade.
3.4.1 Classificação de Sistemas
Sistemas de agentes móveis podem ser caracterizados de acordo com a linguagem de programação que suportam. Segundo SCHOORL (1999) a maioria das implementações tende a ser em Java, embora outras linguagens também sejam usadas, devido aos atrativos da linguagem como suporte a multi-plataformas, serialização, carregamento dinâmico de objetos, e adoção da máquina virtual Java (JVM).
3.4.1.1 Sistemas de múltiplas linguagens
Alguns sistemas não definem uma
linguagem de programação específica, pretendendo prover suporte a várias,
permitindo ao programador selecionar a mais apropriada à sua aplicação.
Entre tantos temos os abaixo relacionados.
D’Agent.
Anteriormente conhecido
como Agent Tcl, suporta agentes escritos em Tcl, Java e Scheme e agentes
estacionários em C e C++. D’Agent implementa um servidor multi-thread,
com cada agente executando num processo separado, o que simplifica a
implementação, mas gera o overhead da comunicação interprocessos. Este
servidor inicializa um conjunto de processos interpretadores quando é dado o
boot e encaminha os agentes ao primeiro interpretador livre. Quando o agente
termina, o interpretador não morre, ficando à disposição de agentes
eventuais.
D’Agent
apenas protege as máquinas de ataques de agentes, mas não o contrário.
Agentes e mensagens contem uma assinatura e são criptografados entre máquinas.
Para cada recurso do sistema existe um controlador. Trabalhos recentes
realizados neste sistema recaem sobre escalabilidade e suporte a computação
móvel.
Ara. Suporta agentes escritos em Tcl, Java e C/C++. Agentes C/C++ são compilados em um bytecode interpretado chamado MACE. Ara provê uma instrução go que captura o estado do agente e o transfere para a máquina destino, como também um checkpoint local onde o agente detecta seu estado interno.
O
agente servidor e os interpretadores Tcl, Java e MACE rodam dentro de um
processo UNIX. Agentes iniciam a execução sempre num novo thread e
quando desejam comunicar-se, transferem a estrutura da mensagem ao outro
agente, não utilizando comunicação interprocessos.
Os
agentes criam ambientes virtuais com regras de admissão em cada máquina, as
quais são responsáveis por rejeitar ou não agentes entrantes. Quando existe
aceitação, de acordo com as credenciais podem ser permitidos acessos a
arquivos e memória, por exemplo.
3.4.1.2 Sistemas baseados em Java
É
notável o uso da linguagem Java em sistemas de agentes móveis mais recentes.
O advento desta linguagem vem colaborar para o impulso da tecnologia de
agentes móveis, pois através da mesma pode-se desenvolver aplicações
completas que executem em computadores de plataformas diferentes,
desenvolvendo um único código fonte (RADTKE, 2000).
Aglets.
Segundo KARJOTH
(1997), é um ambiente para desenvolvimento de sistemas de agentes móveis
desenvolvido pela IBM. Não requer qualquer alteração da máquina virtual
Java ou de código nativo, permite o carregamento dinâmico de classes necessárias
à execução de um agente e implementa um modelo (callback) orientado
a eventos.
Para
realizar a interação entre os agentes utiliza-se de mensagens assíncronas
ou síncronas, notificação de eventos para agentes do mesmo contexto e
chamada a métodos de outros aglets.
Concórdia.Um
sistema que prioriza segurança e confiabilidade. Como vários sistemas, move
o código e os dados, mas não o estado do agente. Os agentes têm um itinerário
a ser seguido, com várias paradas onde podem escolher os métodos a serem
executados. Agentes, eventos e mensagens podem ter que aguardar até uma máquina
estar disponível, portanto, para prevenir perdas estes dados são
armazenados. Para prevenir falsificações e ataques de agentes, usa-se
criptografia e autenticação. Suporta mecanismos de checkpoint para
tolerância à falhas.
Voyager.
Apresenta um
ambiente integrado com CORBA[6].
A interação é feita através de objetos de referência proxy. Quando um
objeto migra, proxies são deixados no caminho a fim de redirecionarem
mensagens ao novo destino. Agentes podem mover-se autonomamente. Como no Concórdia,
código e dados são movidos, o estado não, e os agentes podem tornar-se
persistentes. Não oferece mecanismos de segurança contra agentes não
autorizados.
3.4.1.3
Outros
sistemas
Messengers.
Usa código móvel,
não especificamente agentes, para construir sistemas distribuídos. Neste
sistema utiliza-se um sistema operacional mensageiro, responsável por receber
e enviar mensagens contendo dados e código.
Telescript. Primeiro sistema comercial de agentes móveis, seu sucessor, porém com plataforma Java é o Odyssey. Em cada site da rede roda um servidor entre os quais os agentes devem escolher em qual entrar. Os servidores devem autenticar os agentes e então definir direitos e permissões de acesso. Agentes que violarem as regras são terminados. Além disso, servidores armazenam dados dos agentes para possíveis restaurações.
3.4.2 Agentes em Java
De
acordo com DELGADO (1999), o código Java é simples, seguro, compacto e por
ser orientado a objetos permite reuso e formas coerentes de explorar recursos
como interfaces, encapsulamento e polimorfismo. JAVA é uma linguagem de
programação portável, robusta, de certa forma segura, com suporte à
programação distribuída e recursos para desenvolvimento de aplicações
multimídia (LEWANDOWSKI, 1998).
JAVA
vem estabelecer um novo paradigma para gerenciamento de aplicações
cliente-servidor, por sua rapidez no desenvolvimento de aplicações (e
atualizações) e facilidade de distribuição do código cliente (aplicações
rodam em qualquer sistema operacional).
Java
é uma linguagem dinâmica e uma candidata natural ao desenvolvimento de
aplicações em rede. OSHIMA e LANGE (1998) descrevem as características
de Java em perspectiva com a concepção de um ambiente baseado em agentes móveis,
como relacionado a seguir.
Independência
de plataforma
- Sua portabilidade é devida a ser uma linguagem compilada e
interpretada, isto é, ao compilar um programa escrito em JAVA, é gerado
um código intermediário (bytecode),
não um código de máquina, que é interpretado na plataforma onde será
executada a aplicação, pela máquina virtual JAVA (JVM). Isto permite
criar agentes móveis sem conhecimento prévio de qual tipo de
computadores no qual irão executar.
Execução segura - Java possui diversos mecanismos de segurança. Programas Java não são permitidos realizar casting de tipo ilegais ou aritmética de ponteiro, muito menos violar a semântica básica da linguagem. Desta feita, é possível construir um ambiente seguro a ataques de agentes móveis mal intencionados. Todo código carregado por classes Java está sujeito a restrições de segurança.
Carga
dinâmica de classes
– classes são definidas em tempo de execução, fornecendo um espaço
de endereçamento privado para cada agente. Este mecanismo é extensível
e permite que classes possam ser carregadas via rede.
Programação
multithread – permitindo
que agentes executem em seu próprio processo, ou thread de execução,
obtém-se a implementação de agentes como entidades autônomas. Como
Java não implementa programação multithread, a interação é realizada
por meio de primitivas de sincronização.
Serialização
de objetos -
Este mecanismo permite que objetos sejam empacotados com informações
suficientes para reconstrução posterior. Esta é uma característica
chave para implementação de agentes móveis.
Reflexão
- Java possui mecanismos para obter informações sobre classes
carregadas, permitindo construir agentes com maior conhecimento de si próprio
e de outros agentes.
Apesar
de apresentar aspectos positivos para a implementação de agentes móveis, a
linguagem Java apresenta alguns problemas:
Suporte
inadequado para controle de recursos
- Recursos podem ser alocados inadvertidamente para agentes, e pode
ocorrer de permanecerem alocados após serem despachados para uma outra máquina,
devido à falta de controle.
Referências
sem proteção
- Java possibilita que métodos públicos de um objeto sejam acessados por
outros. Proteção é um fator crítico para implementação de agentes, o
que pode ser amenizado pelo uso de um objeto proxy entre os agentes
que irão interagir.
Nenhum objeto é proprietário de referências – Qualquer objeto pode referenciar outro. Enquanto existirem referências a um objeto, o mesmo não é descartado pelo coletor de lixo, tornando possível que um agente permaneça no sistema caso um outro agente o referencie. A utilização de um objeto proxy pode contornar este problema.
Nenhum suporte para preservação e
recuperação do estado de execução - Java não possui
mecanismos para salvar o estado de execução de um objeto, fazendo com
que utilize atributos internos e eventos externos para realizar esta
tarefa. Sem isso, é impossível de um agente móvel conseguir restaurar
seu estado de execução.
3.5 Uso da rede www x uso da rede com Agentes
A atual WWW, em sua maioria,
encontra-se utilizando o paradigma de redes passivas, onde o usuário é
soterrado com dados e informações inúteis e desvia-se com facilidade de seu
objetivo original. Neste contexto a função da rede se concentra em enviar
pacotes de um ponto a outro, executando roteamento, controle de
congestionamento e implementando algum tipo de qualidade de serviço (PSOUNIS,
1999).
Assim, têm sido identificados problemas como a dificuldade de integrar novas tecnologias e padrões numa infra-estrutura de rede compartilhada, má performance devido a operações redundantes em algumas camadas do protocolo e dificuldade de acomodar novos serviços no modelo de arquitetura existente.
Desta feita, surgiu a idéia de conceder ao usuário, meios de programar a rede e habilitar roteadores e switches a processar dados, cujo conceito se dá o nome de redes ativas. Programas trafegam pela rede dentro de pacotes de rede e são executados em nodos intermediários resultando na modificação de seu estado e comportamento.
Conceitualmente, estes ‘pacotes ativos’ nos remetem à noção de agentes móveis. O paradigma de agentes móveis propõe tratar a rede como múltiplos ambientes de agentes e os agentes como entidades que se movem executando tarefas de usuários (TENNENHOUSE, 1997). As características são similares, porem, redes ativas visualizam a rede como uma coleção de nodos e pacotes ativos. A idéia básica é que uma rede ativa oferece aplicações de agentes móveis como sua funcionalidade básica.
Em uma rede com agentes, tarefas de busca são delegadas a agentes, os quais fornecem uma visão personalizada da rede (informações que interessam). O usuário pode concentrar-se na análise dos dados, pois a informação é previamente filtrada através de critérios de busca.
3.6 Uso de Agentes na Medicina
Têm sido desenvolvidas aplicações no campo da Medicina utilizando o paradigma de agentes. Talvez a mais importante delas seja o sistema Guardian (1996). Direcionado ao monitoramento de pacientes em unidades de cuidados intensivos cirúrgicos, seu suporte é provido pela colaboração de especialistas, cada um em seu domínio, interagindo e compartilhando dados e conhecimento com enfermeiras responsáveis pelo contínuo monitoramento do paciente.
Este sistema distribui a monitoração entre três tipos de agentes: perceptivos – responsáveis pela interface entre o sistema e o exterior; reativos (reasoning) – responsáveis por organizar o processo de decisão e um agente de controle, organizados em hierarquias.
HUANG et al (1995) apresentam um protótipo para uma aplicação específica de gerenciamento distribuído de dados de pacientes com câncer entre hospitais, paramédicos, farmácias e organizações de cuidado doméstico. O uso de agentes é devido a apresentarem distribuição de dados e controle, incerteza de informação e ambiente dinâmico. Usa-se Prolog para representação do conhecimento e implementação de regras de produção para controle dos dados. Agentes comunicam-se por meio de um sistema de e-mail.
Uma outra implementação, o patient advocate (MIKSCH et al, 1996),
apresenta um modelo de assistente inteligente, centrado no paciente. Tem como
função a assistência no gerenciamento das condições físicas, na interação
com a rede de informações e no acionamento de mecanismos para tratamento de
situações críticas (envio de mensagens). São aplicadas tecnologias
cooperativas baseadas em conhecimento, para interpretar dados, derivar
recomendações e explicações, e gerar interfaces de acordo com a
necessidade e preferência de cada paciente. É implementado em Java.
Em MEA (2001) é descrito um sistema para análise e desenvolvimento de sistemas de telemedicina baseado no paradigma de agentes. É oportunizado suporte a diagnóstico colaborativo em patologia, por meio do intercambio de imagens microscópicas e de dados dos pacientes. Porém, a plataforma FIPA demonstrou ser um obstáculo quando muitas trocas com agentes externos foram efetivadas, enquanto que o fato de usar uma linguagem genérica causou overhead, evidenciando a necessidade de grandes recursos.
Mais especificamente em agentes móveis, MORTON e BUKHRES (1997) realizam um
trabalho envolvendo assistência remota de urgência em ambulâncias, com a
adição de um agente estação base (BSA), que age como intermediário aos
hosts móveis desconectados. Neste sistema, evidencia-se o problema do
transporte de informações, como também o tempo no qual os resultados são
gerados e enviados. Numa situação de emergência é impraticável que um
computador móvel fora de uso passe ao modo sleep[7],
pois é importante reter a conexão à rede para proporcionar respostas rápidas.
Por fim, o sistema DITIS (2000) visa suportar a criação, gerenciamento e coordenação de equipes médicas virtuais com o intuito de assistir a pacientes com câncer em ambiente doméstico, e se necessário, locomoção dos mesmos para tratamento com pessoal especializado, com retorno posterior. Pretende oferecer serviços personalizados, dedicados e privativos no conforto do lar, melhor qualidade de vida e economia financeira. Consiste na implementação de agentes na parte fixa da rede e WAP na móvel. O acesso aos dados dos pacientes, bem como exames e marcação de consultas podem ser feitos por meio do celular, o que oportuniza a criação de uma espécie de médico de família, semelhante ao praticado no Brasil.
[5] O sistema é designado e implementado como vários agentes interagindo na resolução de problemas.
[6] CORBA (Common Object Request Broker Architecture), um modelo padrão de arquitetura baseado em objetos distribuídos, cujo objetivo é permitir a interação entre componentes heterogêneos de aplicações distribuídas, foi definido pelo OMG (Object Management Group), visando solucionar eventuais incompatibilidades entre plataformas, como também, garantir o reaproveitamento de toda base de dados. CORBA separa a interface das implementações do objeto, o que provê independência de linguagem e plataforma, capacitando especificações abertas suportarem implementações proprietárias (OMG, 1999).
[7] O computador móvel mantém a conexão celular com a rede, mas não é capaz de receber ou submeter transações.