2. Introdução
• Assim como em sistemas centralizados, os sistemas
distribuídos enfrentam o problema de gerenciar
recursos compartilhados sem comprometer sua
consistência
– Dois ou mais processos não podem acessar dados
compartilhados ao mesmo tempo
– Ou seja, o acesso é feito por meio de “exclusão
mútua”
3. Introdução
• Em sistemas centralizados criou-se o conceito de
“região crítica”, que funciona da seguinte forma:
– Para que um processo seja autorizado a entrar no estado de
região crítica, nenhum outro processo pode fazer isso
– Deste modo fica garantida a exclusão mútua em um recurso
compartilhado
– Os sistemas centralizados mantém esta estrutura de acesso
funcionando por meio de mecanismos como semáforos,
monitores e outras soluções similares
4. Introdução
• Qual o problema em usar essas soluções nos SDs?
– Todas estas soluções se baseiam na existência de:
• Relógio único: Os eventos em cada processo acontecem
sincronizados pelo mesmo relógio
• Memória compartilhada: Toda a informação de controle
armazenada na memória compartilhada está facilmente
disponível para qualquer processo envolvido
– Em sistemas distribuídos não meios de garantir que
nenhuma das duas condições vá acontecer
5. Introdução(cont.)
• É preciso implementar outro tipo de solução
baseada na forma de comunicação adotada: a troca
de mensagens
– Mas as características de exclusão mútua e região crítica
devem ser preservadas
Como você resolveria o problema de exclusão mútua e
região crítica sem abrir mão das suas características
fundamentais?
- Discuta propostas em sala
6. Soluções para Exclusão Mútua
• Veremos três possibilidades:
– Opção 1: Algoritmo Centralizado
• Uma implementação usando troca de mensagens, mas mantendo
as mesmas características de ambientes monoprocessados
– Opção 2: Algoritmo Distribuído
• Uma alternativa que elimina a centralização característica da
opção 1
– Opção 3: Algoritmo em Anel
• Outra solução descentralizada, mas com abordagem diferente da
opção 2
7. Algoritmo Centralizado
• Objetivo
– Simular a metodologia de um sistemas
monoprocessado, ou seja, centralizar o controle
em um processo coordenador
• Existem várias formas de se obter um coordenador,
mas o algoritmo não se preocupa em exigir uma única
forma de fazer isso, apenas deve garantir a existência
do coordenador e um funcionamento padronizado
perante os processos que interagem com ele
8. Algoritmo Centralizado
• Preparação
– É preciso existir um processo coordenador para este
algoritmo. O coordenador pode ser:
• Estático:
– existir de forma independente, sem ter sua existência
vinculada a uma única situação de exclusão mútua
(prestando apenas o serviço de coordenação)
• Eleito:
– Eleito pelos processo participantes usando um algoritmo
distribuído (o funcionamento do algoritmo será discutido
futuramente)
– O critério usado na eleição não vem ao caso (endereço de
rede, identificação do processo, idade do processo,...)
9. Algoritmo Centralizado
• Funcionamento
– Quando um processo deseja entrar em região crítica ele
envia uma mensagem para o coordenador solicitando
permissão
• Se nenhum outro processo estiver executando sua
região crítica o coordenador envia uma mensagem de
resposta ao solicitante autorizando a entrada em
região crítica
• Se algum processo estiver executando a região crítica
– O coordenador não responde
– O processo solicitante fica aguardando a resposta
– A requisição do processo solicitante é colocada em
uma fila
10. Algoritmo Centralizado
• Funcionamento (cont.)
– Quando o processo deixa a região crítica ele envia uma
mensagem ao coordenador abrindo mão de seu acesso
– O coordenador envia uma mensagem concedendo a
permissão ao primeiro processo da fila
11. Algoritmo Centralizado (cont.)
• Características do algoritmo:
– É justo
• Requisições são atendidas por ordem de chegada
– Nenhum processo espera indefinidamente
• A menos que ocorra algum tipo de falha, o que não faz
parte do funcionamento normal do algoritmo
– É fácil de ser implementado:
• Necessita de apenas 3 mensagens (requisição,
permissão e liberação) para se garantir o acesso a
determinada região crítica
12. Algoritmo Centralizado (cont.)
• Problemas do algoritmo:
– O coordenador é um ponto único de falha, o que
é uma condição indesejável em um SD
– Se coordenador não responde em caso de
permissão negada:
• Processos bloqueados não têm como distinguir a
situação “coordenador fora do ar” da situação
“permissão de acesso negado”
– Para sistemas muito grandes:
• um único coordenador pode degradar a performance
do sistema (gargalo)
13. Algoritmo Centralizado
• IMPORTANTE:
– A descrição do funcionamento dos algoritmos de
exclusão mútua (todos – não apenas o
centralizado) consideram uma situação ideal,
onde não está prevista a ocorrência de falhas nas
entregas das mensagens ou término anormal de
processos.
– O tratamento de possíveis falhas varia de acordo
com a implementação de cada solução, mas na
maioria das vezes se baseia em controle de
timeout e retransmissão de mensagens
14. Algoritmo Distribuído
• Funcionamento:
– Quando um processo deseja entrar em uma
região crítica, envia mensagem para todos os
processos (inclusive ele próprio) contendo o
nome da região crítica, seu próprio número
(identificação) e o tempo corrente
– (continua)
15. Algoritmo Distribuído
• Funcionamento (cont.):
– Quando um processo recebe uma mensagem de
requisição:
• Se o receptor não estiver executando a região
crítica e não deseja executar:
– Envia de volta ao transmissor um mensagem de OK
• Se o receptor estiver executando a região
crítica:
– Não deve responder (deixa o solicitante esperando) e guarda
a requisição em uma fila
– (continua)
16. Algoritmo Distribuído
• Funcionamento (cont.):
– Quando um processo recebe uma mensagem de
requisição (continuação):
• Se o receptor também deseja executar a região crítica,
mas ainda não iniciou:
– Compara o tempo da mensagem recebida com o
tempo da mensagem de requisição que ele enviou
Se o tempo da mensagem recebida for menor
envia um OK ao transmissor
Se o tempo de sua própria mensagem for
menor coloca a requisição recebida em uma fila
e não responde
– (continua)
17. Algoritmo Distribuído
• Funcionamento (cont.):
– Após enviar uma requisição para executar uma região
crítica aguarda até que todos os demais processos lhe
deem permissão
– Ao terminar a execução da região crítica envia
mensagem de “OK” a todos os processo de sua fila
18. Algoritmo Distribuído
• Características do algoritmo:
– Exige ordenação global de todos os eventos do
sistema
• Para qualquer par de eventos, deve haver um
consenso sobre qual deles aconteceu antes
• Baseado no algoritmo de Lamport para
sincronização de relógios lógicos
19. Algoritmo Distribuído
• Características do algoritmo (cont.):
– Nenhum processo espera indefinidamente (não
há starvation)
– Não há impasses (deadlocks)
– Número de mensagens por entrada na região
crítica:
• 2 (n-1) mensagens
• Onde n é o número de processos do sistema
20. Algoritmo Distribuído
• Problemas do algoritmo:
– O ponto único de falha foi substituído por n pontos de
falha
• A falha de um processo bloqueia todas as tentativas subsequentes
de acesso à região crítica
– O tráfego gerado na rede é muito maior
– Em sistemas muito grandes todos os processos se tornam
possíveis gargalos
21. Algoritmo Distribuído
• Problemas do algoritmo
– Ou seja:
• Este algoritmo funciona melhor para pequenos grupos
de processos
• Podemos aumentar a eficiência do algoritmo com duas
pequenas alterações:
1. Envio de mensagem de negação de acesso à
região crítica (problema: mais mensagens)
2. O processo pode entrar na região crítica quando
obtiver a permissão da maioria dos processos
(muito arriscado)
22. Algoritmo Token Ring
• Preparação
– Construção de um anel lógico (ordenação de
processos)
• Atribui-se a cada processo uma posição no anel
– Não importa o critério de ordenação (ordem
numérica de endereços de rede, número de
processo, ou qualquer outro meio conveniente)
– O importante é que cada processo conheça o
próximo na sequência
– Continua
23. Algoritmo Token Ring
• Funcionamento:
– Quando o anel é inicializado o processo 0 (primeiro)
recebe um bastão (token)
– O token fica circulando no anel, obedecendo a ordenação
estabelecida
– Se um processo estiver de posse do token e deseja entrar
em uma região crítica:
• Executa a região crítica (não é permitido que ele entre em
uma segunda região crítica)
• Ao terminar a execução da região crítica envia o token ao
seu vizinho
– Continua
24. Algoritmo Token Ring
• Funcionamento (cont.):
– Se um processo estiver de posse
do token e NÃO deseja entrar em
uma região crítica:
• Envia o token ao seu
vizinho
25. Algoritmo Token Ring
• Características do algoritmo:
– Não há ocorrência de starvation
– Quando um processo deseja entrar em uma
região crítica, o que pode acontecer de pior é ter
que esperar que todos os processos antes dele
executem alguma região crítica
26. Algoritmo Token Ring
• Problemas do algoritmo:
– Se o token se perder há a necessidade de se criar
um novo
– É difícil detectar a perda do token:
• O fato do token não aparecer por muito tempo
não significa que ele esteja perdido
– Se algum processo falhar, seu vizinho deve
identificar a falha e removê-lo do anel
• Para isso, é necessário que todos conheçam a
configuração do anel (quais os integrantes)
27. Comparação:
Quantidade de Mensagens
• Algoritmo Centralizado:
– Mais simples e mais eficiente
– Número de mensagens por entrada na região crítca:
• Apenas 3 (requisição, autorização e liberação)
• Algoritmo Distribuído:
– Número de mensagens por entrada na região crítca :
• 2(n-1) mensagens, sendo (n-1) requisições e (n-1) autorizações
• Algoritmo Token Ring:
– Número de mensagens por entrada na região crítca:
• É variável e imprevisível
– Se todos os processos desejam entrar em região crítica:
necessita de apenas 1 mensagem
– Se ninguém desejar entrar em região crítica: imprevisível (o
token pode circular por horas sem que haja nenhum processo
interessado)
28. Comparação:
Tempo de Espera(medido em quantidade de mensagens)
• Algoritmo Centralizado:
– Retardo (tempo de espera) para entrar na região crítica:
• Apenas o tempo de 2 mensagens
• Algoritmo Distribuído:
– Retardo (tempo de espera) para entrar na região crítica:
• O tempo equivalente a 2(n-1) mensagens
• Algoritmo Token Ring:
– Retardo (tempo de espera) para entrar na região crítica:
• O tempo varia:
– O token acaba de chegar: 0 mensagens
– O token acaba de ser passado: n-1 mensagens