Sobre correção de um Deadlock, analise as assertivas ...

Próximas questões
Com base no mesmo assunto
Q234300 Sistemas Operacionais
Sobre correção de um Deadlock, analise as assertivas e assinale a alternativa que aponta a(s) correta(s).

I. Após a detecção do deadlock, o sistema deverá corrigir o problema. Uma solução bastante utilizada pela maioria dos sistemas operacionais é, simplesmente, eliminar um ou mais processos envolvidos no deadlock e desalocar os recursos já garantidos por eles, quebrando assim a espera circular.

II. Um deadlock não tem correção, uma vez que o processo em execução aguarda um evento que nunca mais ocorrerá. O sistema operacional deve ser apto a identificar e eliminar um processo em deadlock.

III. Uma solução menos drástica envolve a liberação de apenas alguns recursos alocados aos processo para outros processos, até que o ciclo de espera termine.

IV. A eliminação dos processo envolvidos no deadlock e, consequentemente, a liberação de seus recursos podem não ser simples, dependendo do tipo do recurso envolvido.
Alternativas

Gabarito comentado

Confira o gabarito comentado por um dos nossos professores

A alternativa correta é: C - Apenas I, III e IV.

Vamos discorrer sobre cada uma das assertivas para entender os conceitos envolvidos no tema de Deadlock e justificar as respostas corretas:

Assertiva I: Após a detecção do deadlock, o sistema deverá corrigir o problema. Uma solução bastante utilizada pela maioria dos sistemas operacionais é, simplesmente, eliminar um ou mais processos envolvidos no deadlock e desalocar os recursos já garantidos por eles, quebrando assim a espera circular.

Essa afirmativa está correta. Quando um deadlock é detectado, uma solução comum é a eliminação dos processos envolvidos para liberar os recursos alocados. Isso quebra o ciclo de espera circular, que é uma das condições necessárias para a ocorrência de um deadlock.

Assertiva II: Um deadlock não tem correção, uma vez que o processo em execução aguarda um evento que nunca mais ocorrerá. O sistema operacional deve ser apto a identificar e eliminar um processo em deadlock.

Essa afirmativa está incorreta. Um deadlock pode ser corrigido através de várias técnicas, incluindo a eliminação de processos ou a preempção de recursos. Portanto, dizer que um deadlock não tem correção é um erro.

Assertiva III: Uma solução menos drástica envolve a liberação de apenas alguns recursos alocados aos processos para outros processos, até que o ciclo de espera termine.

Essa afirmativa está correta. Outra abordagem menos drástica que a eliminação de processos é a preempção de recursos. Ao liberar alguns recursos e alocá-los a outros processos, o sistema pode quebrar o ciclo de espera, resolvendo assim o deadlock.

Assertiva IV: A eliminação dos processos envolvidos no deadlock e, consequentemente, a liberação de seus recursos podem não ser simples, dependendo do tipo do recurso envolvido.

Essa afirmativa está correta. A eliminação dos processos e a liberação de recursos nem sempre são tarefas simples. A complexidade pode variar dependendo do tipo de recurso e do estado do sistema no momento do deadlock.

Portanto, a alternativa correta é a C, que considera as assertivas I, III e IV como corretas. Espero que essa explicação tenha ajudado você a entender melhor o assunto de Deadlock em Sistemas Operacionais. Caso tenha mais dúvidas, sinta-se à vontade para perguntar!

Clique para visualizar este gabarito

Visualize o gabarito desta questão clicando no botão abaixo

Comentários

Veja os comentários dos nossos alunos

II. Um deadlock não tem correção, uma vez que o processo em execução aguarda um evento que nunca mais ocorrerá. O sistema operacional deve ser apto a identificar e eliminar um processo em deadlock. 

Deadlock (interbloqueio, -blocagem, impasse), no contexto do sistemas operacionais (SO), caracteriza uma situação em que ocorre um impasse e dois ou mais processos ficam impedidos de continuar suas execuções, ou seja, ficam bloqueados. Trata-se de um problema bastante estudado no contexto dos Sistemas Operacionais, assim como em outras disciplinas, como banco de dados, pois é inerente à própria natureza desses sistemas.

deadlock ocorre com um conjunto de processos e recursos não-preemptíveis, onde um ou mais processos desse conjunto está aguardando a liberação de um recurso por um outro processo que, por sua vez, aguarda a liberação de outro recurso alocado ou dependente do primeiro processo.

A definição textual de deadlock normalmente, por ser muito abstrata, é mais difícil de se compreender do que a representação por grafos, que será resumida mais adiante. No entanto, algumas observações são pertinentes:

  • deadlock pode ocorrer mesmo que haja somente um processo no SO, considerando que este processo utilize múltiplos threads e que tais threads requisitem os recursos alocados a outrosthreads no mesmo processo;
  • deadlock independe da quantidade de recursos disponíveis no sistema;
  • Normalmente o deadlock ocorre com recursos como dispositivos, arquivos, memória, etc. Apesar da CPU também ser um recurso para o SO, em geral é um recurso facilmente preemptível, pois existem os escalonadores para compartilhar o processador entre os diversos processos, quando trata-se de um ambiente multitarefa.
lembrando, também, que deve atender a todas essas condições para a ocorrencia de um deadlock:

  • Condição de não-preempção: recursos já alocados a processos não podem ser tomados a força. Eles precisam ser liberados explicitamente pelo processo que detém a sua posse;
  • Condição de exclusão mútua: cada recurso ou está alocado a exatamente um processo ou está disponível;
  • Condição de posse-e-espera: cada processo pode solicitar um recurso, ter esse recurso alocado para si e ficar bloqueado esperando por um outro recurso;
  • Condição de espera circular: deve existir uma cadeia circular de dois ou mais processos, cada um dos quais esperando por um recurso que está com o próximo membro da cadeia.

Completando o comentário do Mario Filho:

A afirmativa II diz que "o Sistema Operacional deve ser apto a identificar e a eliminar um processo em deadlock."

Considerei essa afirmação também como errada, pois um SO não tem tal obrigação. De acordo com Tanenbaum, "a maioria dos sistemas operacionais, incluindo Unix e Windows, simplesmente ignora o problema, supondo que a maior parte dos usuários preferiria um deadlock ocasional a uma regra que restrinja cada usuário a somente um processo". Além disso, há outra opção para lidar com deadlocks, que é a sua prevenção (ao invés de deixar que o deadlock ocorra, detectá-lo/identificá-lo e então resolver a situação).


Para ficar mais fácil a compreensao da ocorrencia de deadlocks, imagine um processo P1 detendo a execução do processador no tempo T1. E o processo P2 detendo uma unidade de DVD-R no mesmo tempo T1.

Haverá deadlock se houver todas as 4 condições abaixo com ambos os processos, P1 e P2.
Condição de não-preempção: o processo P2 não poderá obter o processador de P1 até q este, explicitamente o libere.
Condição de exclusão mútua: Ou a CPU está aloca a P1 ou a P2.
Condição de posse-e-espera: P1 solicita a CPU, obtem-na, e fica bloqueado, esperando E/S(porém, de posse da CPU).
Condição de espera circular: P1 tem a CPU e está esperando um dado do DVD para ler; P2 tem o DVD e está esperando a CPU para processar.
PS: considere q no ultimo caso, não há recurso de DMA, presente na maioria das controladoras de DVD atuais.

O comentário de Breno R. está em parte incorreto. Segundo Tanenbaum(Sistemas Operacionais Modernos, 3Ed.) o S.O deve sim ser capaz de detectar uma situação de deadlock. Oque não é aconselhável é que o S.O implemente um algoritmo para prevenção de deadlock uma vez que seria muito custoso. Tanto o Windows como o Linux implementam o algoritmo do avestruz, eles só tratam a situação de deadlock na sua ocorrência, que na verdade é considerada rara.

O ítem II está errado quando afirma que o deadlock não tem correção.

Clique para visualizar este comentário

Visualize os comentários desta questão clicando no botão abaixo