Deadlock é um problema comum em sistemas operacionais. Ele ocorre quando dois ou mais processos ficam bloqueados e esperando um pelo outro para liberar recursos, mas nenhum dos processos pode prosseguir até que o outro seja liberado. Isso resulta em uma situação em que nenhum dos processos pode ser concluído.
Os recursos que podem causar deadlock geralmente são recursos compartilhados, como memória, arquivos, dispositivos de entrada e saída e semáforos. Se dois ou mais processos precisam do mesmo recurso para continuar sua execução, e o recurso não estiver disponível, eles ficarão bloqueados e entrarão em deadlock.
Existem quatro condições necessárias para que um deadlock possa ocorrer:
Exclusão mútua: Os recursos compartilhados devem ser mutuamente exclusivos, ou seja, somente um processo pode ter acesso ao recurso de cada vez.
Abordagem: Alocar todos os recursos usando a técnica de spooling com daemon – processo background
Uso e espera (hold and wait): Um processo deve estar segurando um recurso e esperando por outro recurso que está sendo mantido por outro processo.
Abordagem: Requisitar todos os recursos inicialmente antes do processamento.
Não preempção: Um recurso não pode ser retirado de um processo que o esteja segurando. Ele deve ser liberado voluntariamente pelo processo.
Abordagem: Retirar recursos dos processos, por meio de virtualização de alguns recursos
Espera circular: Deve haver um ciclo de processos em que cada processo esteja esperando por um recurso que está sendo mantido pelo próximo processo no ciclo (monopoliza o recurso)
Abordagem: Processo tem permissão de possuir somente um recurso de cada vez.
Existem várias estratégias para tratar o deadlock em sistemas operacionais:
A prevenção de deadlock pode ser alcançada impondo uma ou mais das condições necessárias para a ocorrência do deadlock. As técnicas comuns de prevenção de deadlock incluem: