1 of 44

MC504 Sistemas Operacionais

Prof. Dr. Eng. Isaías Bittencourt Felzmann

isaias@ic.unicamp.br

​

Campinas, 2s/2026

Deadlock

1/44

rev. 2s/2026

IC/UNICAMP – MC504 Sistemas Operacionais

2 of 44

Aviso Legal

The following set of slides are copyright Silberschatz, Galvin and Gagne, 2018. Modifications were made for their use in conjunction with MC504. The original material is available at os-book.com .

​

Os direitos autorais do conjunto de slides a seguir pertencem a Silberschatz, Galvin and Gagne, 2018. Foram feitas modificações para seu uso em MC504. O material original está disponível em os-book.com .

​

Este material foi elaborado com apoio de ferramentas de IA generativa como recurso auxiliar. O conteúdo foi revisado, validado e é de responsabilidade do docente.

2/44

rev. 2s/2026

IC/UNICAMP – MC504 Sistemas Operacionais

3 of 44

Deadlock!

3/44

rev. 2s/2026

IC/UNICAMP – MC504 Sistemas Operacionais

4 of 44

Objetivos do Capítulo

  • Ilustrar como um deadlock pode ocorrer com o uso de bloqueios mutex
  • Definir as quatro condições necessárias que caracterizam um deadlock
  • Identificar uma situação de deadlock em um grafo de alocação de recursos
  • Avaliar quatro abordagens distintas para o tratamento de deadlocks
  • Aplicar o algoritmo do banqueiro para evitar deadlocks
  • Aplicar o algoritmo de detecção de deadlocks
  • Avaliar abordagens para a recuperação de deadlocks

​

​

Silberschatz, Galvin e Gagne ©2018

Operating System Concepts – 10th Edition

4/44

rev. 2s/2026

IC/UNICAMP – MC504 Sistemas Operacionais

5 of 44

Modelo de Sistema

  • O sistema consiste em recursos
  • Tipos de recursos R1, R2, . . ., Rm
    • Ciclos de CPU, espaço de memória, dispositivos de E/S
  • Cada tipo de recurso Ri possui Wi instâncias.
  • Cada processo utiliza um recurso da seguinte forma:
    • solicitação
    • uso
    • liberação

Silberschatz, Galvin e Gagne ©2018

Operating System Concepts – 10th Edition

5/44

rev. 2s/2026

IC/UNICAMP – MC504 Sistemas Operacionais

6 of 44

Deadlock com Semáforos

  • Dados:
    • Um semáforo S1 inicializado em 1
    • Um semáforo S2 inicializado em 1
  • Dois processos P1 e P2
  • P1:

wait(s1)

wait(s2)

  • P2:

wait(s2)

wait(s1)

Silberschatz, Galvin e Gagne ©2018

Operating System Concepts – 10th Edition

6/44

rev. 2s/2026

IC/UNICAMP – MC504 Sistemas Operacionais

7 of 44

Caracterização do deadlock

  • Exclusão mútua: apenas um processo por vez pode usar um recurso
  • Posse e espera: um processo que possui pelo menos um recurso está esperando para adquirir recursos adicionais detidos por outros processos
  • Sem preempção: um recurso só pode ser liberado voluntariamente pelo processo que o possui, após esse processo ter concluído sua tarefa
  • Espera circular: existe um conjunto {P0, P1, ..., Pn} de processos em espera tal que P0 está esperando por um recurso mantido por P1, P1 está esperando por um recurso que é mantido por P2, ..., Pn–1 está esperando por um recurso mantido por Pn, e Pn está esperando por um recurso mantido por P0.

​

O deadlock pode ocorrer se as quatro condições forem satisfeitas simultaneamente.

Silberschatz, Galvin e Gagne ©2018

Operating System Concepts – 10th Edition

7/44

rev. 2s/2026

IC/UNICAMP – MC504 Sistemas Operacionais

8 of 44

Grafo de Alocação de Recursos

  • V é particionado em dois tipos:
    • P = {P1, P2, ..., Pn}, o conjunto que consiste em todos os processos do sistema�
    • R = {R1, R2, ..., Rm}, o conjunto que consiste em todos os tipos de recursos do sistema

​

  • aresta de solicitação – aresta direcionada Pi → Rj

​

  • aresta de atribuição – aresta direcionada Rj → Pi

Um conjunto de vértices V e um conjunto de arestas E.

Silberschatz, Galvin e Gagne ©2018

Operating System Concepts – 10th Edition

8/44

rev. 2s/2026

IC/UNICAMP – MC504 Sistemas Operacionais

9 of 44

Exemplo de Grafo de Alocação de Recursos

  • Uma instância de R1
  • Duas instâncias de R2
  • Uma instância de R3
  • Três instâncias de R4
  • T1 mantém uma instância de R2 e aguarda uma instância de R1
  • T2 mantém uma instância de R1 e uma de R2, e aguarda uma instância de R3
  • T3 mantém uma instância de R3

Silberschatz, Galvin e Gagne ©2018

Operating System Concepts – 10th Edition

9/44

rev. 2s/2026

IC/UNICAMP – MC504 Sistemas Operacionais

10 of 44

Grafo de Alocação de Recursos com um Deadlock

Silberschatz, Galvin e Gagne ©2018

Operating System Concepts – 10th Edition

10/44

rev. 2s/2026

IC/UNICAMP – MC504 Sistemas Operacionais

11 of 44

Grafo com um ciclo, mas sem deadlock

Silberschatz, Galvin e Gagne ©2018

Operating System Concepts – 10th Edition

11/44

rev. 2s/2026

IC/UNICAMP – MC504 Sistemas Operacionais

12 of 44

Fatos Básicos

  • Se o grafo não contém ciclos ⇒ não há deadlock
  • Se o grafo contém um ciclo ⇒
    • Se houver apenas uma instância por tipo de recurso, então há deadlock
    • Se houver várias instâncias por tipo de recurso, há possibilidade de deadlock

Silberschatz, Galvin e Gagne ©2018

Operating System Concepts – 10th Edition

12/44

rev. 2s/2026

IC/UNICAMP – MC504 Sistemas Operacionais

13 of 44

Métodos para lidar com deadlocks

  • Garanta que o sistema nunca entre em estado de deadlock:
    • Prevenção de deadlocks
    • Evitação de deadlocks
  • Permitir que o sistema entre em estado de deadlock e então se recuperar
  • Ignore o problema e finja que deadlocks nunca ocorrem no sistema.

Silberschatz, Galvin e Gagne ©2018

Operating System Concepts – 10th Edition

13/44

rev. 2s/2026

IC/UNICAMP – MC504 Sistemas Operacionais

14 of 44

Prevenção de Deadlock

  • Exclusão Mútua – não é exigida para recursos compartilháveis (por exemplo, arquivos somente leitura); deve valer para recursos não compartilháveis
  • Posse e Espera – deve garantir que, sempre que um processo solicite um recurso, ele não mantenha outros recursos
    • Exigir que o processo solicite e receba todos os seus recursos alocados antes de iniciar a execução, ou permitir que o processo solicite recursos apenas quando o processo não tiver nenhum alocado para ele.
    • Baixa utilização de recursos; possível inanição

Invalidar uma das quatro condições necessárias para o deadlock:

Silberschatz, Galvin e Gagne ©2018

Operating System Concepts – 10th Edition

14/44

rev. 2s/2026

IC/UNICAMP – MC504 Sistemas Operacionais

15 of 44

Prevenção de Deadlock (Continuação)

  • Sem Preempção:
    • Se um processo que mantém alguns recursos solicitar outro que não possa ser alocado imediatamente, todos os recursos que ele mantém serão liberados
    • Os recursos preemptados são adicionados à lista de recursos que o processo aguarda
    • O processo será reiniciado somente quando puder recuperar os recursos anteriores e obter os novos recursos solicitados
  • Espera Circular:
    • Impor uma ordenação total de todos os tipos de recursos e exija que cada processo solicite recursos em uma ordem crescente de enumeração

​

Silberschatz, Galvin e Gagne ©2018

Operating System Concepts – 10th Edition

15/44

rev. 2s/2026

IC/UNICAMP – MC504 Sistemas Operacionais

16 of 44

Espera Circular

  • Invalidar a condição de espera circular é a abordagem mais comum.
  • Basta atribuir a cada recurso (ou seja, bloqueios mutex) um número único.
  • Os recursos devem ser adquiridos em �uma ordem predefinida.
  • Se:��first_mutex = 1�second_mutex = 5��o código de thread_two não poderia �ser escrito da seguinte forma:

Silberschatz, Galvin e Gagne ©2018

Operating System Concepts – 10th Edition

16/44

rev. 2s/2026

IC/UNICAMP – MC504 Sistemas Operacionais

17 of 44

Evitação de Deadlock

  • O modelo mais simples e útil exige que cada processo declare o número máximo de recursos de cada tipo que possa precisar
  • O algoritmo de evitação de deadlocks examina dinamicamente o estado de alocação de recursos para garantir que nunca ocorra uma condição de espera circular
  • O estado de alocação de recursos é definido pelo número de recursos disponíveis e alocados, e pelas demandas máximas dos processos

Exige que o sistema tenha alguma informação adicional a priori �disponível

Silberschatz, Galvin e Gagne ©2018

Operating System Concepts – 10th Edition

17/44

rev. 2s/2026

IC/UNICAMP – MC504 Sistemas Operacionais

18 of 44

Estado Seguro

  • Quando um processo solicita um recurso disponível, o sistema deve decidir se a alocação imediata o deixa em estado seguro
  • O sistema está em estado seguro se existir uma sequência <P1, P2, ..., Pn> de TODOS os processos no sistema tal que, para cada Pi, os recursos que Pi ainda pode solicitar possam ser satisfeitos pelos recursos atualmente disponíveis + recursos mantidos por todos os Pj, com j < i
  • Ou seja:
    • Se os recursos necessários a Pi não estiverem imediatamente disponíveis, então Pi pode esperar até que todos os Pj terminem
    • Quando Pj termina, Pi pode obter os recursos necessários, executar, devolver os recursos alocados e terminar
    • Quando Pi termina, Pi +1 pode obter os recursos necessários, e assim por diante

Silberschatz, Galvin e Gagne ©2018

Operating System Concepts – 10th Edition

18/44

rev. 2s/2026

IC/UNICAMP – MC504 Sistemas Operacionais

19 of 44

Fatos Básicos

  • Se um sistema estiver em estado seguro ⇒ não há deadlocks�
  • Se um sistema estiver em estado inseguro ⇒ possibilidade de deadlock�
  • Evitação ⇒ garantir que o sistema nunca entre em estado inseguro.

Silberschatz, Galvin e Gagne ©2018

Operating System Concepts – 10th Edition

19/44

rev. 2s/2026

IC/UNICAMP – MC504 Sistemas Operacionais

20 of 44

Estados Seguro, Inseguro e de Deadlock

Silberschatz, Galvin e Gagne ©2018

Operating System Concepts – 10th Edition

20/44

rev. 2s/2026

IC/UNICAMP – MC504 Sistemas Operacionais

21 of 44

Algoritmos de Evitação

  • Instância única de um tipo de recurso
    • Use um grafo de alocação de recursos

​

  • Múltiplas instâncias de um tipo de recurso
    • Use o Algoritmo do Banqueiro

Silberschatz, Galvin e Gagne ©2018

Operating System Concepts – 10th Edition

21/44

rev. 2s/2026

IC/UNICAMP – MC504 Sistemas Operacionais

22 of 44

Grafo de Alocação de Recursos

  • A aresta de declaração Pi→Rj indica que o processo Pi pode requisitar pelo recurso Rj; é representada por uma linha tracejada
  • A aresta de declaração é convertida em aresta de solicitação quando um processo solicita um recurso
  • A aresta de solicitação é convertida em aresta de atribuição quando o recurso é alocado ao processo
  • Quando um recurso é liberado por um processo, a aresta de atribuição se reconverte em uma aresta de declaração
  • Recursos devem ser declarados a priori no sistema

Silberschatz, Galvin e Gagne ©2018

Operating System Concepts – 10th Edition

22/44

rev. 2s/2026

IC/UNICAMP – MC504 Sistemas Operacionais

23 of 44

Grafo de Alocação de Recursos

Silberschatz, Galvin e Gagne ©2018

Operating System Concepts – 10th Edition

23/44

rev. 2s/2026

IC/UNICAMP – MC504 Sistemas Operacionais

24 of 44

Estado inseguro no Grafo de Alocação de Recursos

Silberschatz, Galvin e Gagne ©2018

Operating System Concepts – 10th Edition

24/44

rev. 2s/2026

IC/UNICAMP – MC504 Sistemas Operacionais

25 of 44

Algoritmo de Grafo de Alocação de Recursos

  • Suponha que o processo Pi solicite um recurso Rj
  • A solicitação só pode ser concedida se a conversão da aresta de declaração em aresta de atribuição não formar um ciclo no grafo de alocação de recursos

Silberschatz, Galvin e Gagne ©2018

Operating System Concepts – 10th Edition

25/44

rev. 2s/2026

IC/UNICAMP – MC504 Sistemas Operacionais

26 of 44

Algoritmo do Banqueiro

  • Múltiplas instâncias de recursos�
  • Cada processo deve reivindicar a priori o uso máximo�
  • Quando um processo solicita um recurso, pode ter que esperar �
  • Quando um processo obtém todos os seus recursos, ele deve devolvê-los em um tempo finito

Silberschatz, Galvin e Gagne ©2018

Operating System Concepts – 10th Edition

26/44

rev. 2s/2026

IC/UNICAMP – MC504 Sistemas Operacionais

27 of 44

Estruturas de Dados para o Algoritmo do Banqueiro

  • Available: vetor de comprimento m. Se Available[j] = k, há k instâncias do tipo de recurso Rj disponíveis

​

  • Max: matriz n × m. Se Max [i,j] = k, então o processo Pi pode solicitar no máximo k instâncias do tipo de recurso Rj

​

  • Allocation: matriz n x m. Se Allocation[i,j] = k , então Pi tem atualmente k instâncias de Rj alocadas

​

  • Need: n x m matriz. Se Need[i,j] = k, então Pi pode precisar de k instâncias adicionais de Rj para completar sua tarefa

�Need [i,j] = Max[i,j] – Allocation [i,j]

Seja n = número de processos, e m = número de tipos de recursos.

Silberschatz, Galvin e Gagne ©2018

Operating System Concepts – 10th Edition

27/44

rev. 2s/2026

IC/UNICAMP – MC504 Sistemas Operacionais

28 of 44

Algoritmo de Segurança

  1. Sejam Work e Finish vetores de comprimento m e n, respectivamente. Inicialize:

Work = Available

Finish [i] = false para i = 0, 1, ..., n- 1

​

  • Encontre um i tal que ambos:

(a) Finish [i] = false

(b) Needi ≤ Work

Se não existir tal i , vá para o passo 4

​

  • Work = Work + Allocationi� Finish[i] = true� ir para o passo 2

​

  • Se Finish [i] == true para todo i, então o sistema está em estado seguro

Silberschatz, Galvin e Gagne ©2018

Operating System Concepts – 10th Edition

28/44

rev. 2s/2026

IC/UNICAMP – MC504 Sistemas Operacionais

29 of 44

Algoritmo de Solicitação de Recursos para o Processo Pi

Requesti = vetor de solicitação para o processo Pi. Se Requesti [j] = k, então o processo Pi quer k instâncias do tipo de recurso Rj

    • Se Requesti ≤ Need ir para o passo 2. Caso contrário, gere uma condição de erro, já que o processo excedeu seu máximo de reivindicação
    • Se Requesti ≤ Available, vá para a etapa 3. Caso contrário , Pi deve esperar, já que os recursos não estão disponíveis
    • Simule a alocação dos recursos solicitados a Pi modificando o estado da seguinte forma:

Available = Available – Requesti;

Allocationi = Allocationi + Requesti;

Needi = Needi – Requesti;

      • Se for seguro ⇒, os recursos são alocados a Pi
      • Se for inseguro ⇒ Pi deve esperar, e o estado antigo de alocação de recursos é restaurado

Silberschatz, Galvin e Gagne ©2018

Operating System Concepts – 10th Edition

29/44

rev. 2s/2026

IC/UNICAMP – MC504 Sistemas Operacionais

30 of 44

Exemplo do Algoritmo do Banqueiro

  • 5 processos P0 a P4;

3 tipos de recursos:

A (10 instâncias), B (5 instâncias) e C (7 instâncias)

  • Estado do sistema no instante T0:

Allocation Max Available

A B C A B C A B C

P0 0 1 0 7 5 3 3 3 2

P1 2 0 0 3 2 2

P2 3 0 2 9 0 2

P3 2 1 1 2 2 2

P4 0 0 2 4 3 3

Silberschatz, Galvin e Gagne ©2018

Operating System Concepts – 10th Edition

30/44

rev. 2s/2026

IC/UNICAMP – MC504 Sistemas Operacionais

31 of 44

Exemplo (cont.)

  • O conteúdo da matriz Need é definido como Max – Allocation

​

Need

A B C

P0 7 4 3

P1 1 2 2

P2 6 0 0

P3 0 1 1

P4 4 3 1 �

  • O sistema está em estado seguro, pois a sequência < P1, P3, P4, P2, P0> atende aos critérios de segurança

Silberschatz, Galvin e Gagne ©2018

Operating System Concepts – 10th Edition

31/44

rev. 2s/2026

IC/UNICAMP – MC504 Sistemas Operacionais

32 of 44

Exemplo: Solicitação de P1 (1,0,2)

  • Verifique que Request  Available (isto é, (1,0,2) ≤ (3,3,2))

Allocation Need Available

A B C A B C A B C

P0 0 1 0 7 4 3 2 3 0

P1 3 0 2 0 2 0

P2 3 0 2 6 0 0

P3 2 1 1 0 1 1

P4 0 0 2 4 3 1

​

​

  • Executar o algoritmo de segurança mostra que a sequência < P1, P3, P4, P0, P2> atende ao requisito de segurança

​

  • A solicitação (3,3,0) por P4 pode ser concedido?

​

  • A solicitação (0,2,0) por P0 pode ser concedido?

​

Silberschatz, Galvin e Gagne ©2018

Operating System Concepts – 10th Edition

32/44

rev. 2s/2026

IC/UNICAMP – MC504 Sistemas Operacionais

33 of 44

Detecção de Deadlocks

  • Permitir que o sistema entre em estado de deadlock�
  • Algoritmo de detecção�
  • Esquema de recuperação

Silberschatz, Galvin e Gagne ©2018

Operating System Concepts – 10th Edition

33/44

rev. 2s/2026

IC/UNICAMP – MC504 Sistemas Operacionais

34 of 44

Instância única de cada tipo de recurso

  • Manter o grafo de espera
    • Os nós são processos
    • Pi -> Pj se Pi estiver esperando por Pj�
  • Invocar periodicamente um algoritmo que procure um ciclo no grafo. Se houver um ciclo, há um deadlock

​

  • Um algoritmo para detectar um ciclo em um grafo requer O( n2 ) operações, em que n é o número de vértices no grafo

Silberschatz, Galvin e Gagne ©2018

Operating System Concepts – 10th Edition

34/44

rev. 2s/2026

IC/UNICAMP – MC504 Sistemas Operacionais

35 of 44

Grafo de Alocação de Recursos e Grafo de Espera

Grafo de Alocação de Recursos

Grafo correspondente de espera

Silberschatz, Galvin e Gagne ©2018

Operating System Concepts – 10th Edition

35/44

rev. 2s/2026

IC/UNICAMP – MC504 Sistemas Operacionais

36 of 44

Várias instâncias de um tipo de recurso

  • Available: Um vetor de comprimento m indica o número de recursos disponíveis de cada tipo
  • Allocation: Uma matriz n x m define o número de recursos de cada tipo atualmente alocados a cada processo
  • Request: Uma matriz n x m indica a solicitação atual de cada processo. Se Request [i][j] = k, então o processo Pi está solicitando k mais instâncias do tipo de recurso Rj.

Silberschatz, Galvin e Gagne ©2018

Operating System Concepts – 10th Edition

36/44

rev. 2s/2026

IC/UNICAMP – MC504 Sistemas Operacionais

37 of 44

Algoritmo de Detecção

  1. Sejam Work e Finish vetores de comprimento m e n, respectivamente Inicializar:
    1. Work = Available
    2. Para i = 1,2, ..., n, se Allocationi ≠ 0, então � Finish[i] = false; caso contrário, Finish[i] = true

​

  • Encontre um índice i tal que ambos:
    • Finish[i] == false
    • Requesti ≤ Work�

Se não existir tal i, vá para o passo 4

Silberschatz, Galvin e Gagne ©2018

Operating System Concepts – 10th Edition

37/44

rev. 2s/2026

IC/UNICAMP – MC504 Sistemas Operacionais

38 of 44

Algoritmo de Detecção (cont.)

  1. Work = Work + Allocationi� Finish[i] = true� ir para o passo 2�
  2. Se Finish[i] == false, para algum i, 1 ≤ i ≤ n, então o sistema está em estado de deadlock. Além disso, se Finish[i] == false, então Pi está em deadlock

O algoritmo requer uma ordem de operações O(m x n2) para detectar se o sistema está em estado de deadlock

​

Silberschatz, Galvin e Gagne ©2018

Operating System Concepts – 10th Edition

38/44

rev. 2s/2026

IC/UNICAMP – MC504 Sistemas Operacionais

39 of 44

Exemplo de algoritmo de detecção

  • Cinco processos P0 a P4; três tipos de recursos �A (7 instâncias), B (2 instâncias) e C (6 instâncias)

​

  • Estado do sistema no instante T0:

Allocation Request Available

A B C A B C A B C

P0 0 1 0 0 0 0 0 0 0

P1 2 0 0 2 0 2

P2 3 0 3 0 0 0

P3 2 1 1 1 0 0

P4 0 0 2 0 0 2

​

  • A sequência <P0, P2, P3, P1, P4> resultará em Finish[i] = true para todos os i

​

Silberschatz, Galvin e Gagne ©2018

Operating System Concepts – 10th Edition

39/44

rev. 2s/2026

IC/UNICAMP – MC504 Sistemas Operacionais

40 of 44

Exemplo (cont.)

  • P2 solicita uma instância adicional do tipo C

Request

A B C

P0 0 0 0

P1 2 0 2

P2 0 0 1

P3 1 0 0

P4 0 0 2

​

  • Como é o sistema?
    • Os recursos mantidos por P0 podem ser recuperados, mas são insuficientes para atender às solicitações dos demais processos
    • Existe um deadlock, composto pelos processos P1, P2, P3 e P4

Silberschatz, Galvin e Gagne ©2018

Operating System Concepts – 10th Edition

40/44

rev. 2s/2026

IC/UNICAMP – MC504 Sistemas Operacionais

41 of 44

Uso do Algoritmo de Detecção

  • Quando e com que frequência invocar depende de:
    • Com que frequência é provável que um deadlock ocorra?
    • Quantos processos precisarão sofrer rollback?
      • um para cada ciclo independente�
  • Se o algoritmo de detecção for invocado em intervalos arbitrários, poderá haver muitos ciclos no grafo de recursos; assim, não será possível determinar qual processo em deadlock “causou” o problema.

Silberschatz, Galvin e Gagne ©2018

Operating System Concepts – 10th Edition

41/44

rev. 2s/2026

IC/UNICAMP – MC504 Sistemas Operacionais

42 of 44

Recuperação do Deadlock: Término de Processo

  • Abortar todos os processos em deadlock�
  • Abortar um processo por vez até eliminar o ciclo de deadlock�
  • Em que ordem devemos escolher abortar?
    1. Prioridade do processo
    2. Quanto tempo o processo já executou e quanto falta para sua conclusão
    3. Recursos utilizados pelo processo
    4. Recursos de que o processo precisa para concluir
    5. Quantos processos precisarão ser terminados
    6. O processo é interativo ou em lote?

Silberschatz, Galvin e Gagne ©2018

Operating System Concepts – 10th Edition

42/44

rev. 2s/2026

IC/UNICAMP – MC504 Sistemas Operacionais

43 of 44

Recuperação do Deadlock: Preempção de Recursos

  • Seleção de vítima – minimizar custos�
  • Rollback – retornar a algum estado seguro e reiniciar o processo a partir desse estado�
  • Inanição – o mesmo processo pode ser sempre escolhido como vítima; incluir o número de rollbacks no fator de custo

Silberschatz, Galvin e Gagne ©2018

Operating System Concepts – 10th Edition

43/44

rev. 2s/2026

IC/UNICAMP – MC504 Sistemas Operacionais

44 of 44

Bibliografia

Capítulo 2.

Capítulo 8.

(Capítulo 7 na 9a edição em Português).

44/44

rev. 2s/2026

IC/UNICAMP – MC504 Sistemas Operacionais