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

Variáveis globais para um dado volume vol<br />

U ← todos os coobjectos<br />

Del ← i<strong>de</strong>ntificadores dos coobjectos r<strong>em</strong>ovidos<br />

view_id ← i<strong>de</strong>ntificador da vista actualmente instalada no servidor<br />

srv ← i<strong>de</strong>ntificador do servidor na vista instalada<br />

m<strong>em</strong>b ← coobjecto <strong>de</strong> filiação<br />

Variáveis <strong>de</strong>finidas para um coobjecto o<br />

o.id ← i<strong>de</strong>ntificador do coobjecto no volume Id_local<br />

o.l ← sumário das operações conhecidas <strong>em</strong> o<br />

o.a ← informação sobre operações conhecidas noutro servidores<br />

o.ops ← conjunto <strong>de</strong> operações conhecidas <strong>em</strong> o<br />

Variáveis usadas para i<strong>de</strong>ntificar uma operação op<br />

op.srv ← i<strong>de</strong>ntificador do servidor<br />

op.nseq ← número <strong>de</strong> sequência da operação<br />

Variáveis usadas durante o protocolo<br />

lastStep ← <strong>de</strong>fine se se está no último passo do protocolo<br />

Funções auxiliares<br />

function exists( id): boolean<br />

(1) return {o ∈ U : o.id = id} = /0<br />

function r<strong>em</strong>oved( id): boolean<br />

(1) return {id0 ∈ Del : id0 = id} = /0<br />

function getCoobject( id): coobject<br />

(1) return o ∈ U : o.id = id<br />

function unknowOps( o, l): set<br />

(1) return {op ∈ o.ops : op.nseq > l[op.srv]}<br />

function unknowM<strong>em</strong>bOps( l): set<br />

(1) return {op ∈ m<strong>em</strong>b.ops : op.nseq > l[op.srv] ∨<br />

op.srv não representado <strong>em</strong> l}<br />

procedure send0( msg)<br />

(1) if NOT lastStep then send msg end if<br />

procedure updateLogged(o,l_0,l)<br />

(1) ∀ n, o.l[n] ≥ l_0[n] ⇒ o.l[n] := max(o.l[n],l[n])<br />

procedure updateClock( o)<br />

(1) o.l[srv] := max{o.l[n] : ∀ n}<br />

procedure updateAck( o, a) // Golding<br />

(1) o.a[srv] := min{o.l[n] : ∀ n}<br />

(2) o.a[n] := max(o.a[n],a[n]), ∀ n, n = srv<br />

procedure updateAck( o, a) // Matriz<br />

(1) o.a[srv][n] := o.l[n] : ∀ n<br />

(2) o.a[m][n] := max(o.a[m][n],a[m][n]), ∀ n,m, m = srv<br />

Figura A.1: Funções básicas e informação usada no protocolo <strong>de</strong> sincronização bilateral (simplificado).

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

Saved successfully!

Ooh no, something went wrong!