segunda-feira, 29 de abril de 2013

Recuperação de Deadlocks

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.
  1. 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.
  2. 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
  1. A prioridade do processo.
  2. Por quanto tempo esse processo foi executado e quanto tempo falta para ele ser concluído.
  3. 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. 
  4. De quantos recursos o processo precisa para concluir sua tarefa.
  5. Quantos processos terão de ser encerrados.
  6. 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.
  1. 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.
  2. 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.
  3. 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