LRM Prof. Mantovani ← Aulas da disciplina
Semana 8 · Aula 8 de 14

Deadlocks

O impasse: as quatro condições necessárias e as estratégias de prevenção, evitação (algoritmo do banqueiro), detecção e recuperação.

📚 Sistemas Operacionais🧪 1 simulador(es)📝 mini-quiz ao final
Objetivos da aula

O que você vai aprender

1

Enunciar as quatro condições necessárias para deadlock.

2

Distinguir prevenção, evitação, detecção e recuperação.

3

Aplicar a ideia do algoritmo do banqueiro e do estado seguro.

1 · Motivação

Quando o sistema simplesmente trava

Você já viu um programa "pendurar" sem dar erro, sem usar CPU, apenas parado para sempre? Às vezes a causa é um deadlock: processos que se esperam mutuamente e nunca mais avançam.

O deadlock é um dos problemas mais sutis da concorrência: não há erro de sintaxe, não há exceção, a CPU pode até estar livre — e ainda assim nada acontece. Entender por que ele surge e como tratá-lo é essencial para construir sistemas confiáveis.

💡
Deadlock não é o mesmo que um programa lento ou em laço infinito gastando CPU. No deadlock os processos estão bloqueados, sem consumir CPU, esperando algo que nunca chegará.
2 · Mapa

O caminho desta aula

Vamos percorrer o tema em quatro frentes conectadas:

As 4
condições
Grafo de
alocação
Estratégias
(prevenir/evitar)
Banqueiro +
detecção
  • Primeiro entendemos quando um deadlock pode ocorrer (condições de Coffman).
  • Depois aprendemos a representá-lo em um grafo.
  • Em seguida, as quatro estratégias de tratamento.
  • Por fim, o algoritmo do banqueiro e a detecção, com o simulador.
3 · Conceito 1

O que é deadlock

Deadlock (impasse). Conjunto de processos bloqueados em que cada um espera por um recurso retido por outro processo do mesmo conjunto, de modo que nenhum pode prosseguir.
Recurso. Qualquer coisa que um processo precisa para avançar e que pode estar em uso exclusivo: CPU, memória, arquivos, impressoras, semáforos, locks de banco de dados.

O ponto-chave: a espera é circular e permanente. Sem intervenção externa, o conjunto travado nunca se desfaz sozinho.

4 · As condições

As quatro condições de Coffman

Um deadlock só ocorre se as quatro condições valerem simultaneamente:

CondiçãoSignificado
Exclusão mútuaO recurso é usado por um processo de cada vez
Posse e esperaUm processo segura recursos e pede mais, esperando
Não preempçãoUm recurso não pode ser tomado à força do dono
Espera circularExiste um ciclo de processos esperando recursos uns dos outros
🔑
As quatro são necessárias e ocorrem ao mesmo tempo. Quebrar qualquer uma delas impede o deadlock — é exatamente o que faz a estratégia de prevenção.
5 · Exemplo

Dois locks, dois processos

Considere dois processos que precisam de dois locks (A e B), mas os adquirem em ordens diferentes:

// Processo 1 // Processo 2 lock(A); lock(B); lock(B); // espera lock(A); // espera ... usa ... ... usa ... unlock(B); unlock(A); unlock(A); unlock(B);

Se P1 pega A e, ao mesmo tempo, P2 pega B, então P1 espera B (que P2 tem) e P2 espera A (que P1 tem): impasse. As quatro condições estão presentes.

6 · Interativo

Stepper: como o impasse se forma

Passo 1
P1 executa lock(A) com sucesso. Agora P1 detém o recurso A.
Passo 2
P2 executa lock(B) com sucesso. Agora P2 detém o recurso B.
Passo 3
P1 executa lock(B): B está com P2, então P1 bloqueia (posse e espera).
Passo 4
P2 executa lock(A): A está com P1, então P2 bloqueia. Espera circular fechada.
Passo 5
Nenhum dos dois libera nada (não preempção). Deadlock confirmado: as quatro condições valem.
7 · Conceito 2

Grafo de alocação de recursos

Grafo de alocação de recursos. Grafo dirigido em que uma aresta processo→recurso representa um pedido e uma aresta recurso→processo representa uma atribuição.

É a ferramenta visual para detectar a espera circular.

8 · Lendo o grafo

Quando o ciclo indica deadlock

Com uma instância por recurso, um ciclo no grafo significa deadlock garantido. Com várias instâncias por recurso, o ciclo é condição necessária mas não suficiente — pode haver ciclo sem impasse.

P1R1P2R2P1
⚠️
Não confunda: ciclo com recursos de instância única ⇒ deadlock. Com múltiplas instâncias, é preciso analisar se há instâncias livres que quebrem a espera.
9 · Analogia

O cruzamento engarrafado

🚗 Analogia
Quatro carros chegam juntos a um cruzamento sem semáforo. Cada um avança um pouco e ocupa o espaço que o carro à esquerda precisa para sair. Resultado: ninguém anda. Cada carro "segura" um pedaço da via (posse e espera) e espera o próximo (espera circular). Basta um carro dar ré (preempção) para tudo destravar.
10 · Comparação

Quatro formas de tratar deadlock

EstratégiaIdeiaCusto
PrevençãoNegar uma das quatro condições por projetoPode reduzir uso de recursos
EvitaçãoConceder só se o estado seguir seguro (banqueiro)Exige conhecer a demanda máxima
Detecção e recuperaçãoDeixar ocorrer, detectar o ciclo, recuperarCusto de detecção + aborto/rollback
Ignorar (avestruz)Fingir que não aconteceBarato; aceita o risco
11 · Fluxo

Como o SO decide

O caminho de decisão típico ao receber um pedido de recurso:

Pedido de
recurso
Estratégia
ativa?
Conceder /
esperar
Verificar
segurança

Na prevenção, o pedido já vem com regras que evitam o impasse. Na evitação, o SO testa cada concessão. Na detecção, ele concede livremente e periodicamente procura ciclos.

12 · Aprofundamento

Prevenção: quebrando cada condição

  • Exclusão mútua: tornar recursos compartilháveis quando possível (ex.: arquivos só de leitura). Nem sempre dá.
  • Posse e espera: exigir que o processo peça tudo de uma vez no início, ou que só peça quando não tem nada. Reduz a utilização.
  • Não preempção: se um processo é negado, ele libera o que já tem e tenta de novo depois.
  • Espera circular: impor uma ordem total nos recursos e exigir pedidos em ordem crescente. É a técnica mais usada na prática.
💡
A ordenação de recursos resolveria nosso exemplo dos dois locks: se ambos sempre pegassem A antes de B, nunca haveria impasse.
13 · Interativo

Check: identifique a condição

Impor que todo processo adquira os recursos sempre em ordem numérica crescente quebra qual condição de Coffman?

Uma ordem total nos recursos impede que se forme um ciclo de espera — ataca diretamente a espera circular.
14 · Caso prático

O jantar dos filósofos

Cinco filósofos compartilham cinco garfos; cada um precisa dos dois garfos vizinhos para comer. Se todos pegam o garfo da esquerda ao mesmo tempo, cada um espera o da direita: deadlock clássico.

Soluções conhecidas: limitar a quatro filósofos comendo de cada vez; numerar os garfos e pegar sempre o de menor número primeiro (ordenação); ou permitir que um filósofo pegue os dois garfos apenas se ambos estiverem livres (atômico).

🔑
O jantar dos filósofos mostra todas as condições de uma vez e serve de banco de provas para qualquer técnica de sincronização e prevenção de deadlock.
15 · Erros comuns

Confusões frequentes

⚠️
Erros típicos:
  • Confundir deadlock (bloqueio mútuo permanente) com inanição (espera indefinida, mas o processo poderia rodar) ou livelock (processos ativos que mudam de estado sem progredir).
  • Achar que um ciclo no grafo sempre indica deadlock — só vale para recursos de instância única.
  • Esquecer que as quatro condições devem valer simultaneamente.
  • Supor que o algoritmo do banqueiro detecta deadlock — ele evita, recusando concessões inseguras.
16 · Dicas

Boas práticas contra impasses

Na engenharia real:
  • Adote uma ordem global de aquisição de locks e siga-a em todo o código.
  • Use timeouts ao adquirir recursos: se demorar demais, libere e tente novamente.
  • Prefira locks de granularidade adequada — locks grandes demais aumentam a contenção.
  • Em bancos de dados, conheça o detector de deadlock do SGBD: ele costuma abortar a transação mais barata.
17 · Interativo

Reveal: detecção e recuperação

Detectado um deadlock, quais são as opções de recuperação?
Duas grandes vias: (1) aborto de processos — encerrar todos os do ciclo, ou abortar um de cada vez até quebrar o impasse, escolhendo a vítima de menor custo; (2) preempção de recursos — tomar recursos de um processo e devolvê-los a outros, possivelmente fazendo rollback a um estado anterior. É preciso evitar que o mesmo processo seja sempre a vítima (inanição).
18 · Flashcards

Revisão relâmpago

Posse e esperavirar
Processo segura recursos enquanto espera por outros.
Estado segurovirar
Existe uma sequência em que todos os processos conseguem terminar.
Abordagem do avestruzvirar
Ignorar o deadlock por ser raro e caro de tratar; comum em SOs de propósito geral.
Necessidadevirar
Máximo − Alocação: quanto cada processo ainda pode pedir.
19 · Conexões

Como se liga ao resto do curso

  • Sincronização (aula 7): semáforos e locks mal ordenados são a fonte mais comum de deadlocks.
  • Escalonamento (aula 5): a inanição combatida com aging é "prima" do deadlock, mas não é a mesma coisa.
  • Memória e E/S: recursos como quadros de memória e dispositivos também podem entrar em impasse.
  • Banco de dados: transações que travam linhas em ordens diferentes reproduzem o mesmo problema.
20 · Síntese

O essencial sobre deadlocks

🔑
Síntese: deadlock exige as quatro condições de Coffman simultâneas (exclusão mútua, posse e espera, não preempção, espera circular). Tratamos com prevenção (quebrar uma condição), evitação (banqueiro/estado seguro), detecção+recuperação ou simplesmente ignorando. Um estado é seguro se existe uma sequência de término viável para todos os processos.
+ · Simulador

Mãos ao banqueiro

Hora de praticar com o simulador do banqueiro abaixo.

Informe as matrizes Alocação, Máximo e Disponível, faça pedidos de recursos e observe se o estado resultante permanece seguro. Tente descobrir a sequência segura de término que o algoritmo encontra — e provoque um pedido que leve a um estado inseguro para ver o sistema recusá-lo.

Mão na massa · colaborativo

Atividade em grupo · O banqueiro na prática

Em grupos, analisem se um estado é seguro e simulem um pedido.

⏱️ 30 min👥 grupos de 3–4🧩 laboratório

Roteiro

  1. Recebam um cenário com matrizes Alocação, Máximo e Disponível.
  2. Calculem a matriz Necessidade = Máximo − Alocação.
  3. Procurem uma sequência segura de término dos processos.
  4. Confiram no simulador e testem o que acontece ao conceder um pedido específico.
Calculistamonta a Necessidade
Buscador de sequênciatenta a ordem segura
Conferentevalida no simulador
📤 Entrega: Matriz Necessidade + uma sequência segura (ou justificativa de estado inseguro).
Teste seu conhecimento

Mini-quiz · Aula 8

20 questões sobre esta aula. Escolha e veja a explicação na hora.

0/20

📌 Resumo — leve isto para a prova

  • Deadlock exige as quatro condições de Coffman simultâneas: exclusão mútua, posse e espera, não preempção e espera circular.
  • Estratégias: prevenir (quebrar uma condição), evitar (banqueiro), detectar/recuperar ou ignorar (avestruz).
  • O banqueiro concede recursos só se o estado continuar seguro; precisa da demanda máxima.
  • Um estado seguro tem uma sequência de término viável para todos; Necessidade = Máximo − Alocação.
  • Deadlock (bloqueio permanente) difere de inanição e de livelock.