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
42 CAPÍTULO 3. APRESENTAÇÃO DO SISTEMA DOORS 3.3.7 Cápsula A cápsula define a composição de um coobjecto e controla o seu funcionamento, definindo a forma como são processadas localmente as invocações executadas pelas aplicações (e que o componente de adaptação decide executar localmente). Adicionalmente, implementa as operações definidas na interface de sistema do coobjecto, definindo o modo como são processadas as operações executadas pelo núcleo do sistema. O processamento comum no cliente e no servidor foi descrito, respectivamente, nas secções 3.2.2.2 e 3.2.2.3 e limita-se a combinar a execução de operações definidas nos outros componentes. Ao controlar o funcionamento de um coobjecto e definir a sua composição, a cápsula permite criar coobjectos com diferentes composições como se verá de seguida. Componentes pré-definidos Dois componentes cápsula foram implementados. O primeiro, a cápsula simples, mantém uma única versão do estado do coobjecto. Para tal, agrega um componente de cada tipo: atributos do sistema, atributos, registo, reconciliação, awareness, adaptação e gestor de subobjectos. Este componente permite criar um coobjecto comum. O segundo componente cápsula, a cápsula dupla, mantém dois estados do coobjecto. Para tal, inclui dois componentes de reconciliação, dois componentes de awareness e dois gestores de subobjectos. Os dois gestores de subobjectos permitem manter duas versões de cada subobjecto, os quais são actualizados de acordo com as (possivelmente) diferentes políticas de reconciliação definidas para cada um. Sempre que existe uma nova operação no componente de registo, as funções definidas na cápsula notificam ambos os componentes de reconciliação para executarem a operação na versão respectiva. Usando esta cápsula é possível criar facilmente um coobjecto que mantenha uma versão provisória e uma versão definitiva do seu estado (i.e. dos seus subobjectos) a partir de subobjectos comuns, exe- cutando as operações armazenadas no componente de registo por uma (mesma) ordem total optimista e pessimista, respectivamente. Os dois componentes de awareness permitem tratar de forma diferente a informação produzida pro- visória e definitivamente (em geral, a informação produzida provisoriamente é descartada). A cápsula encarrega-se de garantir que as operações são executadas de forma independente em cada uma das ver- sões e que as operações relativas a componentes não duplicados (por exemplo, ao componente de atri- butos) apenas são executadas na versão definitiva. Para tal, cria, para cada versão, um coobjecto comum virtual composto pelos elementos respectivos. 3.3.8 Gestor de subobjectos O gestor de subobjectos controla a criação e remoção dos subobjectos contidos num coobjecto, exe- cutando as seguintes funções. Primeiro, controla a criação das cópias em memória dos subobjectos e
3.3. FRAMEWORK DE COMPONENTES: COMPONENTES 43 mantém referências para todos os subobjectos criados. Segundo, mantém referências para um conjunto de subobjectos raiz (acessíveis através de um nome). As aplicações navegam nos subobjectos contidos num coobjecto a partir destes subobjectos raiz. Finalmente, controla a persistência dos subobjectos no servidor. Para esta função duas técnicas básicas são geralmente adoptadas: a reciclagem automática (garbage-collection), em que um subobjecto é removido quando ele se torna inacessível a partir dos su- bobjectos raiz; e a remoção explícita, em que um subobjecto é removido pela execução explícita de uma operação de remoção. Componentes pré-definidos No protótipo do sistema DOORS, implementou-se um gestor de subob- jectos que combina a reciclagem automática com a remoção explícita de forma simples. Periodicamente, em cada servidor, determina-se o conjunto de subobjectos que não pode ser alcançado a partir dos su- bobjectos raiz. Estes subobjectos são marcados como removidos (os outros são marcados como activos) mas não são imediatamente eliminados. Assim, um subobjecto removido pode passar a activo se alguma operação não executada no servidor tornar esse subobjecto acessível novamente. O processo de eliminação de um subobjecto inicia-se, em qualquer réplica, quando o sistema ne- cessita de espaço livre ou um subobjecto permanece removido durante um período de tempo grande (actualmente, 30 dias). Quando uma das condições anteriores se verifica submete-se a operação de eli- minação definida no gestor de subobjectos (a qual é propagada para todas as réplicas e executada de acordo com a política de reconciliação definida no coobjecto). A execução desta operação elimina o subobjecto. Esta aproximação garante que todas as réplicas eliminam o mesmo conjunto de subobjectos. O bom funcionamento desta estratégia baseia-se no pressuposto que, quando se emite a operação de eliminação de um subobjecto, todas as operações que o podem tornar acessível já foram executadas em todos os servidores. A provável satisfação desta propriedade é consequência do período de tempo longo que separa a decisão de eliminar um subobjecto da detecção inicial da sua inacessibilidade (e em consequência da impossibilidade de executar operações que se refiram a esse subobjecto). Como se re- feriu, este período de tempo pode ser encurtado pela necessidade de um servidor obter espaço livre. No entanto, pressupõe-se igualmente que o espaço de armazenamento disponível em cada servidor é sufici- entemente grande para que a propriedade inicial seja satisfeita (o sistema de ficheiros Elephant [148] usa um pressuposto semelhante). Quando uma operação torna acessível um subobjecto eliminado anteriormente, o gestor de subob- jectos pode criar uma nova cópia do subobjecto. Para tal, o programador deve especificar, quando cria o subobjecto, o modo como esta cópia é criada (de forma semelhante às cópias de substituição no meca- nismo de invocação cega descrito na secção 4.3). Esta implementação do gestor de subobjectos não lida com os problemas da execução de operações em subobjectos não acessíveis a partir de uma raiz ou mesmo de subobjectos já eliminados. Assim,
- Page 9 and 10: Conteúdo 1 Introdução 1 1.1 Moti
- Page 11 and 12: CONTEÚDO xi 5 Avaliação do model
- Page 13 and 14: CONTEÚDO xiii 10 Sistema de reconc
- Page 15 and 16: Lista de Figuras 3.1 Arquitectura d
- Page 17 and 18: Lista de Tabelas 8.1 Tabela de comp
- Page 19 and 20: Capítulo 1 Introdução Os avanço
- Page 21 and 22: 1.2. SISTEMAS DISTRIBUÍDOS DE GEST
- Page 23 and 24: 1.3. VISÃO GERAL E CONTRIBUIÇÕES
- Page 25 and 26: 1.3. VISÃO GERAL E CONTRIBUIÇÕES
- Page 27 and 28: Capítulo 2 Princípios gerais No c
- Page 29 and 30: 2.2. MOTIVAÇÃO - ALGUMAS APLICAÇ
- Page 31 and 32: 2.3. PRINCÍPIOS 13 garantir a disp
- Page 33 and 34: 2.3. PRINCÍPIOS 15 obter o estado
- Page 35 and 36: 2.3. PRINCÍPIOS 17 sobre a evoluç
- Page 37 and 38: 2.3. PRINCÍPIOS 19 2.3.6 Invocaç
- Page 39 and 40: 2.3. PRINCÍPIOS 21 solúveis). As
- Page 41 and 42: Capítulo 3 Apresentação do siste
- Page 43 and 44: 3.1. MODELO GERAL 25 para a activid
- Page 45 and 46: 3.1. MODELO GERAL 27 Aplicação At
- Page 47 and 48: 3.2. FRAMEWORK DE COMPONENTES: PRIN
- Page 49 and 50: 3.2. FRAMEWORK DE COMPONENTES: PRIN
- Page 51 and 52: 3.2. FRAMEWORK DE COMPONENTES: PRIN
- Page 53 and 54: 3.2. FRAMEWORK DE COMPONENTES: PRIN
- Page 55 and 56: 3.3. FRAMEWORK DE COMPONENTES: COMP
- Page 57 and 58: 3.3. FRAMEWORK DE COMPONENTES: COMP
- Page 59: 3.3. FRAMEWORK DE COMPONENTES: COMP
- Page 63 and 64: 3.3. FRAMEWORK DE COMPONENTES: COMP
- Page 65 and 66: 3.4. FRAMEWORK DE COMPONENTES: IMPL
- Page 67 and 68: 3.4. FRAMEWORK DE COMPONENTES: IMPL
- Page 69 and 70: Capítulo 4 Descrição das funcion
- Page 71 and 72: 4.1. RECONCILIAÇÃO 53 Segundo, um
- Page 73 and 74: 4.1. RECONCILIAÇÃO 55 4.1.3 Ordem
- Page 75 and 76: 4.1. RECONCILIAÇÃO 57 4.1.4.2 Ver
- Page 77 and 78: 4.1. RECONCILIAÇÃO 59 No decurso
- Page 79 and 80: 4.3. INVOCAÇÃO CEGA 61 4.3 Invoca
- Page 81 and 82: 4.4. INTEGRAÇÃO DE SESSÕES SÍNC
- Page 83 and 84: 4.4. INTEGRAÇÃO DE SESSÕES SÍNC
- Page 85 and 86: 4.4. INTEGRAÇÃO DE SESSÕES SÍNC
- Page 87 and 88: Capítulo 5 Avaliação do modelo d
- Page 89 and 90: 5.1. EDITOR MULTI-SÍNCRONO DE DOCU
- Page 91 and 92: 5.1. EDITOR MULTI-SÍNCRONO DE DOCU
- Page 93 and 94: 5.1. EDITOR MULTI-SÍNCRONO DE DOCU
- Page 95 and 96: 5.2. AGENDA PARTILHADA 77 Figura 5.
- Page 97 and 98: 5.2. AGENDA PARTILHADA 79 de awaren
- Page 99 and 100: Capítulo 6 Núcleo do sistema DOOR
- Page 101 and 102: 6.1. COOBJECTOS 83 o mesmo estado i
- Page 103 and 104: 6.2. SERVIDORES 85 global a associa
- Page 105 and 106: 6.2. SERVIDORES 87 segundo servidor
- Page 107 and 108: 6.2. SERVIDORES 89 6.2.2 Sincroniza
- Page 109 and 110: 6.2. SERVIDORES 91 6.2.3 Serviço d
3.3. FRAMEWORK DE COMPONENTES: COMPONENTES 43<br />
mantém referências para todos os subobjectos criados. Segundo, mantém referências para um conjunto<br />
<strong>de</strong> subobjectos raiz (acessíveis através <strong>de</strong> um nome). As aplicações navegam nos subobjectos contidos<br />
num coobjecto a partir <strong>de</strong>stes subobjectos raiz. Finalmente, controla a persistência dos subobjectos no<br />
servidor. Para esta função duas técnicas básicas são geralmente adoptadas: a reciclag<strong>em</strong> automática<br />
(garbage-collection), <strong>em</strong> que um subobjecto é r<strong>em</strong>ovido quando ele se torna inacessível a partir dos su-<br />
bobjectos raiz; e a r<strong>em</strong>oção explícita, <strong>em</strong> que um subobjecto é r<strong>em</strong>ovido pela execução explícita <strong>de</strong> uma<br />
operação <strong>de</strong> r<strong>em</strong>oção.<br />
Componentes pré-<strong>de</strong>finidos No protótipo do sist<strong>em</strong>a DOORS, impl<strong>em</strong>entou-se um gestor <strong>de</strong> subob-<br />
jectos que combina a reciclag<strong>em</strong> automática com a r<strong>em</strong>oção explícita <strong>de</strong> forma simples. Periodicamente,<br />
<strong>em</strong> cada servidor, <strong>de</strong>termina-se o conjunto <strong>de</strong> subobjectos que não po<strong>de</strong> ser alcançado a partir dos su-<br />
bobjectos raiz. Estes subobjectos são marcados como r<strong>em</strong>ovidos (os outros são marcados como activos)<br />
mas não são imediatamente eliminados. Assim, um subobjecto r<strong>em</strong>ovido po<strong>de</strong> passar a activo se alguma<br />
operação não executada no servidor tornar esse subobjecto acessível novamente.<br />
O processo <strong>de</strong> eliminação <strong>de</strong> um subobjecto inicia-se, <strong>em</strong> qualquer réplica, quando o sist<strong>em</strong>a ne-<br />
cessita <strong>de</strong> espaço livre ou um subobjecto permanece r<strong>em</strong>ovido durante um período <strong>de</strong> t<strong>em</strong>po gran<strong>de</strong><br />
(actualmente, 30 dias). Quando uma das condições anteriores se verifica submete-se a operação <strong>de</strong> eli-<br />
minação <strong>de</strong>finida no gestor <strong>de</strong> subobjectos (a qual é propagada para todas as réplicas e executada <strong>de</strong><br />
acordo com a política <strong>de</strong> reconciliação <strong>de</strong>finida no coobjecto). A execução <strong>de</strong>sta operação elimina o<br />
subobjecto. Esta aproximação garante que todas as réplicas eliminam o mesmo conjunto <strong>de</strong> subobjectos.<br />
O bom funcionamento <strong>de</strong>sta estratégia baseia-se no pressuposto que, quando se <strong>em</strong>ite a operação<br />
<strong>de</strong> eliminação <strong>de</strong> um subobjecto, todas as operações que o po<strong>de</strong>m tornar acessível já foram executadas<br />
<strong>em</strong> todos os servidores. A provável satisfação <strong>de</strong>sta proprieda<strong>de</strong> é consequência do período <strong>de</strong> t<strong>em</strong>po<br />
longo que separa a <strong>de</strong>cisão <strong>de</strong> eliminar um subobjecto da <strong>de</strong>tecção inicial da sua inacessibilida<strong>de</strong> (e <strong>em</strong><br />
consequência da impossibilida<strong>de</strong> <strong>de</strong> executar operações que se refiram a esse subobjecto). Como se re-<br />
feriu, este período <strong>de</strong> t<strong>em</strong>po po<strong>de</strong> ser encurtado pela necessida<strong>de</strong> <strong>de</strong> um servidor obter espaço livre. No<br />
entanto, pressupõe-se igualmente que o espaço <strong>de</strong> armazenamento disponível <strong>em</strong> cada servidor é sufici-<br />
ent<strong>em</strong>ente gran<strong>de</strong> para que a proprieda<strong>de</strong> inicial seja satisfeita (o sist<strong>em</strong>a <strong>de</strong> ficheiros Elephant [148] usa<br />
um pressuposto s<strong>em</strong>elhante).<br />
Quando uma operação torna acessível um subobjecto eliminado anteriormente, o gestor <strong>de</strong> subob-<br />
jectos po<strong>de</strong> criar uma nova cópia do subobjecto. Para tal, o programador <strong>de</strong>ve especificar, quando cria o<br />
subobjecto, o modo como esta cópia é criada (<strong>de</strong> forma s<strong>em</strong>elhante às cópias <strong>de</strong> substituição no meca-<br />
nismo <strong>de</strong> invocação cega <strong>de</strong>scrito na secção 4.3).<br />
Esta impl<strong>em</strong>entação do gestor <strong>de</strong> subobjectos não lida com os probl<strong>em</strong>as da execução <strong>de</strong> operações<br />
<strong>em</strong> subobjectos não acessíveis a partir <strong>de</strong> uma raiz ou mesmo <strong>de</strong> subobjectos já eliminados. Assim,