Sistemas Operacionais
Continuação - Exclusão mútua - 25/10/2013
- Problema dos filósofos
*P/ comer, o filósofo precisa obter 2 garfos, o da esquerda e o da direita.
• Deadlock problema! (trava da morte!)
Problemas de sincronização condicional (Filósofos e Barbeiros) > Tratam-se de problemas clássicos de sincronização de processos.
1) Problema dos Filósofos
Considere uma mesa com 5 pratos e 5 garfos, onde os filósofos podem sentar, comer e pensar. Toda vez que um filósofo pára de pensar e deseja comer, é necessário que obtenha 2 garfos, um à sua direita e outro à esquerda. Logo, há um condicionamento: para comer, deverá obter 2 garfos! (processo condicionado à obtenção de 2 recursos para ter condições de execução).
- Se acontecer de todos os filósofos estiverem segurando apenas 1 garfo cada um, ninguém conseguirá comer. Esta é uma situação conhecida como Deadlock (importante!!!), quando todos os processos (filósofos) ficarão em estado de espera na possibilidade de obter um recurso condicional (o 2º garfo), que nunca acontecerá.
- Soluções: Para garantir a sincronização condicional evitando-se o Deadlock:
a) Permitir que apenas 4 filósofos sentem à mesa simultaneamente;
b) Permitir que um filósofo pegue um garfo apenas se o outro estiver disponível;
c) Permitir que um filósofo sentado em cadeira ímpar pegue primeiro o seu garfo da esquerda e depois o da direita, enquanto um filósofo sentado em cadeira par pegue o garfo da direita e depois o da esquerda.
Enfim, as soluções poderia ser sinalizadas por semáforos, utilizando semáforo binário para cada garfo, sinalizando se está livre ou ocupado, como também usar um semáforo contador para controlar acesso às cadeiras, vinculados à um semáforo mutex que controlará o acesso ao ambiente de recursos compartilhados.
- Leitura: pág. 120 do livro base Machado & Maia (2007).
2) Problema do Barbeiro
O barbeiro recebe clientes para cortar o cabelo. Na barbearia