Logo Passei Direto
Buscar
Material
páginas com resultados encontrados.
páginas com resultados encontrados.
left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Prévia do material em texto

Estudo de Caso #01 Sistemas Operacionais – O Problema do Jantar dos 
Filósofos 
 
No estudo de hoje somos apresentados a um problema de Sincronização trazido por Dijkstra em 1995 chamado “O 
Problema do Jantar dos Filósofos”, onde é nos apresentado o seguinte problema: 
Cinco filósofos estão assentados a uma mesa circular representada na figura 2.45, cada um dos filósofos alterna 
entre duas atividades, pensar ou comer. Nesta mesa há cinco pratos com espaguete e ao lado de cada prato um 
garfo, porém para que o filósofo possa comer é necessário que ele utilize dois garfos, porém ele só pode pegar um 
garfo de cada vez, caso consiga, ele pode comer por um tempo determinado e voltar a pensar. A questão aqui é: 
Como Criar uma regra para que cada filósofo execute sua atividade sem que jamais fique travado? 
 
 
 
 
 
 
 
 
 
 
 
 
A solução mais “óbvia” seria cada um esperar um tempo fixo para que o outro garfo estivesse disponível, porém 
teríamos um problema onde se todos pegassem um garfo geraria uma espera infinita por outro garfo, causando 
assim um travamento, onde podemos chamar de deadlock ou impasse. 
 Mas e se o filósofo devolvesse o garfo a mesa ao não identificar o próximo garfo? Ainda assim teríamos um 
problema, pois agora em vez de um, tempo de espera, geraríamos um loop infinito, causando assim o travamento, 
nesse caso chamamos de starvation ou o morrer de fome. 
Outra possível solução seria em vez de criarmos um tempo fixo, deixarmos aleatório, a ideia pode funcionar bem, 
porém não é algo 100% eficaz, pois assim como em uma rede de área local Ethernet, pode acontecer de dois pacotes 
de diferentes maquinas serem enviados ao mesmo tempo, e em algum momento acabarem colidindo. 
Então como resolver? 
 
A resposta é simples, basta criarmos um semáforo binário, onde ele será responsável por controlar se um filósofo 
está comendo, pensando, ou com fome, gerando assim uma notificação ao vizinho e uma ordem nos tempos de cada 
um, pois o filosofo só poderá trocar de função quando seus vizinhos não estiverem comendo. 
A teoria apresentada é muito eficaz, pois nos ajuda a entender como organizar e sincronizar o código, evitando 
assim o travento da função.

Mais conteúdos dessa disciplina