Upload
internet
View
105
Download
1
Embed Size (px)
Citation preview
MobiCS: Um exemplo de usoMobiCS: Um exemplo de uso
Ricardo Couto A. da RochaRicardo Couto A. da Rocha(*)(*)
[email protected] [email protected]
[email protected]@altavista.com
DCC-IME-USPDCC-IME-USPOrientador: Markus EndlerOrientador: Markus Endler
(*) Atualmente no Centro de Pesquisas da Xerox (ES)(*) Atualmente no Centro de Pesquisas da Xerox (ES)
Uso do MobiCSUso do MobiCS
Usuário implementa classes que definem os protocolos Usuário implementa classes que definem os protocolos a serem simulados, o ambiente de rede e o modelo de a serem simulados, o ambiente de rede e o modelo de simulação desejado.simulação desejado.
Pacotes MobiCS
Protocolos Modelos de Simulação
Simulação
estende
estende
estende
instanciainstancia
Pacotes MobiCSPacotes MobiCS
Principais pacotes para o usuário MobiCS:Principais pacotes para o usuário MobiCS: mobics.ppi mobics.ppi programação de protocolos programação de protocolos
mobics.ppi.protocolmobics.ppi.protocol mobics.ppi.messagemobics.ppi.message
mobics.networkmobics.network programação dos elementos programação dos elementos de redede rede
mobics.simulation mobics.simulation programação do programação do modelo de simulação e configuração do ambiente modelo de simulação e configuração do ambiente de rede de rede mobics.simulation.DetermSimulationmobics.simulation.DetermSimulation mobics.simulation.StochSimulationmobics.simulation.StochSimulation
Outros pacotes MobiCS Outros pacotes MobiCS
mobics.exceptionmobics.exception define exceções define exceções usadas pelo simulador e programador de usadas pelo simulador e programador de protocolosprotocolos
mobics.controllermobics.controller implementa as implementa as máquinas de simulação:máquinas de simulação:
mobics.controller.deterministicmobics.controller.stochastic
mobics.util mobics.util classes adicionais classes adicionais
Sequência GeralSequência Geralde Passos de Passos Implementação do protocolo Implementação do protocolo estender classes básicas estender classes básicas ProtocolProtocol e e MessageMessage
Criação do ambiente de CM simulado Criação do ambiente de CM simulado estender classes estender classes básicas básicas MssMss, , MhMh, ..., ...
Criação do(s) cenário(s) de simulaçãoCriação do(s) cenário(s) de simulação cenários determinísticos de teste cenários determinísticos de teste descrever script descrever script
determinístico determinístico avaliar funcionamento do protocolo avaliar funcionamento do protocolo Escolha dos cenário aleatório Escolha dos cenário aleatório simulação estocástica simulação estocástica avaliação avaliação
do desempenhodo desempenho Estender a classe Estender a classe DetermSimulationDetermSimulation (ou (ou StochSimulationStochSimulation) definindo o ambiente de rede ) definindo o ambiente de rede (elementos simulados & topologia, outros conceitos)(elementos simulados & topologia, outros conceitos)
Implementar um programa Java que cria e inicia um Implementar um programa Java que cria e inicia um objeto Simulação e chamar o método Simulation.startobjeto Simulação e chamar o método Simulation.start
MobiCSMobiCSModelo de Programação Modelo de Programação
Modelo de programação OO e modularModelo de programação OO e modular Protocolos são compostos de Protocolos são compostos de micro-protocolosmicro-protocolos
módulos com funcionalidade bem definida módulos com funcionalidade bem definida Arranjo típicoArranjo típico
Micro-protocolos se comunicam por Micro-protocolos se comunicam por eventoseventos mensagens, timers mensagens, timers
Protocolo
WiredWired WirelessWireless HandoffHandoff
A classe A classe MessageMessage
sendersender, , receiverreceiver – – remetente e remetente e destinatáriodestinatário
responsibleresponsible – classe – classe do prot. responsável do prot. responsável pela mensagempela mensagem
callHandlercallHandler – invoca o – invoca o handler da mensagemhandler da mensagem
timestamptimestamp – carimbo de – carimbo de tempo da mensagemtempo da mensagem
Obs: callHandler(Protocolo) faz chamada ao método Protocolo.when[TipoMensagem]
Um Exemplo: Um Exemplo: O Protocolo RDP O Protocolo RDP
Descrição geral do protocoloDescrição geral do protocoloFuncionamento do protocoloFuncionamento do protocoloMensagensMensagensMódulos (micro-protocolos)Módulos (micro-protocolos)
Visão Geral do RDPVisão Geral do RDPResult Delivery ProtocolResult Delivery Protocol
ObjetivosObjetivosReencaminhar respostas de requisições feitas a Reencaminhar respostas de requisições feitas a
servidores fixos, quando um cliente móvel migra.servidores fixos, quando um cliente móvel migra.
Utiliza um Utiliza um proxyproxy, que é o representante do Mh , que é o representante do Mh na rede fixa.na rede fixa.
A cada nova requisição do Mh a um servidor, é A cada nova requisição do Mh a um servidor, é criado um proxy no Mss responsável pelo Mh, criado um proxy no Mss responsável pelo Mh, no momento em que uma requisição é feita.no momento em que uma requisição é feita.
São guardados também ponteiros para os São guardados também ponteiros para os proxies remotos de todos os Mh locais.proxies remotos de todos os Mh locais.
Funcionamento do RDPFuncionamento do RDP
Um MSS armazena para cada Mh local, o Um MSS armazena para cada Mh local, o conjunto dos proxies criados pelos Mh locais e conjunto dos proxies criados pelos Mh locais e dos proxies remotos.dos proxies remotos.
Hand-off de um MhHand-off de um MhO MSS da nova célula envia para o MSS anterior O MSS da nova célula envia para o MSS anterior
um pedido para retirar o registro daquele Mh.um pedido para retirar o registro daquele Mh.O MSS antigo envia para o novo MSS a lista dos O MSS antigo envia para o novo MSS a lista dos
proxies remotos e locais com seus respectivos proxies remotos e locais com seus respectivos endereços.endereços.
O novo MSS envia uma mensagem para o Mss O novo MSS envia uma mensagem para o Mss antigo atualizar o endereço do Mh na lista de antigo atualizar o endereço do Mh na lista de proxies locais.proxies locais.
Hand-off
server
proxy
MSSpMh
MSSo
MSSn
Cenário do Protocolo RDPCenário do Protocolo RDP
Req
ReqRes
Greet
DeRegPList
UpCurLoc
ForwardRes
?
Greet
DeReg PList
UpCurLoc
ForwardRes
FRes
Ack
Ack
Ack
Cria proxy
Organizando o ProtocoloOrganizando o Protocolo
O protocolo possui duas instâncias O protocolo possui duas instâncias funcionais do protocolo: uma para funcionais do protocolo: uma para MSSs e outra para Mhs.MSSs e outra para Mhs.
Para efeito de teste, teremos ainda Para efeito de teste, teremos ainda uma instância do RDP para servidores.uma instância do RDP para servidores.
Será seguida a metodologia de Será seguida a metodologia de organizar protocolos em micro-organizar protocolos em micro-protocolos protocolos WiredWired, , WirelessWireless e e HandoffHandoff . .
ExemploExemploEtapas de Implementação Etapas de Implementação
Definir todas as mensagens trocadas entre Definir todas as mensagens trocadas entre elementos e seus respectivos micro-elementos e seus respectivos micro-protocolosprotocolos
Declarar cada uma das mensagens na forma Declarar cada uma das mensagens na forma de uma subclasse de de uma subclasse de MessageMessage..
Declarar as interfaces dos micro-protocolosDeclarar as interfaces dos micro-protocolosDeclarar uma subclasse de Declarar uma subclasse de ProtocolProtocol que que
implementa todas as interfaces dos micro-implementa todas as interfaces dos micro-protocolosprotocolos
Implementar os métodosImplementar os métodos
ExemploExemploOrganizando o ProtocoloOrganizando o Protocolo
O protocolo possui duas instâncias O protocolo possui duas instâncias funcionaisfuncionaisMSSsMSSsMHs.MHs.
Metodologia de organização Metodologia de organização micro-protocolos micro-protocolos WiredWired, , WirelessWireless e e Handoff Handoff ..
ExemploExemploComunicação entre MódulosComunicação entre Módulos
wirelesswireless
wiredwired
handoffhandoff
Mss
wirelesswireless
wiredwired
handoffhandoff
Mss
wirelesswireless
Mh
ForwardRes
Ack_Mss
RemPListForwardResPList
UpCurrLoc
DeReg
Req,Ack
ForwardRes
Declaração das MensagensDeclaração das Mensagens
Declaração de Declaração de PlistPlist
public class PList extends Message implements HandoffMessage { public PList(Address mh, Address oldMss, Map proxyList){ super(RDPMss.class); this.mh = mh; this.oldMss = oldMss; this.proxyList = proxyList; } public Address getMh(){ return mh; } public Map getProxyList(){ return proxyList; } public Address getOldMss(){ return oldMss; } private Address oldMss; private Map proxyList; private Address mh;}
public class PList extends Message implements HandoffMessage { public PList(Address mh, Address oldMss, Map proxyList){ super(RDPMss.class); this.mh = mh; this.oldMss = oldMss; this.proxyList = proxyList; } public Address getMh(){ return mh; } public Map getProxyList(){ return proxyList; } public Address getOldMss(){ return oldMss; } private Address oldMss; private Map proxyList; private Address mh;}
Declaração de Declaração de Micro-ProtocolosMicro-Protocolos
Necessário definir três instâncias de Necessário definir três instâncias de protocolos do RDP: protocolos do RDP: Servidor - RDPServerServidor - RDPServerEstação móvel – RDPMhEstação móvel – RDPMhEstação base – RDPMssEstação base – RDPMss
Cada uma dessas instâncias é um Cada uma dessas instâncias é um protocolo e define seus próprios protocolo e define seus próprios micro-protocolos.micro-protocolos.
Declaração dos Declaração dos Micro-ProtocolosMicro-Protocolos
Micro-protocolos são declarados Micro-protocolos são declarados como interfaces Java.como interfaces Java.
Cada método da interface é um Cada método da interface é um handler para uma das possíveis handler para uma das possíveis mensagens.mensagens.
Cada handler possui a seguinte Cada handler possui a seguinte sintaxe:sintaxe:public void <nome>(Message m);public void <nome>(Message m);
ExemploExemploDeclaração de Declaração de Protocolos Protocolos
Micro-protocolo Micro-protocolo WiredWired do do protocolo RDPMssprotocolo RDPMss
publicpublic interfaceinterface RDPMssWiredRDPMssWired extendsextends
WiredModuleWiredModule {{
publicpublic voidvoid whenRes (Message m);whenRes (Message m);
publicpublic voidvoid whenRemPList (Message m);whenRemPList (Message m);
publicpublic voidvoid whenAck_Mss (Message m);whenAck_Mss (Message m);
}}
publicpublic interfaceinterface RDPMssWiredRDPMssWired extendsextends
WiredModuleWiredModule {{
publicpublic voidvoid whenRes (Message m);whenRes (Message m);
publicpublic voidvoid whenRemPList (Message m);whenRemPList (Message m);
publicpublic voidvoid whenAck_Mss (Message m);whenAck_Mss (Message m);
}}
Declaração de Declaração de Micro-ProtocolosMicro-Protocolos
Diagrama completo de declaração Diagrama completo de declaração de micro-protocolosde micro-protocolos
A Classe A Classe ProtocolProtocol
ownerowner – elemento – elemento simulado usuário do simulado usuário do protocoloprotocolo
sendsend – envia uma – envia uma mensagem pela redemensagem pela rede
statestate – uniformiza a – uniformiza a manipulação do manipulação do estado do protocolo estado do protocolo em diferentes em diferentes instânciasinstâncias
Estrutura de um ProtocoloEstrutura de um Protocolo
Corpo da declaração da classeCorpo da declaração da classepublic class RDPMh extends Protocol implements MhProtocol, RDPMhWireless{ public RDPMh(Mh owner){ super(owner, null); } public void ForwardRes_Mh(Message m){ ForwardRes_Mh res = (ForwardRes_Mh) m; <corpo do método> } public void Request(Address server, int req){ System.out.println("[rdp mh] % Request RDP = "+req); send(((Mh) owner).getMssResp(), new Req(owner.getAddress(), server, req)); }}
public class RDPMh extends Protocol implements MhProtocol, RDPMhWireless{ public RDPMh(Mh owner){ super(owner, null); } public void ForwardRes_Mh(Message m){ ForwardRes_Mh res = (ForwardRes_Mh) m; <corpo do método> } public void Request(Address server, int req){ System.out.println("[rdp mh] % Request RDP = "+req); send(((Mh) owner).getMssResp(), new Req(owner.getAddress(), server, req)); }}
Implementação do Protocolo Implementação do Protocolo RDPRDP
Tipos de módulosTipos de módulos
Micro-protocolos
Micro-protocolos
Extensão de Protocol
Extensão de Protocol
Declaração do protocolo RDPMssDeclaração do
protocolo RDPMss
Configuração do AmbienteConfiguração do Ambientede rede simulado de rede simulado
Classes de Classes de mobics.networkmobics.network
ElementElement FhFh MhMh MssMss CellCell AddressAddress
NetworkInterfaceNetworkInterface WiredInterfaceWiredInterface WirelessInterfaceWirelessInterface
Classes do pacote Classes do pacote mobics.network mobics.network (cont)(cont)
Hierarquia básica de elementos de Hierarquia básica de elementos de rede simuladosrede simulados
ElementElement
MssMss
FhFhMhMh
Mss1Mss1Mh1Mh1
Classes básicasMobiCS
Classes do pacote Classes do pacote mobics.network mobics.network (cont)(cont)
ElementElement – implementa a interface – implementa a interface básica de um elemento de redebásica de um elemento de rede
Métodos principais:Métodos principais:getNamegetName – nome do elemento – nome do elemento
simuladosimuladosendsend – envia uma mensagem pela rede – envia uma mensagem pela redeattachattach – incopora um protocolo ao – incopora um protocolo ao
elementoelemento
Classes do pacote Classes do pacote mobics.network mobics.network (cont)(cont)
Adaptação nos elementos simuladosAdaptação nos elementos simulados
Métodos com a assinatura Métodos com a assinatura on<Ação>on<Ação> definem o comportamento de um elemento simulado na ocorrência da ação definem o comportamento de um elemento simulado na ocorrência da ação <Ação><Ação>..
Elementos de Rede
Máquina de Simulação
MsgSendSetTimer
TimerMsgArrivedMoveToConnectivity
Classes do pacote Classes do pacote mobics.network mobics.network (cont)(cont)
MhMh –implementa a interface básica de uma estação –implementa a interface básica de uma estação móvelmóvel
Métodos principais:Métodos principais:getMssResp getMssResp – endereço do Mss responsável pelo Mh– endereço do Mss responsável pelo Mhavailable/unavailableavailable/unavailable – muda o estado de disponibilidade – muda o estado de disponibilidade
do Mh para comunicaçãodo Mh para comunicaçãoonMoveTo, onAvailable, onUnavailableonMoveTo, onAvailable, onUnavailable
MssMss – implementa a interface básica de um Mss – implementa a interface básica de um Mss (estação base)(estação base)
Métodos principais:Métodos principais:getCell getCell – célula pela qual o Mss é responsável– célula pela qual o Mss é responsável
ExemploExemploCriação de um Ambiente Criação de um Ambiente
mh = mh = newnew MyMh( MyMh(“Mh 1"“Mh 1",sim);,sim);cell1 = cell1 = newnew Cell(); Cell();cell2 = cell2 = newnew Cell(); Cell();cell3 = cell3 = newnew Cell(); Cell();mss1 = mss1 = newnew MyMss( MyMss(“Mss 1"“Mss 1",sim,cell1);,sim,cell1);mss2 = mss2 = newnew MyMss( MyMss(“Mss 2"“Mss 2",sim,cell2);,sim,cell2);mss3 = mss3 = newnew MyMss( MyMss("Mss 3""Mss 3",sim,cell3);,sim,cell3);wr = wr = new new WiredLink(mss2.getAddress(),WiredLink(mss2.getAddress(), mss1.getAddress());mss1.getAddress());wr2 = wr2 = newnew WiredLink(mss1.getAddress(), WiredLink(mss1.getAddress(), mss3.getAddress());mss3.getAddress());
mh = mh = newnew MyMh( MyMh(“Mh 1"“Mh 1",sim);,sim);cell1 = cell1 = newnew Cell(); Cell();cell2 = cell2 = newnew Cell(); Cell();cell3 = cell3 = newnew Cell(); Cell();mss1 = mss1 = newnew MyMss( MyMss(“Mss 1"“Mss 1",sim,cell1);,sim,cell1);mss2 = mss2 = newnew MyMss( MyMss(“Mss 2"“Mss 2",sim,cell2);,sim,cell2);mss3 = mss3 = newnew MyMss( MyMss("Mss 3""Mss 3",sim,cell3);,sim,cell3);wr = wr = new new WiredLink(mss2.getAddress(),WiredLink(mss2.getAddress(), mss1.getAddress());mss1.getAddress());wr2 = wr2 = newnew WiredLink(mss1.getAddress(), WiredLink(mss1.getAddress(), mss3.getAddress());mss3.getAddress());
Exemplo Exemplo Cenário de Teste Cenário de Teste
Testar envio sem sucesso de ForwardRes Testar envio sem sucesso de ForwardRes para Mh que não é mais localpara Mh que não é mais local
server
proxy
MSSpMh
MSSo
MSSn
?
Greet
DeReg PList
UpCurLoc
ForwardRes
FRes
Ack
Ack
Ack
Req
ReqRes
Greet
DeRegPListUpCurLoc
ForwardRes
Cria proxyForwardRes é recebido por MSSo
antes de completado o handoff do MhForwardRes é recebido por MSSo
antes de completado o handoff do Mh
Exemplo Exemplo Cenário de Teste Cenário de Teste
server
proxy
MSSpMh
MSSo
MSSn
?
Greet
DeReg PList
UpCurLoc
ForwardRes
FRes
Ack
Ack
Ack
Req
ReqRes
Greet
DeRegPListUpCurLoc
ForwardRes
Cria proxy
Server.acceptTurnOn(false);MSSn.acceptTurnOn(false);Mh.send(new Req());Mh.moveTo(MSSo);end_step();Mh.moveTo(MSSn);end_step();Server.acceptTurnOn(true);end_step();MSSn.acceptTurnOn(true);
Server.acceptTurnOn(false);MSSn.acceptTurnOn(false);Mh.send(new Req());Mh.moveTo(MSSo);end_step();Mh.moveTo(MSSn);end_step();Server.acceptTurnOn(true);end_step();MSSn.acceptTurnOn(true);
ExemploExemploSaída da SimulaçãoSaída da Simulação
MOBX>> Mh <Mh> is moving[rdp mss] % Registering new mh = <MyMh@1cf6d245>[rdp mh] % Request RDP = 7[rdp mss] % Requisition received by Mss**** adding local proxy[rdp mss] % sending message Req to the serverMOBX>> Mh <Mh> is moving[rdp mss] % Registering new mh = <MyMh@1cf6d245>[rdp mss] % proxyRefList = {class sidam.rdp.Req=mobics.network.WiredInterface@50f2d244}[rdp mss] % Sending proxy list {class sidam.rdp.Req=mobics.network.WiredInterface@50f2d244}[rdp mss] % sending update curr loc....[rdp mss] % Updating location[rdp mss] % setting current location[rdp mss] % update curr loc sended....MOBX>> Mh <Mh> is moving[rdp server] % Requisition received -> 7[rdp mss] % Forwarding Res to local Mh[rdp mss] % storing result[rdp mss] % Registering new mh = <MyMh@1cf6d245>[rdp mss] % proxyRefList = {class sidam.rdp.Req=mobics.network.WiredInterface@50f2d244}[rdp mss] % Sending proxy list {class sidam.rdp.Req=mobics.network.WiredInterface@50f2d244}[rdp mss] % sending update curr loc....[rdp mss] % Updating location[rdp mss] % setting current location[rdp mss] % update curr loc sended....[rdp mss] % Forwarding Res to local Mh[rdp mh] % Result RDP = 14[rdp mss] % Sending Ack for current proxy location[rdp server] % ACK received for message 0[rdp mss] % Broadcasting RemPList[rdp mss] % Removing proxy list[rdp mss] % Removing proxy list[rdp mss] % Removing proxy list
MOBX>> Mh <Mh> is moving[rdp mss] % Registering new mh = <MyMh@1cf6d245>[rdp mh] % Request RDP = 7[rdp mss] % Requisition received by Mss**** adding local proxy[rdp mss] % sending message Req to the serverMOBX>> Mh <Mh> is moving[rdp mss] % Registering new mh = <MyMh@1cf6d245>[rdp mss] % proxyRefList = {class sidam.rdp.Req=mobics.network.WiredInterface@50f2d244}[rdp mss] % Sending proxy list {class sidam.rdp.Req=mobics.network.WiredInterface@50f2d244}[rdp mss] % sending update curr loc....[rdp mss] % Updating location[rdp mss] % setting current location[rdp mss] % update curr loc sended....MOBX>> Mh <Mh> is moving[rdp server] % Requisition received -> 7[rdp mss] % Forwarding Res to local Mh[rdp mss] % storing result[rdp mss] % Registering new mh = <MyMh@1cf6d245>[rdp mss] % proxyRefList = {class sidam.rdp.Req=mobics.network.WiredInterface@50f2d244}[rdp mss] % Sending proxy list {class sidam.rdp.Req=mobics.network.WiredInterface@50f2d244}[rdp mss] % sending update curr loc....[rdp mss] % Updating location[rdp mss] % setting current location[rdp mss] % update curr loc sended....[rdp mss] % Forwarding Res to local Mh[rdp mh] % Result RDP = 14[rdp mss] % Sending Ack for current proxy location[rdp server] % ACK received for message 0[rdp mss] % Broadcasting RemPList[rdp mss] % Removing proxy list[rdp mss] % Removing proxy list[rdp mss] % Removing proxy list
mh.moveTo(mssP);mh.receive(new Request(...));mh.moveTo(mssO);end_step();mh.moveTo(mssN);end_step();server.acceptTurnOn(true);end_step();mssN.acceptTurnOn(true);
mh.moveTo(mssP);mh.receive(new Request(...));mh.moveTo(mssO);end_step();mh.moveTo(mssN);end_step();server.acceptTurnOn(true);end_step();mssN.acceptTurnOn(true);
Criação de um Script Criação de um Script DeterminísticoDeterminístico
Criar uma subclasse de Criar uma subclasse de DetermSimulationDetermSimulation
Implementar os métodos Implementar os métodos configure()configure() e e script()script()
Em Em configureconfigure, criar os objetos que , criar os objetos que compõem o ambiente simuladocompõem o ambiente simulado
Em Em scriptscript, escrever o código do , escrever o código do script determinísticoscript determinístico
Executando o SimuladorExecutando o Simulador
Código no programa do usuárioCódigo no programa do usuário
Simulation simulation = new MySimulation();Simulation.start();
Simulation simulation = new MySimulation();Simulation.start();
Evitando Erros no Script Evitando Erros no Script DeterminísticoDeterminístico
A A ordem de execuçãoordem de execução de ações em diferentes de ações em diferentes elementos simulados é elementos simulados é não determinísticanão determinística. .
Comandos de depuração podem produzir Comandos de depuração podem produzir resultados inesperados e variáveis, caso haja resultados inesperados e variáveis, caso haja outros comandos naquele passo.outros comandos naquele passo.
O comando O comando next()next() pode ser sempre usado como pode ser sempre usado como uma primitiva parauma primitiva para impor uma sequência impor uma sequência deterministicadeterministica das ações, ou criando “passos de das ações, ou criando “passos de simulação vazios” (para avançar o tempo simulação vazios” (para avançar o tempo simulado)simulado)
Simulação Estocástica Simulação Estocástica
Permite a avaliação do desempenho (complexidade de Permite a avaliação do desempenho (complexidade de mensagens) através de testes exaustivos.mensagens) através de testes exaustivos.
Usuário define:Usuário define:Padrão de comportamento dos elementos simuladosPadrão de comportamento dos elementos simuladosModelo de mobilidadeModelo de mobilidade
O modelo de simulação pode ser O modelo de simulação pode ser programadoprogramado (extensão de classes) e (extensão de classes) econfiguradoconfigurado pelo usuário (instanciação de objetos). pelo usuário (instanciação de objetos).
A cada elemento simulado é associado um objeto que A cada elemento simulado é associado um objeto que define os eventos (aleatórios a serem gerados neste define os eventos (aleatórios a serem gerados neste elemento ) elemento )
Modelo de simulação estocástico pode ser arbitrariamente Modelo de simulação estocástico pode ser arbitrariamente complexo!complexo!
Programação de Modelos de Programação de Modelos de Simulação Simulação
Canais de ComunicaçãoCanais de Comunicação usuário define o usuário define o tempo de envio da mensagem pelo canaltempo de envio da mensagem pelo canal::
pode depender do tamanho da mensagem, distância entre elementos, ou qualquer outro parâmetro (nr. de hops)
WiredWired delaySend(NetMessage m)delaySend(NetMessage m)WirelessWireless
delaySend(NetMessage m,
Location LLocation L11, ,
Location LLocation L22))
ExemploExemplopublic classpublic class MyLinkModel MyLinkModel extendsextends LinkModel LinkModel
{{
public longpublic long delaySend (NetMessage msg) { delaySend (NetMessage msg) {
returnreturn (msg.getMessage().getSize() / (msg.getMessage().getSize() /
thisthis.throughput);.throughput);
}}
}}
ExemploExemplopublic classpublic class MyLinkModel MyLinkModel extendsextends LinkModel LinkModel
{{
public longpublic long delaySend (NetMessage msg) { delaySend (NetMessage msg) {
returnreturn (msg.getMessage().getSize() / (msg.getMessage().getSize() /
thisthis.throughput);.throughput);
}}
}}
Programação de Modelos de Programação de Modelos de Simulação Simulação
Geração de EventosGeração de Eventos usuário programa quais usuário programa quais eventos são gerados, e em qual instante de tempo eventos são gerados, e em qual instante de tempo simuladosimulado
Classes base incluem facilidades para geração de Classes base incluem facilidades para geração de número aleatórios (randomGenerator), geração número aleatórios (randomGenerator), geração periódica de eventos (scheduler) etc.periódica de eventos (scheduler) etc.
MobilidadeMobilidadeDeterminar vizinhança entre célulasDeterminar vizinhança entre célulasGeração de Evento Geração de Evento MoveToMoveToMapeamento: Localização Mapeamento: Localização Célula Célula
Simulação Estocástica Simulação Estocástica ImplementadaImplementada
Modelo de MobilidadeModelo de Mobilidade
Modelo de Simulação ImplementadoModelo de Simulação ImplementadoAtividade e AtraçãoAtividade e Atração
Atividade: prob. de Mh estar conectado à redeAtração: prob. de Mhs estarem na região de uma
célulaMobilidadeMobilidade
Probabilidade do Mh migrar para outra célulaVizinhança entre célulasVizinhança entre célulasQualidade da comunicação sem fioQualidade da comunicação sem fioPadrão de requisiçõesPadrão de requisições
Neste modelo: apenas os hosts móveis geram eventosNeste modelo: apenas os hosts móveis geram eventos
ImplementaçãoImplementaçãoA Classe A Classe MhSimMhSim Subclasse de classe Subclasse de classe EventGeneratorEventGenerator objeto que implementa o modelo de simulação para cada objeto que implementa o modelo de simulação para cada
unidade móvel unidade móvel MhSim cria objetos para geração dos diferentes tipos de eventosMhSim cria objetos para geração dos diferentes tipos de eventos Instâncias de subclasses de Instâncias de subclasses de EventModel EventModel
MigrationEventModelMigrationEventModel = implementa modelo de migração = implementa modelo de migração evento evento MoveTo(Mh,newCell) MoveTo(Mh,newCell)
RequestModelRequestModel = implementa o modelo de geração de requisições para o = implementa o modelo de geração de requisições para o protocolo RDP protocolo RDP evento evento Receive(Mh,RDPreq)Receive(Mh,RDPreq)
WlLinkSimModelWlLinkSimModel = implementa o modelo de qualidade de comunicação = implementa o modelo de qualidade de comunicação sem fiosem fio
usausa timeScheduler.addEvent timeScheduler.addEvent p/ escalonar geração periódica (cada T p/ escalonar geração periódica (cada T unidades de tempo simuladas) de eventosunidades de tempo simuladas) de eventos
ImplementaçãoImplementaçãoClasse Classe MigrationEventModelMigrationEventModel
Implementa o modelo de mobilidadeImplementa o modelo de mobilidade Estende a classe Estende a classe EventModelEventModel Define coeficiente de migração e célula inicial de Define coeficiente de migração e célula inicial de
cada Mhcada Mh métodométodo generateEvent(Element owner) generateEvent(Element owner)
determina se um evento de migração vai ser gerado obtém lista de células vizinhas à celula atual baseado na atração das células vizinhas calcula
probabilidade relativa de migração para cada uma delascria um novo objeto Evento MoveTo para célula destino
ImplementaçãoImplementaçãoClasse Classe MyStochSimulationMyStochSimulation
Estende de Estende de StochSimulationStochSimulation usada para declarar e inicializar os elementos simuladosusada para declarar e inicializar os elementos simulados métodométodo configure configure
criação das células, associação com os MSSs, criação da topologia de interconexão de MSSs (usando WiredLink)
cria os objetos de MyMh (passando objeto MhSim) posicionando-os nas células
declara classe declara classe LinkSimModel que LinkSimModel que definedefine delaySend(Msg)delaySend(Msg)para uma conexão sem fiopara uma conexão sem fio
simulação iniciada através do método simulação iniciada através do método startstart
ImplementaçãoImplementaçãoClasse Classe MyMhMyMh Derivada da Classe MhDerivada da Classe Mh Na contrução do objeto passa-se o modelo de simulação Na contrução do objeto passa-se o modelo de simulação
escolhido (como parâmetro do construtor da superclasse escolhido (como parâmetro do construtor da superclasse Mh). Mh).
sim pode ser tanto um modelo determinístico ou estocásticopode ser tanto um modelo determinístico ou estocástico Instancia-se um objeto que implementa uma instância do Instancia-se um objeto que implementa uma instância do
protocolo (protocolo (rdp) e registra-se esta instância) e registra-se esta instância
public MyMh (String name, Simulator sim) {
super(name, sim, new MhSim());
rdp = new RDPMh(this);
protocolNotifier.attach(this.rdp)}
Resultados de simulações Resultados de simulações EstocásticasEstocásticas Medimos como o número de retransmissões (ForwardResult) Medimos como o número de retransmissões (ForwardResult)
por Requisição é afetado pelo Fator de Mobilidade por Requisição é afetado pelo Fator de Mobilidade Fator de mobilidade = probabilidade de uma migração Fator de mobilidade = probabilidade de uma migração
ocorrer a cada N unidades de tempo simuladoocorrer a cada N unidades de tempo simulado
Outros testes: Tamanho de of proxyList com crescente razão Outros testes: Tamanho de of proxyList com crescente razão Requisição/Migração Requisição/Migração
0
0.5
1
1.5
2
0 0.2 0.4 0.6 0.8 1
Migration Factor
Forw
ardR
esul
t /
Req
uest
s
Experiência com o MobiCSExperiência com o MobiCS
Usado na disciplina de CM no IME-USP por 15 alunosUsado na disciplina de CM no IME-USP por 15 alunos Protocolos:Protocolos:
RDP RDP Multicast confiável MCAST [Acharya93].Multicast confiável MCAST [Acharya93]. Protocolo para Serviço de Notificação.Protocolo para Serviço de Notificação.
Modelo de Programação de ProtocolosModelo de Programação de Protocolos Simples.Simples. Uso de Java facilitou a implementação.Uso de Java facilitou a implementação. Programação não é Programação não é thread-safethread-safe, há , há
compartilhamento de estruturas de dados nos compartilhamento de estruturas de dados nos protocolos.protocolos.
Modularização em micro-protocolos é limitada.Modularização em micro-protocolos é limitada.
Experiência com o MobiCSExperiência com o MobiCS
Simulação DeterminísticaSimulação Determinística Mecanismo de exceções de Java foi útil.Mecanismo de exceções de Java foi útil. Detecção de erros não-determinísticos (quando há Detecção de erros não-determinísticos (quando há
varios eventos concorrentes).varios eventos concorrentes). Detecção de erros no protocolo é facilitado pois Detecção de erros no protocolo é facilitado pois
cenário teste é conhecido.cenário teste é conhecido. Simulação EstocásticaSimulação Estocástica
Programação de modos de simulação é simples.Programação de modos de simulação é simples. Identificação de problemas dos protocolos não Identificação de problemas dos protocolos não
considerados na especificação.considerados na especificação. LogLog de eventos ajudou identificar erros nos protocolos de eventos ajudou identificar erros nos protocolos
não detectados na simulação determinísticanão detectados na simulação determinística
Experiência com o MobiCSExperiência com o MobiCS
Simulação Estocástica (cont.)Simulação Estocástica (cont.) Dificuldade para identificar no Dificuldade para identificar no loglog as informações as informações
relevantes e associá-las aos elementos simulados.relevantes e associá-las aos elementos simulados. Principal dificuldade: Principal dificuldade:
Instante da geração de um evento Instante da geração de um evento instante do instante do processamento do eventoprocessamento do evento
Exemplo: decisão sobre célula destino de uma Exemplo: decisão sobre célula destino de uma migração a partir da atualmigração a partir da atual Mh.getMSS().getCell()Mh.getMSS().getCell() devolve a célula no devolve a célula no instante da geração do eventoinstante da geração do eventoEm vez disto, guardar referência para celula atual Em vez disto, guardar referência para celula atual e atualizar a cada processamento e atualizar a cada processamento
ArtigosArtigos
Rocha, Endler: “MobiCS: An Environment for Rocha, Endler: “MobiCS: An Environment for Prototyping and Simulating Distributed Protocols for Prototyping and Simulating Distributed Protocols for Mobile Networks”, IEEE MWCN2001.Mobile Networks”, IEEE MWCN2001.
Rocha, Endler: “Flexible Simulation of Distributed Rocha, Endler: “Flexible Simulation of Distributed Protocols for Mobile Computing”, ACM MSWiM, Boston Protocols for Mobile Computing”, ACM MSWiM, Boston 2000.2000.
Rocha, Endler: “Um Simulador de Protocolos para Rocha, Endler: “Um Simulador de Protocolos para Computação Móvel”Computação Móvel”. 2. 2oo WCSF, maio 2000. WCSF, maio 2000.
Endler, Silva: “A Reliable Connectionless Protocol for Endler, Silva: “A Reliable Connectionless Protocol for Mobile Clients”Mobile Clients”. DT-SIDAM-2-99.1. . DT-SIDAM-2-99.1. www.ime.usp.br/~sidamwww.ime.usp.br/~sidam
URLURL:: www.inf.puc-rio.br/~endler/publ.htmlwww.inf.puc-rio.br/~endler/publ.html
ReferênciasReferências
Home-page:Home-page:http://www.ime.usp.br/~rcarocha/mobics ouhttp://www.ime.usp.br/~rcarocha/mobics ou
http://www.ime.usp.br/~sidam/components/mobicshttp://www.ime.usp.br/~sidam/components/mobics
Lista de discussão:Lista de discussão:lista: lista: [email protected]@lcpd.ime.usp.br
cadastramento: cadastramento: [email protected]@ime.usp.br
Estas transparências:Estas transparências: http://www.inf.puc-rio.br/~endler/courses/Mobile http://www.inf.puc-rio.br/~endler/courses/Mobile
(link Sequência de Aulas)(link Sequência de Aulas)