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.

198 APÊNDICE A. DOORS<br />

com um par (srvvol,n_seq), <strong>em</strong> que n_seq é um número inteiro maior do que o n_seq atribuído a qualquer<br />

outra operação conhecida localmente.<br />

O estado do coobjecto <strong>de</strong> filiação é constituído por um conjunto, M , <strong>de</strong> triplos (srvvol,srvview,estado),<br />

<strong>em</strong> que srvvol é o i<strong>de</strong>ntificador único do servidor (como explicado anteriormente), srvview é o i<strong>de</strong>ntifica-<br />

dor do servidor na vista <strong>de</strong>finida pelo estado actual do coobjecto <strong>de</strong> filiação do volume (é um número<br />

inteiro maior do que zero) e estado t<strong>em</strong> o valor activo, caso o servidor pertença ao grupo <strong>de</strong> replicadores,<br />

ou r<strong>em</strong>ovido, caso o servidor tenha sido r<strong>em</strong>ovido do grupo <strong>de</strong> replicadores (usa-se M i para <strong>de</strong>signar o<br />

valor <strong>de</strong> M na réplica do coobjecto <strong>de</strong> filiação do servidor i). O estado inicial do coobjecto <strong>de</strong> filiação<br />

contém apenas a informação relativa ao servidor no qual o volume foi criado (M = {(idsrv,1,activo)}).<br />

Seja O o conjunto <strong>de</strong> operações reflectidas no estado do coobjecto <strong>de</strong> filiação. Um sumário <strong>de</strong>stas<br />

operações é <strong>de</strong>finido através <strong>de</strong> um vector-versão v, <strong>em</strong> que v[i] = nmax, tal que, dado (id,i,_) ∈ M<br />

(com _ a <strong>de</strong>signar qualquer valor possível)), se t<strong>em</strong> nmax = max({n : o ∈ O ∧ i<strong>de</strong>nt(o) = (id,n)} ∪<br />

n : o ∈ O ∧ i<strong>de</strong>nt(o) = (_,n) ∧ o = insert(id)), com i<strong>de</strong>nt(o) o par com que a operação o foi i<strong>de</strong>ntificada<br />

(ou seja, cada posição, i, reflecte o maior n_seq das operações executadas que foram i<strong>de</strong>ntificadas pelo<br />

servidor com i<strong>de</strong>ntificador i na vista actual ou o n_seq da operação que o inseriu no grupo <strong>de</strong> replicado-<br />

res). Se o i<strong>de</strong>ntificador local i não estiver atribuído a nenhum servidor v[i] = ⊤ (com ⊤ > n,∀n ∈ N). De<br />

forma idêntica <strong>de</strong>fine-se o vector versão das operações que modificam a filiação, consi<strong>de</strong>rando apenas o<br />

conjunto das operações que têm influência directa na filiação — inserção, r<strong>em</strong>oção e eliminação.<br />

O estado do coobjecto <strong>de</strong> filiação num servidor é obtido consi<strong>de</strong>rando todas as operações conhe-<br />

cidas localmente para as quais não existam operações anteriores submetidas no mesmo servidor que<br />

não sejam conhecidas (ou seja, é consi<strong>de</strong>rado o seguinte conjunto <strong>de</strong> operações: {op : i<strong>de</strong>nt(op) =<br />

(idi,n_seq) ∧ ¬∃op1 : i<strong>de</strong>nt(op1) = (id j,n_seq1) ∧ idi = id j ∧ n_seq > n_seq1}, com i<strong>de</strong>nt(o) o i<strong>de</strong>ntifi-<br />

cador atribuído à operação o). O mecanismo <strong>de</strong> propagação epidémico <strong>de</strong> operações (o único usado para<br />

propagar operações do coobjecto <strong>de</strong> filiação) garante esta proprieda<strong>de</strong> para todas as operações conhecidas<br />

localmente.<br />

A or<strong>de</strong>m total pela qual estas operações são executadas <strong>em</strong> todas as cópias do coobjecto é a seguinte.<br />

A partir do estado inicial, as operações são executadas sequencialmente escolhendo <strong>em</strong> cada iteração a<br />

operação com menor n_seq. Entre as operações com igual n_seq, escolhe-se aquela que tenha associado<br />

o i<strong>de</strong>ntificador <strong>de</strong> servidor com menor i<strong>de</strong>ntificador local na vista <strong>de</strong>finida actualmente.<br />

A execução da operação <strong>de</strong> inserção <strong>de</strong> um servidor no grupo <strong>de</strong> replicadores do volume insere o<br />

trio (idnew, posnew,activo) <strong>em</strong> M , sendo idnew o i<strong>de</strong>ntificador gerado para i<strong>de</strong>ntificar o novo servidor<br />

no grupo <strong>de</strong> replicadores e posnew o menor número inteiro maior do que zero que não é usado como<br />

i<strong>de</strong>ntificador <strong>de</strong> outro servidor na vista actual. A cópia inicial do coobjecto <strong>de</strong> filiação no novo servidor<br />

reflecte s<strong>em</strong>pre a execução da operação que o inseriu no grupo <strong>de</strong> replicadores.

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

Saved successfully!

Ooh no, something went wrong!