Começar. É Gratuito
ou inscrever-se com seu endereço de e-mail
Deadlocks por Mind Map: Deadlocks

1. Deadlock acontece quando dois ou mais processos ficam bloqueados indefinidamente, esperando por um recurso que outros processos estão segurando.

1.1. **Processo A** possui o **recurso 1** e precisa do **recurso 2** para continuar. **Processo B** possui o **recurso 2 **a precisa do **recurso 1** para continuar.

1.2. Deadlock pode acontecer tanto em recursos de **software** ou **hardware**

2. **Recurso**

2.1. Sequência de eventos necessários: **1. Requisitar o recurso** **2. Usar o recurso** **3. Liberar o recurso**

2.2. **Recurso preemptível**

2.2.1. É **possível** retirar de um processo sem nenhum prejuízo

2.3. **Recurso não preemptível**

2.3.1. **Não é possível** retirar do processo atual sem apresentar um problema ou falha

3. **Condições para deadelocks de recursos**

3.1. Há **4 condições** e todas precisam acontecer para ter um impasse.

3.2. **1. Condição de exclusão mútua**

3.2.1. O recurso deve estar ou associado a um processo, ou disponível.

3.3. **2. Condição de posse e espera**

3.3.1. Processos que já possui algum recurso e requisitam novos recursos.

3.4. **3. Condição de não preempção**

3.4.1. O recurso não pode ser retirado forçamente do processo em posse.

3.5. **4. Condição de espera circular**

3.5.1. Encadeamento circular onde de dois ou mais processos. Cada um está esperando por um recurso que está tomado pelo outro.

4. **Modelagem de deadlocks**

4.1. **Processos** são **círculos**

4.2. **Recursos** são **quadrados**

4.3. Se a seta sai do recurso e vai para o processo, significa que foi requisitado, alocado e em uso.

4.4. Se a seta sai do processo e vai para o recurso, significa que o processo está esperando pelo recurso.

5. **Como lidar com deadlock**

5.1. **1. Ignorar o problema**

5.1.1. Também chamado de algoritmo do avestruz. Ignore o problema e siga a vida.

5.2. **2. Detecção e recuperação**

5.2.1. **Detecção de deadlock com um recurso de cada tipo**

5.2.1.1. Utiliza a matriz

5.2.2. Se um deadlock foi detectado, é necessário recuparar.

5.2.2.1. **Preempção**

5.2.2.1.1. Retomar o recurso de um processo para atribuir a outro.

5.2.2.2. **Retrocesso de processo**

5.2.2.2.1. Gerar checkpoints salvando em arquivos a imagem da memória, sem sobrepondo os check points anteriores e gerar log de execução.

5.2.2.3. **Eliminação de prcesso **

5.2.2.3.1. Eliminar um processo do ciclo que está gerando o deadlock.

5.3. **3. Anulação dinâmica por meio de alocação cuidadosa de recursos**

5.3.1. **Estados Seguros**

5.3.1.1. Um sistema em estado seguro é quando todos os processos podem ser concluídos mesmo se houvesse uma requisição repentina de máximo possível de recursos.

5.3.2. **Estados Inseguros**

5.3.2.1. Um sistema entra em um estado inseguro quando ele não pode garantir mais que os processos terminarão sem um deadlock.

5.4. **4. Prevenção - Negando uma das quatro condições necessárias**

5.4.1. **Exclusão mútua**

5.4.1.1. Evitar de alocar um recurso exclusivamente a um processo.

5.4.1.2. Utilizar **daemon**

5.4.1.2.1. Um daemon é um processo em segundo plano que executa tarefas automaticamente no sistema, sem interação direta com o usuário. Ele geralmente gerencia serviços ou recursos do sistema, como o gerenciamento de impressões, logs ou conexões de rede.

5.4.2. **Posse e espera**

5.4.2.1. Exigir para que todos os os processos requisitem todos os seus recursos antes de inicializarem as execuções.

5.4.3. **Não preempção**

5.4.3.1. Remover um recurso de um processo à força.

5.4.3.2. Virtualização

5.4.3.2.1. É uma técnica para simular recursos físicos, permitindo que multiplos processos utilizem de forma mais eficiente.

5.4.4. **Atacando a condição de espera circular**

5.4.4.1. Enumerar o recurso e forçar que as requisições sejam feitas na ordem numérica.

6. **Condição de inanição**

6.1. Condição de inanição é quando um processo é parado por muito tempo. Por exemplo, se uma impressora sempre prioriza os arquivos menores, os arquivos maiores nunca serão impressos.

6.1.1. Utilizar **FIFO**