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 213<br />

mais <strong>de</strong>talhada foi apresentada anteriormente <strong>em</strong> [125]. Antes <strong>de</strong> apresentar os algoritmos, <strong>de</strong>screve-se<br />

a informação utilizada para controlar o seu funcionamento.<br />

A.2.1 Informação utilizada<br />

Em cada cópia do coobjecto é mantido um sumário das operações conhecidas. Este sumário é repre-<br />

sentado como um vector-versão l, <strong>em</strong> que, l[i] = ni significa que a cópia do coobjecto conhece todas as<br />

operações i<strong>de</strong>ntificadas no servidor i com um número <strong>de</strong> sequência igual ou inferior a ni (a cópia do coob-<br />

jecto po<strong>de</strong>, ainda, conhecer operações com número <strong>de</strong> sequência superior a ni). Estes sumários mantêm<br />

informação relativa, não só, aos servidores activos, mas também, aos servidores r<strong>em</strong>ovidos ainda não<br />

eliminados. Em cada servidor i, l[i] mantém o valor actual do relógio lógico usado para i<strong>de</strong>ntificar as<br />

novas operações nesse servidor — a nova operação será i<strong>de</strong>ntificada com o número <strong>de</strong> sequência l[i] + 1<br />

e o valor <strong>de</strong> l[i] será actualizado para reflectir a nova operação (l[i] ← l[i] + 1).<br />

Cada cópia dum coobjecto mantém ainda informação sobre as operações conhecidas nos outros ser-<br />

vidores. Como se referiu na secção 3.3.2, foram <strong>de</strong>finidas duas estratégias que po<strong>de</strong>m ser usadas pelos<br />

coobjectos. Na primeira estratégia, cada réplica mantém uma matriz m, <strong>em</strong> que m[i, j] = mi j significa que<br />

se sabe que o servidor i conhece todas as operações submetidas <strong>em</strong> j com número <strong>de</strong> sequência menor ou<br />

igual a m i j . Na segunda estratégia, mantém-se um vector m, <strong>em</strong> que m[i] = mi significa que se sabe que<br />

o servidor i conhece todas as operações submetidas <strong>em</strong> todos os servidores com número <strong>de</strong> sequência<br />

igual ou inferior a mi. Esta segunda aproximação, proposta <strong>em</strong> [57], permite reduzir o espaço necessário<br />

— <strong>em</strong> [125] discute-se a utilização <strong>de</strong>sta i<strong>de</strong>ia e a importância da actualização local do valor <strong>de</strong> l[i] para<br />

que o valor <strong>de</strong> a possa evoluir rapidamente.<br />

A informação sobre as operações conhecidas nos outros servidores é usada para r<strong>em</strong>over as operações<br />

não necessárias. Assim, uma operação que seja conhecida <strong>em</strong> todos os outros servidores e já tenha sido<br />

executada <strong>de</strong>finitivamente po<strong>de</strong> ser r<strong>em</strong>ovida.<br />

A.2.2 Protocolo <strong>de</strong> propagação epidémica bilateral<br />

O protocolo <strong>de</strong> propagação epidémica bilateral é construído com base nas seguintes quatro operações<br />

executadas relativamente a coobjectos do volume, com id o i<strong>de</strong>ntificador do coobjecto a sincronizar e a<br />

a informação sobre as operações que se sabe ser<strong>em</strong> conhecidas noutros servidores (usando qualquer uma<br />

das estratégias <strong>de</strong>scritas anteriormente):<br />

(asksync,id,l,a) Pe<strong>de</strong> o envio das operações não conhecidas localmente, i.e., não reflectidas no sumário<br />

l.<br />

Ao receber esta operação, o servidor po<strong>de</strong> actualizar a informação sobre as operações conhecidas<br />

nos outros servidores.

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

Saved successfully!

Ooh no, something went wrong!