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**