Aula06 2
Problemas Clássicos de Comunicação entre
Processos
Norton Trevisan Roman
Marcelo Morandini
Jó Ueyama
Apostila baseada nos trabalhos de Kalinka Castelo Branco, Antônio
Carlos Sementille, Paula Prata e nas transparências fornecidas no site de compra do livro "Sistemas Operacionais Modernos"
Produtor – Consumidor
Um sistema é composto por entidades produtoras e entidades consumidoras.
Entidades produtoras
Responsáveis pela produção de itens que são armazenados em um buffer (ou em uma fila)
Itens produzidos podem ser consumidos por qualquer consumidor
Entidades consumidoras
Consomem os itens armazenados no buffer (ou na fila) Itens consumidos podem ser de qualquer produtor
Produtor – Consumidor
Jantar dos Filósofos
Cinco filósofos estão sentados ao redor de uma mesa circular para o jantar.
Cada filósofo possui um prato para comer macarrão.
Além disso, eles dispõem de hashis, em vez de garfos
Cada um precisa de 2 hashis
Entre cada par de pratos existe apenas um hashi.
4
3
0
2
1
Hashis precisam ser compartilhados de forma sincronizada
Jantar dos Filósofos
Os filósofos comem e pensam, alternadamente
Além disso, quando comem, pegam apenas um hashi por vez
Não se atém a apenas uma das tarefas
Se conseguir pegar os dois, come por alguns instantes e depois larga os hashis
Como evitar que fiquem bloqueados? Jantar dos Filósofos
tópicos
Que fazer???
Jantar dos Filósofos
tópicos
Jantar dos Filósofos
Jantar dos Filósofos
Isso funciona?
Jantar dos Filósofos
Isso funciona?
Em take_fork():
Se todos os filósofos pegarem o hashi da esquerda, nenhum pegará o da direita – deadlock
E como solucionar?
Jantar dos Filósofos
Isso funciona?
Em take_fork():
Se todos os filósofos pegarem o hashi da esquerda, nenhum pegará o da direita – deadlock
E como solucionar?
Após pegar o hashi da esquerda, o filósofo verifica se o da direita está livre. Se não