4. Algoritmos Distribuídos 4.3 Exclusão Mútua Distribuída Processos podem compartilhar recursos; Exclusão mútua previne inconsistências; Recurso gerenciado por servidores; o Controla por transações; Recurso distribuído; o Algoritmo específico; Ex.: atualização de arquivo texto: o Trava o arquivo no servidor; o Atualiza e destrava; Ex.: Transmissão rede Ethernet: o Não é centralizado; o Todos cooperam no acesso ao recurso; Ex.: Monitor de vagas de estacionamento: o Registra número total; o Informa se está cheio; o Quantidade de carros é um recurso compartilhado; Exemplos precisam de exclusão mútua; Algoritmos de Exclusão Mútua N processos (p1, p2, p3....pn); Existem uma ou mais seções críticas; Protocolo de acesso: o enter(): entra na seção crítica; o resourceAccesses(): acessa recurso compartilhado; o exit(): saí da seção crítica; Requisitos: o ME1 (segurança): no máximo um processo na seção crítica; o ME2 (liveness): requisições para entrar e sair da CS são atendidas; o ME3 (ordenação): entrada na CS segue ordem de solicitação; Algoritmo Centralizado: Servidor controla o acesso; Queue of reques ts Server 4 2 1. Reques t token p 1 p2 3. Grant token 2. Releas e token p 3 Processo requisita acesso ao servidor e aguarda resposta; A resposta é a permissão de acesso; Se outro processo está na CS: o Requisições são enfileiradas; o Quando processo sai: servidor autoriza outro; Assume-se que não ocorrem falhas; p4 Exemplo: Algoritmo de anel lógico Processos em anel lógico; Exclusão por token; p 1 p 2 pn p 3 p 4 Token Condições ME1 (segurança) e ME2 (liveness); o Não obedece a condição ME3 (ordenação); Algoritmo de relógio lógico Processo que quer entrar envia multicast solicitando; Pode entrar quando todos os outros responderam a requisição; Cada processo possui um relógio de lamport; Conteúdo da requisição: <T, pi>; Estado dos processos: o Dentro (held); o Interessado (wanted); o Liberado (released); Algoritmo: On initialization state := RELEASED; To enter the section state := WANTED; } Multicast request to all processes; }request processing deferred here T := request’s timestamp; } Wait until (number of replies received = (N – 1)); state := HELD; On receipt of a request <Ti, pi> at pj (i ≠ j) if (state = HELD or (state = WANTED and (T, pj) < (Ti, pi))) then queue request from pi without replying; else reply immediately to pi; end if To exit the critical section state := RELEASED; reply to any queued requests; Se não tem outro interessado, quem requisita pode entrar; o Se tem, entra o de menor timestamp; 41 p 41 p 3 Repl y 1 34 Repl 34 y 4 1 p 2 o o o o o o o o P3 não está interessado; P1 requisita com T=41; P2 requisita com T=34; P3 responde para p1 e p2; P1 responde para p2; P2 entra na CS; P2 sai da CS e responde para p1; P1 entra na CS; Exemplo: Repl y 34 Algoritmo Maekawa de Votação Nem todos os processos precisam permitir o acesso; O interessado coleta votos suficientes para entrar; Associa um conjunto de votos a um processo; o Vi para pi; o Vi = {p1, p2, p3.....}; Regras para Vi: o Pi pertence a Vi; o Vi ∩ Vj ≠ Ø; Algoritmo: On initialization state := RELEASED; voted := FA LSE; For pi to enter the critical section state := WANTED; Multicast request to all processes in Vi – {pi}; Wait until (number of replies received = (K – 1)); state := HELD; On receipt of a request from pi at pj (i ≠ j) if (state = HELD or voted = TRUE) then queue request from pi without replying; else send reply to pi; voted := TRUE; end if For pi to exit the critical section state := RELEASED; Multicast release to all processes in Vi – {pi}; On receipt of a release from pi at pj (i ≠ j) if (queue of requests is non-empty) then remove head of queue – from pk, say; send reply to pk; voted := TRUE; else voted := FALSE; end if Pi manda requisição para K – 1 processos de Vi; Pi entra quando todos respondem; Pj dee Vi responde imediatamente para pi: o A menos que esteja na CS, ou; o Esteja sendo votado; Se pj não responde, ele enfileira a requisição; Quando sai da CS, pj vota no primeiro da fila; Quando sai da CS pi manda release para todos de Vi; Se um processo de Vi ∩ Vj ≠ Ø fota em 2 processos: o Seria possível 2 processos entrarem na CS; O algoritmo só permite um voto entre o recebimento de releases;