11.04.2013 Views

gestão de dados partilhados em ambientes de computação móvel

gestão de dados partilhados em ambientes de computação móvel

gestão de dados partilhados em ambientes de computação móvel

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

A.2. SINCRONIZAÇÃO EPIDÉMICA 217<br />

i e j conhec<strong>em</strong> o coobjecto o<br />

(1) i (asksync,...)<br />

−−−−−−→ j<br />

(sync,...)<br />

(2) j ←−−−−− i<br />

i conhece todas as operações conhecidas <strong>em</strong> j<br />

(3) i (sync,...)<br />

−−−−−→ j<br />

i<br />

j conhece todas as operações conhecidas <strong>em</strong><br />

i conhece o coobjecto o e j não conhece<br />

(1) i (asksync,...)<br />

−−−−−−→ j<br />

(askstate,...)<br />

(2) j ←−−−−−−− i<br />

(3) i (newstate,...)<br />

−−−−−−−→ j<br />

j obtém o estado <strong>de</strong> o conhecido <strong>em</strong> i<br />

j conhece o coobjecto o e i não conhece<br />

(1) i noop<br />

−−→ j<br />

(asksync,...)<br />

(2) j ←−−−−−− i<br />

(3) i (askstate,...)<br />

−−−−−−−→ j<br />

(newstate,...)<br />

(3) j ←−−−−−−− j<br />

i obtém o estado <strong>de</strong> o conhecido <strong>em</strong> j<br />

Figura A.3: Descrição da sincronização <strong>de</strong> um coobjecto usando o protocolo <strong>de</strong> sincronização bilateral.<br />

servidor que recebe as mensagens verifica se se encontra na mesma vista do servidor que enviou as men-<br />

sagens (linhas 2-4 da função stepBiE pi<strong>de</strong>mic). Caso se encontr<strong>em</strong> <strong>em</strong> vistas diferentes, as mensagens<br />

recebidas são ignoradas e os servidores iniciam um protocolo <strong>de</strong> sincronização das vistas, enviando para<br />

o outro servidor todas as operações relativas ao coobjecto <strong>de</strong> filiação <strong>de</strong>sconhecidas pelo outro servidor.<br />

Na figura A.3 apresentam-se as diferentes possibilida<strong>de</strong>s <strong>de</strong> sincronização <strong>de</strong> um coobjecto, <strong>de</strong>pen-<br />

<strong>de</strong>ndo <strong>de</strong> o coobjecto ser já conhecido nos servidores quando o protocolo é iniciado. Assim, verifica-se<br />

que o protocolo <strong>de</strong> sincronização se po<strong>de</strong> concluir ao fim da quarta interacção, i.e., quando o servidor<br />

que iniciou o protocolo recebe uma resposta pela segunda vez — nesse momento, cada um dos servido-<br />

res recebeu as operações conhecidas pelo outro servidor no momento <strong>em</strong> que iniciou a participação no<br />

protocolo. No entanto, como o protocolo po<strong>de</strong> ser estabelecido usando meios <strong>de</strong> comunicação assíncro-<br />

nos, a latência da comunicação po<strong>de</strong> aconselhar a que o protocolo continue por mais alguns passos. No<br />

código apresentado na figura A.2 esta <strong>de</strong>cisão <strong>de</strong>ve ser <strong>de</strong>finida na função lastStep. No último passo do<br />

protocolo, o servidor limita-se a processar as operações recebidas do parceiro s<strong>em</strong> lhes respon<strong>de</strong>r.<br />

O protocolo impl<strong>em</strong>entado no sist<strong>em</strong>a DOORS apresenta algumas diferenças <strong>de</strong> pormenor <strong>em</strong> rela-<br />

ção ao código das figuras A.1 e A.2. Primeiro, ao conjunto <strong>de</strong> coobjectos a sincronizar, Ob js, é adicio-<br />

nado o conjunto <strong>de</strong> coobjectos necessários para os instanciar (i.e., seja o co<strong>de</strong><br />

i<br />

código para instanciar o coobjecto oi, t<strong>em</strong>-se Ob js ← Ob js ∪ {o co<strong>de</strong><br />

i<br />

o coobjecto que contém o<br />

: oi ∈ Ob js}). Adicionalmente, os<br />

coobjectos que contêm código para instanciar outros coobjectos são processados antes <strong>de</strong>sses coobjectos<br />

(i.e., o co<strong>de</strong><br />

i<br />

é processado antes <strong>de</strong> oi) — <strong>de</strong>sta forma garante-se que um servidor contém s<strong>em</strong>pre o código<br />

necessário a processar as operações relativas aos coobjectos.<br />

A segunda diferença consiste numa optimização para omitir o envio <strong>de</strong> informação que se sabe que o<br />

parceiro conhece. Assim, um servidor omite s<strong>em</strong>pre o envio <strong>de</strong> operações (sync,...) <strong>de</strong>s<strong>de</strong> que as seguin-<br />

tes condições se verifiqu<strong>em</strong>: (1) não exist<strong>em</strong> operações a enviar; (2) o sumário das operações conhecidas<br />

pelos dois parceiros é igual 8 — o sumário das operações conhecidas no parceiro é o recebido durante o<br />

8 Esta condição não é idêntica à anterior porque é possível sumários diferentes reflectir<strong>em</strong> o mesmo conjunto <strong>de</strong> operações<br />

— por ex<strong>em</strong>plo, se l[i] = n e l[i] = n + 1 reflect<strong>em</strong> o mesmo conjunto <strong>de</strong> operações se não existir (no presente n<strong>em</strong> no futuro)<br />

nenhuma operação submetida <strong>em</strong> i com número <strong>de</strong> sequência n + 1.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!