Quando um
algoritmo de detecção de determina que ocorreu um deadlock, existem várias
alternativas. Uma delas é informar ao operador que ocorreu um deadlock e
deixá-lo lidar com o problema manualmente. Outra é permitir que o sistema se
recupere do deadlock automaticamente . Exitem duas possibilidades para
interrupção de um deadlock. Uma é simplesmente abortar um ou mais processos
para romper a espera circular. Outra é provocar a preempção de alguns recursos
de um ou mais processos envolvidos no deadlock.
Encerramento
de Processos
Para eliminar deadlocks abortando um processo,
podemos usar dois métodos.
- Abortar todos os processos em deadlock. Ele
romperá com o ciclo de deadlock, mas os processos em deadlock podem ter
sido executados por muito tempo, e os resultados desses processamentos
parciais devem ser descartados e refeitos posteriormente.
- Abortar um processo de cada vez até o ciclo de
deadlock ser eliminado. Esse método pode causa uma sobrecarga já que após
cada processo ser abortado, um algoritmo de detecção de deadlocks deve ser
executado para determinar se algum processo ainda está em deadlock.
Abortar um
processo não é tarefa fácil, já que se o processo estava no meio de uma
atualização de um arquivo e for encerrado esse arquivo ficará em um estado
incorreto.
Se o método de encerramento parcial for usado uma
politica para o encerramento dos processos deve ser estabelecida
- A prioridade do processo.
- Por quanto tempo esse processo foi executado e
quanto tempo falta para ele ser concluído.
- Quantos recursos o processo usou e de que
tipos o processo usou, leva-se em consideração se os recursos são facilmente
interceptáveis.
- De quantos recursos o processo precisa para
concluir sua tarefa.
- Quantos processos terão de ser encerrados.
- Se o processo é interativo ou batch
Preempção
de Recursos
Para eliminar
deadlock através da preempção de recursos, um preempção sucessiva de alguns
recursos dos processos e dar esses recursos a outros processos até que o ciclo
do deadlock seja rompido. Para isso três aspectos devem ser considerados.
- Seleção de uma Vítima. Devemos levar em
consideração o custo dessa preempção, que inclui a quantidade de recursos
que um processo em deadlock está mantendo e quanto tempo o processo levou
para ser executado até o momento.
- Reversão. Ao abortar um processo através da
preempção de algum recurso que ele estava utilizando a melhor maneira de
executar esse processo é reiniciando-o, embora seja mais fácil continuar
de onde o processo foi interrompido isso requer que o sistema mantenha
mais informações sobre o estado de todos os processos em execução.
- Inanição. Em um sistema de seleção de vitima
baseado principalmente em fatores de custo, pode ocorrer que sempre o
mesmo processo seja selecionado como vitima. Com isso o processo nunca
concluirá sua tarefa. Desta forma o sistema deve garantir que um único
processo seja selecionado apenas uma determinada quantidade de vezes como
vitima, para não entrar em inanição. A solução mais eficaz é colocar o
numero de reversões no fator de custo.
Nenhum comentário:
Postar um comentário