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.

Recursos

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.

Condições de ocorrência

Existem quatro condições necessárias para que um deadlock possa ocorrer:

  1. 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

  2. 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.

  3. 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

  4. 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.

Modelagem de Deadlock:

Estratégias para tratar o deadlock

Existem várias estratégias para tratar o deadlock em sistemas operacionais:

  1. Ignorar o problema (Algoritmo do Avestruz): dado que são extremamente raros, ignore-os
  2. Detecção e recuperação: O sistema operacional pode detectar o deadlock e tentar recuperar os processos envolvidos, liberando recursos ou terminando processos.
  3. Evitar: O sistema operacional pode evitar o deadlock, evitando que os processos entrem em situações de espera circular. Uma técnica comum é usar o algoritmo Banker's para alocar recursos aos processos.
  4. Prevenção: O sistema operacional pode prevenir deadlock, impondo uma ou mais das condições necessárias para a ocorrência do deadlock. Por exemplo, pode-se usar a preempção para retirar um recurso de um processo que o esteja segurando.

Prevenção de deadlock

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: