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

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

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

Funções auxiliares<br />

// Devolve um vector das operações que se sabe ser<strong>em</strong> conhecidas no servidor to_srv<br />

function knownOps( o, to_srv): vector // Golding<br />

(1) return l : l[i] := o.a[to_srv], ∀ i<br />

function knownOps( o, to_srv): vector // Matriz<br />

(1) return l : l[i] := o.a[to_srv][i], ∀ i<br />

// Devolve verda<strong>de</strong>iro se se pensa que o servidor to_srv <strong>de</strong>sconhece o coobjecto o<br />

function unknownObj( o, to_srv): boolean<br />

(1) return o.l[to_srv] = −1<br />

Funções do protocolo<br />

procedure uniEpi<strong>de</strong>mic( Ob js,to_srv)<br />

(1) send (view_id)<br />

(2) nStep := 1; full := Ob js = U<br />

(3) send (nStep,full)<br />

(4) for ∀ o ∈ Ob js do<br />

(5) updateClock(o)<br />

(6) if unknownObj( o, to_srv) then<br />

(7) send (new state,o.id,o)<br />

(8) else<br />

(9) l := knownOps( o, to_srv)<br />

(10) send (sync,o.id,o.l,o.a,l,unknownOps(o,l))<br />

(11) end if<br />

(12) end for<br />

(13) send (end)<br />

Figura A.4: Funções do protocolo <strong>de</strong> sincronização unilateral (simplificado).<br />

replicadores do volume. Assim, a política <strong>de</strong> sincronização <strong>de</strong>ve ter <strong>em</strong> atenção este facto <strong>de</strong> forma a<br />

que as mudanças no grupo <strong>de</strong> replicadores sejam propagadas para todos os servidores.<br />

Quando, <strong>de</strong>vido à informação local <strong>de</strong>sactualizada, um servidor selecciona executar uma sessão <strong>de</strong><br />

sincronização com um outro servidor que <strong>de</strong>ixou <strong>de</strong> replicar o volume, a sessão <strong>de</strong> sincronização é<br />

recusada. No entanto, os servidores que abandonam o grupo <strong>de</strong> replicadores mantém t<strong>em</strong>porariamente<br />

a informação sobre o conjunto <strong>de</strong> servidores que replicavam o volume no momento da sua r<strong>em</strong>oção —<br />

esta informação é <strong>de</strong>volvida aos servidores que tentam estabelecer sessões <strong>de</strong> sincronização e po<strong>de</strong>rá ser<br />

usada pela política <strong>de</strong> sincronização para <strong>de</strong>terminar o próximo servidor a ser contactado.<br />

Em situações extr<strong>em</strong>as, quando exist<strong>em</strong> várias entradas e saídas no grupo <strong>de</strong> replicadores num curto<br />

intervalo <strong>de</strong> t<strong>em</strong>po s<strong>em</strong> que as respectivas operações possam ser propagadas entre os servidores, é pos-<br />

sível que existam dois servidores, i e j, que replicam um mesmo volume e que não conhec<strong>em</strong> nenhum<br />

servidor activo que lhe permita conhecer o outro, i.e., (usando a → b para representar que a sabe que b<br />

pertence ao grupo <strong>de</strong> replicadores e activo(a) para representar que o servidor a não abandonou o grupo<br />

<strong>de</strong> replicadores) ¬∃s0,...,sn : i → s0 ∧ activo(s0) ∧ s0 → s1 ∧ activo(s1) ∧ ... ∧ sn → j. Nesta situação, a<br />

execução <strong>de</strong> sessões <strong>de</strong> sincronização apenas com o conjunto dos servidores que pertenc<strong>em</strong> à vista actual<br />

po<strong>de</strong>ria levar à criação <strong>de</strong> subconjuntos isolados <strong>de</strong> replicadores que não comunicam entre si.

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

Saved successfully!

Ooh no, something went wrong!