-
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.
O 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:
- O 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;
- O 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.