• Nenhum resultado encontrado

Simulação do Protocolo de Tolerância a Falhas de MSS

N/A
N/A
Protected

Academic year: 2021

Share "Simulação do Protocolo de Tolerância a Falhas de MSS"

Copied!
18
0
0

Texto

(1)

Simulação do Protocolo de Tolerância a

Falhas de MSS

por

Marcelo Ferreira Moreno

Professor: Markus Endler

Relatório de implementação apresentado como parte dos requisitos de avaliação da disciplina “Introdução à Computação Móvel”, 2º semestre de 2003

(2)

1

Introdução

Por toda a evolução das aplicações para redes móveis nota-se a crescente necessidade de se manter dados de estado das estações móveis nos MSS’s, principalmente para a redução do consumo de energia, da utilização de disco e do custo da comunicação como um todo. MSS’s passaram a ser pontos centrais de armazenamento de informações de grande importância o funcionamento adequado de programas. Tal centralização torna o sistema vulnerável em pontos específicos, sobre os quais recai especial interesse para a utilização de mecanismos de tolerância a falhas.

Na presença de falha de um MSS, informações de estado de várias estações móveis são perdidas. Essas estações ficam obrigadas a aguardar a recuperação do MSS ou, ainda, migrar para a área de atuação de outro MSS. Porém, em qualquer um dos casos, aquela informação vital para a continuidade de execução dos programas em andamento não pode ser recuperada.

Assim, a proposta de [Alagar93] é manter um mecanismo de replicação das informações de estado de cada um das estações móveis entre vários MSS’s secundários. No trabalho citado são apresentados dois esquemas de replicação. No primeiro, chamado de pessimista, o encaminhamento efetivo de uma mensagem de dados (que modifica o estado do Mh) pelo MSS somente é feito após a recepção de reconhecimentos (Acks) vindos de todos os MSS secundários para os quais foram enviadas cópias da mensagem para atualização local do estado. Dessa forma, assegura-se a consistência da informação replicada, mesmo na presença de falha do MSS em qualquer momento. O segundo esquema, chamado otimista, não aguarda os reconhecimentos de mensagens de cópia para o encaminhamento. Assim, pode ser que um MSS secundário não receba a cópia da mensagem e cause uma inconsistência entre as informações armazenadas nos MSS, caso o MSS primário falhe. Para que este segundo esquema possa ser realmente utilizado, a rede deve prover primitivas de comunicação que garantam a entrega de mensagens em trânsito. Uma outra opção seria a execução de um rollback na estação móvel para um estado consistente com o MSS secundário.

Além das estratégias de replicação, o trabalho de Alagar define estratégias para a eleição dos MSS secundários. O MSS primário de um Mh é sempre o MSS responsável pela célula atual. Para os MSS secundários, a primeira estratégia os elege de acordo com o padrão de mobilidade da estação móvel, válida apenas em situações nas quais tal parâmetro pode ser inferido. Com isso, qualquer que seja a célula visitada, o MSS responsável possuirá as informações de estado atualizadas, podendo ser usados caso se torne um MSS primário. A segunda estratégia de eleição dos MSS baseia-se no conjunto de células vizinhas à célula atual do Mh. Se Mh irá se mover, é muito provável que seja com destino a uma das células adjacentes à posição atual.

(3)

Quando um MSS se recupera de uma falha, tarefas simples devem ser executadas. Primeiro, toda a informação de estados anteriores à falha deve ser eliminada. Em seguida, o MSS deve informar a todos os outros sobre sua recuperação, habilitando-se a ser usado pelas estações móveis. Para toda estação móvel da qual o MSS recuperado é secundário, este deve obter a informação de estado atualizada.

Para a implementação da simulação no MOBICS, optou-se pelo esquema de replicação pessimista e a estratégia de eleição dos MSS’s vizinhos como secundários. O presente relatório encontra-se estruturado da seguinte forma. A Seção 2 descreve resumidamente o funcionamento do protocolo e suas mensagens. A Seção 3 descreve o funcionamento detalhado dos elementos da rede frente a chegada de cada uma das mensagens descritas na Seção 2. A Seção 4 mostra como foram implementadas as simulações determinísticas e os resultados obtidos. A Seção 5 traz a implementação da simulação estocástica também acompanha de seus resultados. A Seção 6 encerra o trabalho comentando as experiências e conclusões.

2

Descrição do protocolo

2.1 Operação normal:

Quando um uma estação móvel (s) deseja enviar uma mensagem (m) para uma outra estação móvel (r), deve encaminhá-la ao seu MSS primário (mp(s)) e armazená-la em um buffer local. Após recebida uma confirmação (ack) do mp(s), o host s pode remover a mensagem m de seu buffer. Se, antes de tal confirmação, o host s receber uma mensagem notificando a falha de mp(s), s deve estabelecer conexão com um novo MSS primário e retransmitir a mensagem m. s mp(s) mp(r) r m m m ack ack ack

Figura 2.1 – Encaminhamento de mensagens de dados

(4)

Nota-se que, seja enviando ou recebendo uma mensagem, uma estação móvel h fica submetida à intermediação na comunicação por parte de seu MSS primário (mp(h)). Esse elemento fica, então, responsável por analisar cada mensagem enviada ou recebida por h, a fim de atualizar sua informação de estado (st_info(h)). Se uma mensagem m demanda essa atualização, mp(h) envia cópias (copy(h,m)) para todos os MSS secundários de h (ms(h)). Ao receber copy, cada ms(h) atualiza st_info(h) armazenado localmente e envia uma confirmação para mp(h). Na estratégia pessimista de replicação, mp(h) somente atualiza st_info(h) e encaminha a mensagem m após recebidas todas as confirmações de cópias dos ms(h). Na estratégia otimista, os reconhecimentos não são aguardados para atualização local e encaminhamento. m copy(h,m) copy(h,m) copy(h,m) ack ack ack ack m h ms(h) ms(h) ms(h) ms(h) mp(h)

Figura 2.2 – Atualização da informação de estado de uma estação móvel

2.2 Operação após uma falha:

Quando mp(h) falha, h deve procurar por um dos ms(h), por exemplo o MSS n. Agora que n se tornou o MSS primário de h, o conjunto ms(h) provavelmente mudou. Todos os novos MSS’s pertencentes a ms(h) recebem uma cópia de st_info(h), enquanto que os MSS’s que não mais são ms(h) devem apagar st_info(h). Se h decide por utilizar um MSS ausente da lista ms(h), então st_info(h) deve ser obtida a partir de um dos MSS pertencentes a ms(h). Nota-se que o procedimento de handoff é idêntico.

2.3 Tipos de mensagens

A Tabela 2.1 descreve de forma resumida os tipos de mensagens definidos pelo protocolo.

(5)

AckCopy ms(h) Mp(h) Confirmação da chegada de uma mensagem Copy. Significa que a informação de estado em um MSS secundário foi atualizada com sucesso. AckData_Mh_Mss r Mp(r) Confirmação da chegada de uma

mensagem de dados no destinatário. Significa que a mensagem de dados chegou ao host móvel destino.

AckData_Mss_Mh mp(s) S Confirmação da chegada de uma mensagem de dados no destinatário.

AckData_Mss mp(r) Mp(s) Confirmação da chegada de uma mensagem de dados no destinatário.

AckStateInfo ms(h) Mp(h) Confirmação da chegada de uma mensagem de informação do estado. Significa que um novo MSS secundário de h acaba de atualizar a informação de estado referente a ele.

Copy mp(h) ms(h) Cópia de uma mensagem de dados de/para h que demanda atualização na informação do estado em todos os MSS’s secundários. Data_App aplic. s Mensagem de dados criada pela aplicação

e que deve ser enviada para outra estação móvel

Data_Mh_Mss s mp(s) Mensagem de dados originada da estação móvel emissora para seu MSS primário, que deve realizar o encaminhamento. Data_Mss_Mh mp(r) r Mensagem de dados encaminhada do

MSS primário do receptor para este.

Data_Mss mp(s) mp(r) Mensagem de dados encaminhada do MSS primário do emissor para o MSS primário do receptor

MSSFail_Mh mp(h) H Notificação de falha do MSS enviada para as estações móveis as quais tem este MSS como primário

MSSFail_Mss MSS x MSS y Notificação da falha do MSS enviada para todos os outros MSS que compõem a rede StateInfo mp(h) ms(h) Informação do estado da estação móvel h

enviada para um novo MSS eleito como secundário. Pode ser usada também no caso de uso do novo MSS como primário sem que este fosse secundário anteriormente.

Tabela 2.1 – Mensagens definidas pelo protocolo.

Já a Tabela 2.2 ilustra algumas mensagens adicionais que foram necessárias para uma correta simulação do protocolo no Mobics.

(6)

DeleteStateInfo mp(h) Ex-ms(h) Pedido de remoção da informação de estado para um MSS que até então era secundário da estação móvel h.

FailNow Simul. MSS x Mensagem que provoca a falha do MSS destino, para efeitos de simulação

Welcome mp(h) H Mensagem de boas vindas para a estação móvel que acaba de migrar, para que esta cheque se há mensagens pendentes de confirmação caso a estação esteja vindo de uma falha de seu MSS primário anterior.

Tabela 2.2 – Mensagens definidas pelo protocolo.

3

Implementação dos elementos da rede

3.1 Ações tomadas pelos elementos da rede

Estação móvel (Mh) Recebendo Data_App:

Esta é a mensagem de dados gerada pela aplicação, destinada a uma outra estação móvel.

o Coloca a mensagem de dados em um buffer

o Envia a mensagem de dados como Data_Mh_Mss ao seu MSS primário

Recebendo Data_Mss_Mh:

Esta é a mensagem de dados chegando ao seu destino final, a estação móvel receptora. o Envia confirmação do recebimento (AckData_Mh_Mss) para o seu MSS primário

Recebendo AckData_Mss_Mh:

Esta é a mensagem de confirmação vinda do MSS primário da estação móvel. Isso quer dizer que a mensagem de dados foi recebida com sucesso, podendo ser removida do buffer do transmissor.

o Remove a mensagem de dados correspondente ao reconhecimento do buffer local de mensagens

Recebendo MssFail_Mh:

Esta é a notificação de falha do MSS primário da estação. Com isso, ela deve esperar por uma migração e obtenção de um novo MSS primário.

o Levanta uma flag local de que a próxima migração é devido a uma falha do MSS primário.

(7)

Esta é a notificação de que a estação migrou com sucesso. Sabendo disso, ela pode verificar a flag de falha do MSS primário anterior. Caso seja verdade, a estação reenvia as mensagens de dados pendentes de confirmação.

o Se houve falha do MSS primário anterior e há mensagens pendentes de confirmação...

Envia cada mensagem de dados (Data_Mh_Mss) pendente para o novo MSS primário.

o Baixa a flag local de falha.

Estação rádio-base (MSS) Recebendo Copy:

Esta é a cópia da mensagem de dados enviada pela estação móvel. A cópia é enviada pelo MSS primário do remetente para os MSS secundários, somente se identificada a necessidade de atualização da informação de estado. O MSS secundário que recebe Copy deve atualizar a informação de estado da estação móvel em questão e notificar o sucesso da operação.

o Armazena o estado do Mh na sua lista de estados de estações para as quais o MSS é secundário

o Envia uma mensagem de confirmação (AckCopy) para o MSS de origem (primário do Mh)

Recebendo AckCopy:

AckCopy é a mensagem de confirmação da atualização do estado de um Mh gerada por um MSS secundário, enviada ao MSS primário. Com essa confirmação, o MSS primário pode considerar que reduzir o número de confirmações pendentes. Se já não há mais confirmações pendentes, a mensagem de dados pode ser encaminhada para o MSS primário do destino. A informação de estado do Mh também pode ser atualizada.

o Remove o MSS remetente da mensagem AckCopy da lista de pendentes de confirmação

o Se a lista de pendentes estiver vazia...

Recupera a mensagem de dados do buffer local.

Envia a mensagem de dados (Data_Mss) para o MSS primário do destinatário.

(8)

Recebendo Data_Mss:

Esta é a mensagem de dados encaminhada do MSS primário do remetente para o MSS primário do destinatário. Basta que o MSS reencaminhe a mensagem de dados à estação móvel receptora.

o Envia a mensagem de dados (Data_Mss_Mh) ao Mh de destino

Recebendo AckData_Mss:

AckData_Mss é a confirmação dada pelo MSS primário do destinatário ao MSS primário do remetente notificando o sucesso do envio da mensagem de dados. Ao recebê-la, o MSS primário do remetente pode eliminar a mensagem de dados do buffer e enviar uma confirmação do envio à estação móvel.

o Encaminha a mensagem de confirmação (AckData_Mss_Mh) para o Mh remetente.

o Remove a mensagem da lista de pendentes de confirmação

Recebendo Data_Mh_Mss:

Esta é a mensagem de dados enviada pela estação móvel ao seu MSS primário. Deve-se, então, armazená-la em buffer local, verificar se há a necessidade de atualização da informação de estado e, caso positivo, enviar cópias para os MSS secundários do remetente.

o Armazena a mensagem de dados na lista de mensagens pendentes de confirmação. o Se a mensagem de dados demanda uma atualização na informação de estado da

estação móvel...

Para todo MSS secundário da estação móvel remetente...

• Envia mensagem de cópia da mensagem de dados (Copy).

• Coloque o endereço do MSS secundário como pendente de confirmação.

o Senão demanda atualização...

Envia a mensagem de dados (Data_Mss) ao MSS primário do destino.

Recebendo AckData_Mh_Mss:

Esta é a confirmação do recebimento da mensagem de dados por parte da estação móvel destino para seu MSS primário. O MSS pode, assim, encaminhar a confirmação ao MSS primário da origem.

(9)

Recebendo StateInfo:

StateInfo é a informação completa do estado enviada por um MSS primário a um outro MSS que anteriormente não fazia parte da lista de MSS secundários e, portanto, não possuía informações sobre o estado do Mh em questão.

o Armazena o estado do Mh correspondente na lista de estados para os quais o MSS é secundário.

o Envia confirmação da atualização do estado ao MSS de origem.

Recebendo AckStateInfo:

Esta é a confirmação do recebimento de uma mensagem de informação do estado. Como não foi implementada uma lista de destinatários de StateInfo pendentes de confirmação, não há o que ser feito no recebimento deste Ack.

Recebendo DeleteStateInfo:

Esta mensagem sinaliza a necessidade de remoção de qualquer informação de estado que o MSS possua sobre um certo Mh, dado que ele não mais pertence à lista de MSS secundários (ou primário) do Mh.

o Remove a informação de estado do Mh especificado das listas de estado.

Recebendo Greet:

Esta é a mensagem de chegada de uma nova estação móvel à área de abrangência do MSS, que, por sua vez, deve se tornar MSS primário do Mh deslocado. Provavelmente, o MSS possuirá a informação de estado do Mh, devendo atualizar a lista de MSS’s secundários e dar as boas vindas ao Mh.

o Se o MSS possui informação de estado do Mh que migrou na lista de estados de Mh’s para os quais o MSS é secundário...

Transfere o estado da lista de MSS secundário para a lista de MSS primário.

o Caso contrário, atribuiremos valor nulo ao estado (poderíamos requisitar StateInfo de alguém, mas sendo a lista de secundários baseada na vizinhança, isto realmente não acontecerá).

o Para cada MSS na antiga lista de MSS secundários de Mh...

Envia mensagem DeleteStateInfo para remoção do estado em tal MSS Remove o MSS da lista de secundários.

o Coloca o MSS como primário do Mh que migrou. o Para cada célula vizinha à célula do MSS...

Envia mensagem StateInfo para o MSS responsável pela célula, para atualização do estado nos novos MSS secundários.

Insere o MSS responsável pela célula na lista de MSS secundários.

(10)

Recebendo FailNow:

Esta mensagem provoca a falha imediata do MSS. Todos os MSS vizinhos e Mh’s sob sua responsabilidade devem ser notificados desse evento.

o Para cada célula vizinha ao MSS...

Envia mensagem de notificação de falha para o MSS responsável pela célula (MSSFail_Mss)

o Para cada Mh sob responsabilidade do MSS...

Envia mensagem de notificação de falha (MSSFail_Mh) o Entra em estado inoperante.

Recebendo MssFail_Mss:

Esta mensagem notifica o MSS sobre a falha de um outro MSS vizinho. O MSS deve anular as entradas que apontam para o MSS inoperante. Se tal remoção esvazia a lista de confirmações pendentes para Copy, o MSS pode enviar a mensagem de dados correspondente para o MSS primário do destino.

o Para cada mensagem Copy pendente de confirmação...

Tenta remover o MSS que falhou da lista de destinos pendentes de confirmação.

Se a lista de destinos de Copy ficar vazia...

• Remove a mensagem da lista de pendentes de confirmação de Copy • Envia a mensagem de dados ao MSS primário do Mh receptor. 3.2 Estruturas de Dados

Ao longo da descrição das ações tomadas por Mh’s e MSS’s, foram citadas várias estruturas de dados que armazenam informações essenciais para o funcionamento do protocolo. Por serem um pouco complexas, é interessante uma descrição, mesmo que sucinta, sobre cada uma delas.

Estruturas presentes nos MSS’s:

Lista de MSS’s primários: É uma estrutura que associa o endereço de uma estação móvel com o endereço de seu MSS primário. Essa lista é global, única para toda a rede, implementada como atributo estático.

Lista de MSS’s secundários: Associa o endereço de uma estação móvel a uma lista de endereços contendo seus MSS secundários. Também é global e única.

Endereço de Mh Endereço de MSS Primário pri_mss

Endereço de Mh

sec_mss

(11)

Lista de mensagens de dados pendentes de confirmação: Associa identificadores a mensagens de dados que precisam ter suas confirmações recebidas pelo MSS. Portanto, cada MSS possui uma lista como esta.

Lista de informações de estado de Mh’s para os quais o MSS é primário: Associa o endereço de Mh’s às suas respectivas informações de estado, para os Mh’s que possuem o MSS como primário. Por isso, cada MSS possui sua lista.

Lista de informações de estado de Mh’s para os quais o MSS é secundário: Associa o endereço de Mh’s às suas respectivas informações de estado, para os Mh’s que possuem o MSS como secundário. Por isso, cada MSS possui sua lista.

Lista de destinos de mensagem Copy, pendentes de confirmação: Associa um identificador de mensagem Copy a uma lista de endereços dos MSS’s que estão para retornar a confirmação de recebimento da mensagem. Cada MSS possui sua lista de destinos pendentes.

Estruturas presentes nos Mh’s:

Lista de mensagens de dados pendentes de confirmação: Associa identificadores a mensagens de dados que precisam ter suas confirmações recebidas pelo Mh. Portanto, cada Mh possui uma lista como esta.

Flag para sinalização de falha do MSS primário: Sinaliza que o Mh foi desconectado do MSS primário por motivo de falha deste. Se essa flag estiver levantada no momento de uma migração, o Mh fica obrigado a reenviar as mensagens pendentes de confirmação. A flag está presente em cada elemento Mh da rede.

4

Simulações determinísticas

As simulações determinísticas foram elaboradas para a verificação do funcionamento do protocolo em momentos de operação normal (sem falhas), com e sem mobilidade das estações e em situações de falha de MSS’s. O script abaixo ilustra tais situações.

Identificador Msg Mensagem de dados dataMsgList

Endereço de Mh Informação de Estado Pri_StateInfo

Endereço de Mh Informação de Estado Sec_StateInfo

Identificador Msg

copyDestList

Endereços de MSS pendentes

(12)

public void script() {

acceptTurnOn(mh1, true); acceptTurnOn(mh2, true); ...

changeShowMode(mh1, SHOW, DetermElement.EVENT_MESSAGE_RECEIVING); ...

changeShowMode(mssA, SHOW, DetermElement.EVENT_MESSAGE_RECEIVING); ... next(SHOW, 0); mh1.moveTo(cellB); next(SHOW, 0); next(SHOW, 0); mh2.moveTo(cellB); next(SHOW, 0); next(SHOW, 0); mh3.moveTo(cellC); next(SHOW, 0); next(SHOW, 0); mh4.moveTo(cellD); next(SHOW, 0); next(SHOW, 0); mh1.moveTo(cellA); mh1.receive(new Data_App(mh1.getWlAddress(),mh2.getWlAddress(), "1","stinfo0000@N#&(!*",true)); next(SHOW, 0); next(SHOW, 0); mh2.moveTo(cellA); next(SHOW, 0); next(SHOW, 0); mh1.receive(new Data_App(mh1.getWlAddress(),mh2.getWlAddress(), "2","stinfo0001slkj82)",true)); next(SHOW, 0); next(SHOW, 0); mssA.receive(new FailNow()); mh1.receive(new Data_App(mh1.getWlAddress(),mh4.getWlAddress(), "3","stinfo0002iflepw)",true)); mh1.receive(new Data_App(mh1.getWlAddress(),mh4.getWlAddress(), "4","stinfo0003pqoisl)",true)); mh1.receive(new Data_App(mh1.getWlAddress(),mh4.getWlAddress(), "5","pqowid)",false)); next(SHOW, 0); mh1.moveTo(cellB); next(SHOW, 0); next(SHOW, 0); }

O script acima, conforme apresentado ao professor, gera resultados tais como o descrito a seguir:

==========MyApp Begin==========

MOBX SIMULATION>> ******* STEP FINISHED! ******* MOBX>> Mh <Mh1> is moving to Cell[MssB]

MOBX>> Element <MssB> receive message <class mobics.ppi.message.Greet> from host <Mh1> [PRFT Mss] Greet = Mh1

MOBX>> Element <MssA> receive message <class .StateInfo> from host <MssB> MOBX>> Element <MssD> receive message <class .StateInfo> from host <MssB> [PRFT Mss] StateInfo = #1076500953296

MOBX>> Element <MssB> receive message <class .AckStateInfo> from host <MssA> [PRFT Mss] StateInfo = #1076500953296

MOBX>> Element <MssB> receive message <class .AckStateInfo> from host <MssD> MOBX>> Element <Mh1> receive message <class .Welcome> from host <MssB> [PRFT Mss] AckStateInfo = #1076500953296 Sec_Mss MssA adicionado para Mh1 [PRFT Mss] AckStateInfo = #1076500953296 Sec_Mss MssD adicionado para Mh1 [PRFT Mh] Welcome from MssB

(13)

MOBX>> Mh <Mh2> is moving to Cell[MssB]

MOBX>> Element <MssB> receive message <class mobics.ppi.message.Greet> from host <Mh2> [PRFT Mss] Greet = Mh2

MOBX>> Element <MssA> receive message <class .StateInfo> from host <MssB> MOBX>> Element <MssD> receive message <class .StateInfo> from host <MssB> [PRFT Mss] StateInfo = #1076500953312

MOBX>> Element <Mh2> receive message <class .Welcome> from host <MssB> [PRFT Mh] Welcome from MssB

MOBX>> Element <MssB> receive message <class .AckStateInfo> from host <MssA> [PRFT Mss] StateInfo = #1076500953312

MOBX>> Element <MssB> receive message <class .AckStateInfo> from host <MssD> [PRFT Mss] AckStateInfo = #1076500953312 Sec_Mss MssA adicionado para Mh2 [PRFT Mss] AckStateInfo = #1076500953312 Sec_Mss MssD adicionado para Mh2 MOBX SIMULATION>> ******* STEP FINISHED! *******

MOBX SIMULATION>> ******* STEP FINISHED! ******* MOBX>> Mh <Mh3> is moving to Cell[MssC]

MOBX>> Element <MssC> receive message <class mobics.ppi.message.Greet> from host <Mh3> [PRFT Mss] Greet = Mh3

MOBX>> Element <MssA> receive message <class .StateInfo> from host <MssC> MOBX>> Element <MssD> receive message <class .StateInfo> from host <MssC> MOBX>> Element <Mh3> receive message <class .Welcome> from host <MssC> [PRFT Mss] StateInfo = #1076500953343

MOBX>> Element <MssC> receive message <class .AckStateInfo> from host <MssD> [PRFT Mss] StateInfo = #1076500953343

MOBX>> Element <MssC> receive message <class .AckStateInfo> from host <MssA> [PRFT Mss] AckStateInfo = #1076500953343 Sec_Mss MssD adicionado para Mh3 [PRFT Mss] AckStateInfo = #1076500953343 Sec_Mss MssA adicionado para Mh3 [PRFT Mh] Welcome from MssC

MOBX SIMULATION>> ******* STEP FINISHED! ******* MOBX SIMULATION>> ******* STEP FINISHED! ******* MOBX>> Mh <Mh4> is moving to Cell[MssD]

MOBX>> Element <MssD> receive message <class mobics.ppi.message.Greet> from host <Mh4> [PRFT Mss] Greet = Mh4

MOBX>> Element <MssB> receive message <class .StateInfo> from host <MssD> MOBX>> Element <MssC> receive message <class .StateInfo> from host <MssD> MOBX>> Element <Mh4> receive message <class .Welcome> from host <MssD> [PRFT Mss] StateInfo = #1076500953359

MOBX>> Element <MssD> receive message <class .AckStateInfo> from host <MssB> [PRFT Mss] StateInfo = #1076500953359

MOBX>> Element <MssD> receive message <class .AckStateInfo> from host <MssC> [PRFT Mh] Welcome from MssD

[PRFT Mss] AckStateInfo = #1076500953359 Sec_Mss MssB adicionado para Mh4 [PRFT Mss] AckStateInfo = #1076500953359 Sec_Mss MssC adicionado para Mh4 MOBX SIMULATION>> ******* STEP FINISHED! *******

MOBX SIMULATION>> ******* STEP FINISHED! ******* MOBX>> Mh <Mh1> is moving to Cell[MssA]

MOBX>> Element <MssA> receive message <class mobics.ppi.message.Greet> from host <Mh1> MOBX>> Element <Mh1> receive message <class .Data_App> from host <Null Address> [PRFT Mh] Data_App = 1

MOBX>> Element <MssA> receive message <class .Data_Mh_Mss> from host <Mh1> [PRFT Mss] Greet = Mh1

MOBX>> Element <MssA> receive message <class .DeleteStateInfo> from host <MssA> MOBX>> Element <MssD> receive message <class .DeleteStateInfo> from host <MssA> MOBX>> Element <MssB> receive message <class .StateInfo> from host <MssA> MOBX>> Element <MssC> receive message <class .StateInfo> from host <MssA> MOBX>> Element <Mh1> receive message <class .Welcome> from host <MssA> [PRFT Mss] Data_Mh_Mss = 1

MOBX>> Element <MssB> receive message <class .Copy> from host <MssA> MOBX>> Element <MssC> receive message <class .Copy> from host <MssA> [PRFT Mss] DeleteStateInfo = #1076500953390

[PRFT Mss] DeleteStateInfo = #1076500953390 [PRFT Mss] StateInfo = #1076500953390

MOBX>> Element <MssA> receive message <class .AckStateInfo> from host <MssB> [PRFT Mss] Copy = 1 - stinfo0000

MOBX>> Element <MssA> receive message <class .AckCopy> from host <MssB> [PRFT Mss] StateInfo = #1076500953390

MOBX>> Element <MssA> receive message <class .AckStateInfo> from host <MssC> [PRFT Mss] Copy = 1 - stinfo0000

MOBX>> Element <MssA> receive message <class .AckCopy> from host <MssC> [PRFT Mss] AckStateInfo = #1076500953390 Sec_Mss MssB adicionado para Mh1 [PRFT Mss] AckStateInfo = #1076500953390 Sec_Mss MssC adicionado para Mh1 [PRFT Mss] AckCopy = 1 - MssB

[PRFT Mss] AckCopy = 1 - MssC

MOBX>> Element <MssB> receive message <class .Data_Mss> from host <MssA> [PRFT Mss] Data_Mss = 1 - MssA

(14)

[PRFT Mh] Data_Mss_Mh = 1

MOBX>> Element <MssB> receive message <class .AckData_Mh_Mss> from host <Mh2> [PRFT Mss] AckData_Mh_Mss = 1

MOBX>> Element <MssA> receive message <class .AckData_Mss> from host <MssB> [PRFT Mss] AckData_Mss = 1

MOBX>> Element <Mh1> receive message <class .AckData_Mss_Mh> from host <MssA> [PRFT Mh] AckData_Mss_Mh = 1

MOBX SIMULATION>> ******* STEP FINISHED! ******* MOBX SIMULATION>> ******* STEP FINISHED! ******* MOBX>> Mh <Mh2> is moving to Cell[MssA]

MOBX>> Element <MssA> receive message <class mobics.ppi.message.Greet> from host <Mh2> [PRFT Mss] Greet = Mh2

MOBX>> Element <MssA> receive message <class .DeleteStateInfo> from host <MssA> MOBX>> Element <MssD> receive message <class .DeleteStateInfo> from host <MssA> MOBX>> Element <MssB> receive message <class .StateInfo> from host <MssA> MOBX>> Element <MssC> receive message <class .StateInfo> from host <MssA> MOBX>> Element <Mh2> receive message <class .Welcome> from host <MssA> [PRFT Mss] DeleteStateInfo = #1076500953421

[PRFT Mss] DeleteStateInfo = #1076500953421 [PRFT Mh] Welcome from MssA

[PRFT Mss] StateInfo = #1076500953421

MOBX>> Element <MssA> receive message <class .AckStateInfo> from host <MssC> [PRFT Mss] StateInfo = #1076500953421

MOBX>> Element <MssA> receive message <class .AckStateInfo> from host <MssB> [PRFT Mss] AckStateInfo = #1076500953421 Sec_Mss MssC adicionado para Mh2 [PRFT Mss] AckStateInfo = #1076500953421 Sec_Mss MssB adicionado para Mh2 MOBX SIMULATION>> ******* STEP FINISHED! *******

MOBX>> Element <Mh1> receive message <class .Data_App> from host <Null Address> [PRFT Mh] Data_App = 2

MOBX>> Element <MssA> receive message <class .Data_Mh_Mss> from host <Mh1> [PRFT Mss] Data_Mh_Mss = 2

MOBX>> Element <MssB> receive message <class .Copy> from host <MssA> MOBX>> Element <MssC> receive message <class .Copy> from host <MssA> [PRFT Mss] Copy = 2 - stinfo0001

MOBX>> Element <MssA> receive message <class .AckCopy> from host <MssB> [PRFT Mss] Copy = 2 - stinfo0001

MOBX>> Element <MssA> receive message <class .AckCopy> from host <MssC> [PRFT Mss] AckCopy = 2 - MssB

[PRFT Mss] AckCopy = 2 - MssC

MOBX>> Element <MssA> receive message <class .Data_Mss> from host <MssA> [PRFT Mss] Data_Mss = 2 - MssA

MOBX>> Element <Mh2> receive message <class .Data_Mss_Mh> from host <MssA> [PRFT Mh] Data_Mss_Mh = 2

MOBX>> Element <MssA> receive message <class .AckData_Mh_Mss> from host <Mh2> [PRFT Mss] AckData_Mh_Mss = 2

MOBX>> Element <MssA> receive message <class .AckData_Mss> from host <MssA> [PRFT Mss] AckData_Mss = 2

MOBX>> Element <Mh1> receive message <class .AckData_Mss_Mh> from host <MssA> [PRFT Mh] AckData_Mss_Mh = 2

MOBX SIMULATION>> ******* STEP FINISHED! ******* MOBX SIMULATION>> ******* STEP FINISHED! *******

MOBX>> Element <Mh1> receive message <class .Data_App> from host <Null Address> MOBX>> Element <MssA> receive message <class .FailNow> from host <Null Address> MOBX>> Element <Mh1> receive message <class .Data_App> from host <Null Address> MOBX>> Element <Mh1> receive message <class .Data_App> from host <Null Address> [PRFT Mss] FailNow = MssA

MOBX>> Element <MssB> receive message <class .MssFail_Mss> from host <MssA> MOBX>> Element <MssC> receive message <class .MssFail_Mss> from host <MssA> MOBX>> Element <Mh2> receive message <class .MssFail_Mh> from host <MssA> [PRFT Mh] Data_App = 3

MOBX>> Element <MssA> receive message <class .Data_Mh_Mss> from host <Mh1> [PRFT Mh] Data_App = 4

MOBX>> Element <MssA> receive message <class .Data_Mh_Mss> from host <Mh1> [PRFT Mh] Data_App = 5

MOBX>> Element <MssA> receive message <class .Data_Mh_Mss> from host <Mh1> [PRFT Mss] MssFail_Mss = MssA

MOBX>> Element <Mh1> receive message <class .MssFail_Mh> from host <MssA> [PRFT Mss] MssFail_Mss = MssA

[PRFT Mh] MssFail_Mh = MssA [PRFT Mh] MssFail_Mh = MssA

MOBX SIMULATION>> ******* STEP FINISHED! ******* MOBX>> Mh <Mh1> is moving to Cell[MssB]

MOBX>> Element <MssB> receive message <class mobics.ppi.message.Greet> from host <Mh1> [PRFT Mss] Greet = Mh1

(15)

[PRFT Mss] StateInfo = #1076500953500

MOBX>> Element <MssB> receive message <class .AckStateInfo> from host <MssD> MOBX>> Element <Mh1> receive message <class .Welcome> from host <MssB> [PRFT Mh] Welcome from MssB

MOBX>> Element <MssB> receive message <class .Data_Mh_Mss> from host <Mh1> MOBX>> Element <MssB> receive message <class .Data_Mh_Mss> from host <Mh1> MOBX>> Element <MssB> receive message <class .Data_Mh_Mss> from host <Mh1> [PRFT Mss] DeleteStateInfo = #1076500953500

[PRFT Mss] Data_Mh_Mss = 5

MOBX>> Element <MssD> receive message <class .Data_Mss> from host <MssB> [PRFT Mss] Data_Mh_Mss = 3

MOBX>> Element <MssD> receive message <class .Copy> from host <MssB> [PRFT Mss] AckStateInfo = #1076500953500 Sec_Mss MssD adicionado para Mh1 [PRFT Mss] Data_Mh_Mss = 4

MOBX>> Element <MssD> receive message <class .Copy> from host <MssB> [PRFT Mss] DeleteStateInfo = #1076500953500

[PRFT Mss] Data_Mss = 5 - MssB

MOBX>> Element <Mh4> receive message <class .Data_Mss_Mh> from host <MssD> [PRFT Mss] Copy = 3 - stinfo0002

MOBX>> Element <MssB> receive message <class .AckCopy> from host <MssD> [PRFT Mss] Copy = 4 - stinfo0003

MOBX>> Element <MssB> receive message <class .AckCopy> from host <MssD> [PRFT Mh] Data_Mss_Mh = 5

MOBX>> Element <MssD> receive message <class .AckData_Mh_Mss> from host <Mh4> [PRFT Mss] AckCopy = 3 - MssD

MOBX>> Element <MssD> receive message <class .Data_Mss> from host <MssB> [PRFT Mss] AckCopy = 4 - MssD

MOBX>> Element <MssD> receive message <class .Data_Mss> from host <MssB> [PRFT Mss] AckData_Mh_Mss = 5

MOBX>> Element <MssB> receive message <class .AckData_Mss> from host <MssD> [PRFT Mss] Data_Mss = 3 - MssB

[PRFT Mss] AckData_Mss = 5

MOBX>> Element <Mh1> receive message <class .AckData_Mss_Mh> from host <MssB> [PRFT Mh] AckData_Mss_Mh = 5

MOBX>> Element <Mh4> receive message <class .Data_Mss_Mh> from host <MssD> [PRFT Mss] Data_Mss = 4 - MssB

MOBX>> Element <Mh4> receive message <class .Data_Mss_Mh> from host <MssD> [PRFT Mh] Data_Mss_Mh = 3

MOBX>> Element <MssD> receive message <class .AckData_Mh_Mss> from host <Mh4> [PRFT Mh] Data_Mss_Mh = 4

MOBX>> Element <MssD> receive message <class .AckData_Mh_Mss> from host <Mh4> [PRFT Mss] AckData_Mh_Mss = 3

MOBX>> Element <MssB> receive message <class .AckData_Mss> from host <MssD> [PRFT Mss] AckData_Mss = 3

MOBX>> Element <Mh1> receive message <class .AckData_Mss_Mh> from host <MssB> [PRFT Mss] AckData_Mh_Mss = 4

MOBX>> Element <MssB> receive message <class .AckData_Mss> from host <MssD> [PRFT Mh] AckData_Mss_Mh = 3

[PRFT Mss] AckData_Mss = 4

MOBX>> Element <Mh1> receive message <class .AckData_Mss_Mh> from host <MssB> [PRFT Mh] AckData_Mss_Mh = 4

MOBX SIMULATION>> ******* STEP FINISHED! ******* ===========MyApp End===========

O bom funcionamento pode ser observado no momento da migração, quando os MSS secundários (MSS vizinhos) devem receber as informações de estado da estação móvel. Isso fica explícito nas linhas de recebimento de Greet (migração) que são em breve seguidas por mensagens StateInfo (informação do estado). As mensagens Welcome também foram geradas com sucesso.

No envio de mensagens de dados, foi verificado o envio das mensagens Copy caso a mensagem original demande a atualização do estado do Mh nos MSS’s. As confirmações também foram recebidas corretamente.

(16)

mensagens StateInfo para os MSS secundários atuais. Após esse tratamento, as mensagens de dados enviadas pela estação móvel foram corretamente entregues, acompanhadas de mensagens Copy quando necessárias.

5

Simulações Estocásticas

A análise das simulações estocásticas visou apresentar o desempenho do protocolo de tolerância a falhas em MSS através do acompanhamento (i) do overhead de mensagens de replicação frente à mobilidade, (ii) do número de mensagens de dados retransmitidas frente à mobilidade e (iii) do número de retransmissões devido à presença de falhas em MSS’s.

5.1 Mensagens de Replicação x Mobilidade

A comparação entre número de mensagens de replicação e probabilidade de migração é útil para observarmos o overhead inserido pelo algortimo conforme o comportamento das unidades móveis. Mensagens de replicação são as mensagens responsáveis pela manutenção do estado do Mh nos MSS secundários, o que inclui mensagens Copy, StateInfo e DeleteStateInfo. Para a exposição da Figura 5.1 não foram consideradas as mensagens de reconhecimento (Acks) e a rede simulada possui 120 Mh’s e 75 MSS’s.

Mensagens Replicação x Mobilidade

em simulações com 10000 mensagens de dados

20000 21000 22000 23000 24000 25000 26000 0,1 0,15 0,2 0,25 0,3 0,35 0,4 0,45 0,5 Mobilidade M en sag en s d e r ep lica çã o

Figura 5.1 Mensagens de Replicação x Mobilidade

(17)

DeleteStateInfo e StateInfo são trocadas entre os MSS’s. Pode-se concluir que o overhead é sempre maior que N vezes o número de mensagens de dados com atualização de estado.

5.2 Mensagens de Dados Retransmitidas x Mobilidade

Observar o número de mensagens retransmitidas conforme varia a migração das unidades móveis e torna interessante já que o protocolo implementa a função de encaminhamento de pacotes. Nota-se que a mobilidade pode levar à necessidade de retransmissão devido à ausência das unidades móveis transmissoras ou receptoras no momento da recepção de reconhecimentos e dos próprios dados, respectivamente. Nem todas as mensagens a serem retransmitidas realmente não chegaram a seu destino. Na mesma simulação utilizada no item anterior, obteve-se o gráfico da Figura 5.2. A taxa de mensagens retransmitidas é calculada através da divisão entre o número de mensagens efetivamente entregues (com reconhecimento) e o número de mensagens enviadas pelos MSS’s primários (Data_Mss).

Mensagens retransmmitidas x Mobilidade

em simulações com 10000 mensagens de dados

10,00% 15,00% 20,00% 25,00% 30,00% 35,00% 40,00% 45,00% 0,1 0,15 0,2 0,25 0,3 0,35 0,4 0,45 0,5 Mobilidade P er cen ta g em R et ran sm it id a

Figura 5.2 – Mensagens de dados retransmitidas x Mobilidade

Analisando o gráfico, nota-se um grande crescimento de mensagens retransmitidas até a taxa de mobilidade de 20%. A partir dos 25% de probabilidade de migração, a taxa de mensagens retransmitidas aumenta suavemente e tende a estabilizar em torno dos 42%.

5.3 Mensagens Retransmitidas x Presença de Falhas

(18)

probabilidade de migração nula (para isolarmos a análise), e os mesmo 75 MSS’s. Foi gerada a presença de erros em 3 a 11 MSS’s, ou seja, probabilidade de falha entre 4 e 14%.

Taxa de Retransmissão x Falhas

0,00% 2,00% 4,00% 6,00% 8,00% 10,00% 12,00% 14,00% 3 4 5 6 7 8 9 10 Número de Falhas Taxa de retransmissão

Figura 5.3 – Mensagens de dados retransmitidas x Falhas

6

Referências Bibliográficas

[Alagar93]

Referências

Documentos relacionados

O valor da reputação dos pseudônimos é igual a 0,8 devido aos fal- sos positivos do mecanismo auxiliar, que acabam por fazer com que a reputação mesmo dos usuários que enviam

forficata recém-colhidas foram tratadas com escarificação mecânica, imersão em ácido sulfúrico concentrado durante 5 e 10 minutos, sementes armazenadas na geladeira (3 ± 1

Foram analisados a relação peso-comprimento e o fator de condição de Brycon opalinus, em três rios do Parque Estadual da Serra do Mar-Núcleo Santa Virgínia, Estado de São

Os supercondutores magnéticos, volantes de inércia e os condensadores são apropriados para aplicações que necessitam de grande potência de saída em pouca

da quem praticasse tais assaltos às igrejas e mosteiros ou outros bens da Igreja, 29 medida que foi igualmente ineficaz, como decorre das deliberações tomadas por D. João I, quan-

Sendo assim, percebe-se que o serviço de acolhimento constituiu-se, sobretudo, da necessidade de humanizar o atendimento, bem como de torna-lo mais ágil e efetivo, garantindo, desse

(essencialmente toalhas adamascadas, damasquilho de linho e algodão, panos de linho e lenços de linho e algodão, desenvolvidos essencialmente em 17 freguesias do concelho

O primeiro passo para introduzir o MTT como procedimento para mudança do comportamento alimentar consiste no profissional psicoeducar o paciente a todo o processo,