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.

6.3. CLIENTES 99<br />

seguinte informação (in<strong>de</strong>pen<strong>de</strong>nt<strong>em</strong>ente <strong>de</strong>, no momento, manter uma cópia <strong>de</strong>sse coobjecto).<br />

Primeiro, um vector versão, r, que reflecte as operações observadas nas versões lidas anteriormente.<br />

Este vector é actualizado s<strong>em</strong>pre que uma nova versão do coobjecto é lida pelo utilizador, fazendo r[i] =<br />

max(r[i],o.v[i]), com o.v a versão do coobjecto lida. A primeira proprieda<strong>de</strong> é garantida se a versão do<br />

coobjecto a <strong>de</strong>volver, o.v, for superior ao vector r, i.e., o.v[i] ≥ r[i],∀i.<br />

Segundo, o cliente mantém um vector t<strong>em</strong>poral, w, que reflecte as operações escritas pelo utilizador.<br />

Este vector é actualizado s<strong>em</strong>pre que uma operação submetida pelo utilizador é propagada para o servi-<br />

dor, fazendo w[id.srvview] = id.n_seq, com id o i<strong>de</strong>ntificador da operação submetida (este i<strong>de</strong>ntificador é<br />

<strong>de</strong>volvido pelo servidor). A segunda proprieda<strong>de</strong> é garantida se a versão do objecto a <strong>de</strong>volver, o.v, for<br />

superior ao vector w, i.e., o.v[i] ≥ w[i],∀i.<br />

Finalmente, o cliente mantém o i<strong>de</strong>ntificador da vista <strong>em</strong> que os vectores t<strong>em</strong>porais anteriores são<br />

válidos. Quando o cliente <strong>de</strong>tecta uma mudança <strong>de</strong> vista, os vectores t<strong>em</strong>porais anteriores são convertidos<br />

na nova vista usando a operação disponibilizada no coobjecto <strong>de</strong> filiação.<br />

As proprieda<strong>de</strong>s referidas anteriormente apenas são garantidas para acessos executados a partir <strong>de</strong><br />

um mesmo cliente e pelo período <strong>de</strong> t<strong>em</strong>po indicado na configuração do cliente. Se um utilizador não<br />

ace<strong>de</strong>r a um coobjecto durante o período <strong>de</strong> t<strong>em</strong>po indicado, a informação do utilizador relativa a esse<br />

coobjecto é r<strong>em</strong>ovida.<br />

Quando uma aplicação grava as modificações efectuadas a um coobjecto, o cliente extrai as operações<br />

executadas e guarda-as <strong>em</strong> m<strong>em</strong>ória estável para posterior propagação para o servidor. Após as operações<br />

estar<strong>em</strong> guardadas <strong>em</strong> m<strong>em</strong>ória estável, o coobjecto é informado do facto e a aplicação po<strong>de</strong> continuar a<br />

manipular essa cópia do coobjecto (e executar novas gravações mais tar<strong>de</strong>).<br />

S<strong>em</strong>pre que possível (i.e., <strong>de</strong>s<strong>de</strong> que as primeiras sequências ainda não tenham sido propagadas),<br />

o cliente combina as sequências <strong>de</strong> operações que resultam <strong>de</strong> modificações à mesma cópia privada<br />

<strong>de</strong> um coobjecto numa única sequência, <strong>de</strong> forma a reflectir a causalida<strong>de</strong> existente na sua execução.<br />

Quando isso não é possível, o cliente garante que envia as operações para o mesmo servidor por or<strong>de</strong>m<br />

<strong>de</strong> gravação.<br />

Além <strong>de</strong> extrair a sequência <strong>de</strong> operações executadas para propagação para um servidor, o cliente<br />

grava o estado actual do coobjecto como uma versão provisória. Desta forma, <strong>em</strong> sucessivos acessos<br />

a um coobjecto durante um período <strong>de</strong> <strong>de</strong>sconexão, os utilizadores po<strong>de</strong>m observar as modificações<br />

efectuadas anteriormente. Se as limitações <strong>de</strong> espaço disponível para as cópias locais o permitir<strong>em</strong>, o<br />

cliente mantém também a versão obtida directamente do servidor.<br />

Quando uma aplicação grava um novo coobjecto, o cliente obtém uma cópia do estado actual do<br />

coobjecto, que é propagada para o servidor para servir como estado inicial do coobjecto.

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

Saved successfully!

Ooh no, something went wrong!