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

Deadlocks · Prova 1

As quatro condições de deadlock e as estratégias de prevenção, evitação, detecção e recuperação, com o algoritmo do banqueiro. Semana da Avaliação 1 (semanas 1–6).

📚 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

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

3

Aplicar o algoritmo do banqueiro para evitar deadlocks.

4

Modelar impasses com o grafo de alocação de recursos.

1 · Motivação

O abraço mortal

Dois processos: A segura a impressora e quer o scanner; B segura o scanner e quer a impressora. Nenhum solta o que tem, nenhum consegue o que falta. Ambos esperam para sempre. Esse "abraço mortal" é o deadlock.

Deadlocks travam servidores, sistemas embarcados e bancos de dados. Esta aula — última antes da Prova 1 — ensina a reconhecer, prevenir, evitar, detectar e recuperar de impasses, com o clássico algoritmo do banqueiro.

2 · Mapa

Roteiro da aula

4 condições
de Coffman
Grafo de
recursos
EstratégiasBanqueiro

Das condições necessárias à modelagem por grafo, às quatro estratégias de tratamento e ao algoritmo de evitação por estados seguros.

3 · Conceito

O que é um deadlock

Deadlock (impasse). Situação em que um conjunto de processos fica permanentemente bloqueado, cada um esperando por um recurso que outro do conjunto detém, sem que nenhum consiga prosseguir.
4 · Explicação

As quatro condições de Coffman

Um deadlock só ocorre se as quatro condições valerem simultaneamente. Negar qualquer uma impede o impasse:

CondiçãoSignificado
Exclusão mútuaRecurso não compartilhável
Posse e esperaSegura um recurso e pede outro
Não preempçãoO recurso não é tomado à força
Espera circularCiclo de processos esperando uns pelos outros
5 · Exemplo

Deadlock em código

// dois mutexes, duas threads, ordens opostas Thread 1: lock(A); lock(B); ... // segura A, quer B Thread 2: lock(B); lock(A); ... // segura B, quer A // se T1 pega A e T2 pega B ao mesmo tempo: T1 espera B (que T2 tem) | T2 espera A (que T1 tem) // espera circular -> deadlock

Esse é o erro de "ordem de aquisição de locks" mencionado na Aula 6. A correção: adquirir sempre na mesma ordem global (A antes de B em ambas).

6 · Interativo

Passo a passo: o banqueiro avalia um pedido

Passo 1
Um processo pede recursos; verifica-se se o pedido ≤ sua necessidade declarada.
Passo 2
Verifica-se se há recursos disponíveis suficientes para o pedido.
Passo 3
Simula-se a concessão: subtrai do disponível, adiciona ao alocado.
Passo 4
Roda-se o algoritmo de segurança: existe ordem em que todos terminam?
Passo 5
Se o estado resultante é seguro, concede; senão, o processo espera.
7 · Conceito

As quatro estratégias

Prevenção. Negar uma das 4 condições por projeto.
Evitação. Conceder recursos só em estados seguros (banqueiro).
Detecção e recuperação. Deixar acontecer, detectar e desfazer.
Ignorar (avestruz). Assumir que é raro e não tratar.
8 · Explicação

Quando usar cada estratégia

EstratégiaIdeiaQuando
PrevençãoNegar uma das 4 condiçõesSistemas críticos/embarcados
EvitaçãoConceder só em estados seguros (banqueiro)Demanda máxima conhecida
Detecção/recuperaçãoDetectar ciclos e desfazerBancos de dados
Ignorar (avestruz)Assumir raridadeSOs de propósito geral

Muitos SOs de uso geral (Linux, Windows) adotam o avestruz para recursos do kernel: tratar deadlocks teria custo alto para algo raro na prática.

9 · Analogia

O cruzamento travado

🚗 Analogia
Quatro carros chegam a um cruzamento sem semáforo, cada um avança um pouco e fica esperando o da frente sair. Ninguém cede, ninguém anda — espera circular perfeita. A "prevenção" seria a regra de dar passagem (negar a posse-e-espera); a "recuperação" seria um guarda mandando um carro dar ré (preempção forçada).
10 · Comparação

Deadlock vs. inanição

AspectoDeadlockInanição
Quem travaUm conjunto de processos, mutuamenteUm processo específico
CausaEspera circular por recursosSempre preterido pela política
Progresso do restoOs envolvidos não progridemOs outros progridem normalmente
SoluçãoPrevenir/evitar/detectarEnvelhecimento (aging)
11 · Fluxo

Detecção por grafo de alocação

Monte o grafo
(processos×recursos)
Procure
ciclos
1 instância:
ciclo = deadlock
N instâncias:
ciclo ⇒ possível
💡
No grafo de alocação de recursos, uma aresta processo→recurso é um pedido; recurso→processo é uma alocação. Com uma instância por recurso, um ciclo significa deadlock. Com várias instâncias, o ciclo é necessário mas não suficiente.
12 · Aprofundamento

O algoritmo do banqueiro

Estado seguro. Existe ao menos uma ordem (sequência segura) em que todos os processos conseguem obter seu máximo e terminar, devolvendo recursos. O banqueiro só concede um pedido se o estado resultante for seguro.

O algoritmo usa as matrizes Alocação, Máximo e o vetor Disponível; a Necessidade = Máximo − Alocação. A cada pedido, simula a concessão e procura uma sequência em que cada processo, com o Disponível atual, consiga sua Necessidade, termine e libere seus recursos.

🔑
O banqueiro precisa conhecer a demanda máxima de cada processo antecipadamente — restrição que limita seu uso prático, mas o torna excelente para entender a evitação de deadlocks.
13 · Interativo

Verifique seu entendimento

Quantas das quatro condições de Coffman precisam valer ao mesmo tempo para haver deadlock?

As quatro são necessárias em conjunto. Por isso, negar qualquer uma delas (por projeto) previne o deadlock.
14 · Caso prático

Deadlock embarcado: dois barramentos

Num sistema embarcado, duas tarefas compartilham um barramento SPI e um I²C. A tarefa de logging trava o SPI e pede o I²C; a de sensores trava o I²C e pede o SPI. Sob a temporização errada, cada uma segura o que a outra precisa — deadlock que congela o firmware.

A correção típica é por prevenção: definir uma ordem global de aquisição (sempre SPI antes de I²C) ou usar um único mutex que protege ambos os barramentos. Em embarcados, prevenir é preferível a detectar — não há quem reinicie o dispositivo no campo.

15 · Erros comuns

Equívocos sobre deadlocks

⚠️
Cuidado:
• Confundir deadlock com inanição — no deadlock ninguém do grupo avança; na inanição, o resto progride.
• Achar que um ciclo no grafo sempre significa deadlock — só com uma instância por recurso.
• Esquecer que o banqueiro exige conhecer a demanda máxima antecipada.
16 · Dicas

Revisão para a Prova 1

Para a Prova 1 (semanas 1–6): revise modos da CPU e interrupções (1–2), PCB e troca de contexto (3), threads e Amdahl (4), Gantt e RM/EDF (5), semáforos e inversão de prioridade (6). Treine cálculos: overhead de troca, espera média, utilização de tempo real, e uma rodada completa do banqueiro. Use os simuladores como autoteste.
17 · Interativo

Revele a análise

Por que negar a "espera circular" previne deadlocks, e como fazê-lo?
Sem ciclo de espera, não há como o grupo se travar mutuamente. Uma forma prática é impor uma ordem total nos recursos e exigir que todo processo os adquira em ordem crescente. Assim, é impossível formar um ciclo: um processo que segura o recurso de número alto nunca espera por um de número baixo segurado por outro que, por sua vez, espera pelo alto.
18 · Flashcards

Revisão relâmpago

Espera circularvirar
Ciclo de processos, cada um esperando um recurso que o próximo detém.
Estado segurovirar
Existe uma sequência em que todos os processos terminam; o banqueiro só concede se permanece seguro.
Estratégia avestruzvirar
Ignorar deadlocks assumindo raridade; usada por muitos SOs de uso geral.
Necessidade (banqueiro)virar
Máximo − Alocação: o que ainda falta a cada processo.
19 · Conexões

Fechando o ciclo das semanas 1–6

Deadlocks amarram o conteúdo da Prova 1:

  • Surgem de locks e sincronização mal coordenados (Aula 6).
  • Os recursos disputados são gerenciados pelo SO como gerente de recursos (Aula 1).
  • A "não preempção" liga-se ao conceito de preempção do escalonador (Aula 5).
20 · Síntese

Resumo da aula

🔑
Deadlock exige as 4 condições de Coffman simultaneamente: exclusão mútua, posse e espera, não preempção e espera circular. As estratégias são prevenção, evitação, detecção/recuperação e ignorar (avestruz). O grafo de alocação modela impasses; o banqueiro evita-os concedendo recursos só em estados seguros, com sequência de término garantida. Use o simulador para praticar antes da Prova 1.
Sim · 1

Simulador: algoritmo do banqueiro

O simulador do banqueiro permite informar as matrizes de Alocação e Máximo e o vetor Disponível, fazer um pedido de recursos e ver se o sistema permanece em estado seguro ou rejeita o pedido.

💡
Experimente: monte um estado seguro e confirme a sequência de término. Depois faça um pedido que leve a um estado inseguro e veja o algoritmo rejeitá-lo — mesmo havendo recursos livres no momento. É a diferença entre "ter recurso agora" e "ser seguro conceder".
Mão na massa · colaborativo

Atividade em grupo · Mutirão de revisão (Prova 1)

Em grupos, revisem as semanas 1–6 e pratiquem deadlocks.

⏱️ 30 min👥 grupos de 4🧩 estudo colaborativo

Roteiro

  1. Cada integrante revisa um tema: hardware/SO, processos, threads/concorrência, escalonamento.
  2. Montem um mapa mental de uma página ligando os temas.
  3. Resolvam um cenário no simulador do banqueiro: o estado é seguro?
  4. Criem 2 questões por tema e troquem com outro grupo.
Hardware/SOmodos, interrupções, syscalls
Processos/threadsPCB, contexto, concorrência
Escalonamentoclássicos e tempo real
Curadormonta o mapa final
📤 Entrega: Mapa mental de revisão + análise de um estado no banqueiro + 8 questões autorais.
Teste seu conhecimento

Mini-quiz · Aula 7

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 4 condições de Coffman simultaneamente.
  • Estratégias: prevenção, evitação, detecção/recuperação e ignorar (avestruz).
  • O grafo de alocação modela impasses; ciclo = deadlock só com 1 instância por recurso.
  • O banqueiro evita deadlocks concedendo recursos só em estados seguros.
  • Estado seguro garante uma ordem de término para todos os processos.