terça-feira, 16 de junho de 2009

6 - Deadlocks - Juliane

Tratando-se de Sistemas Operacionais, um Deadlock caracteriza uma situação em que ocorre um evento inesperado e dois ou mais processos ficam impedidos de continuar suas execuções, ficando bloqueados. O deadlock é considerado uma falha e não um erro. O erro é a ocorrência frequente de deadlocks.

Eles ocorrem, por exemplo, quando mais de um usuário altera um mesmo registo simultaneamente.

Do ponto de vista técnico, um deadlock ocorre com um conjunto de processos e recursos não-preemptíveis, onde um ou mais processos desse conjunto está aguardando a liberação de um recurso por um outro processo que, por sua vez, aguarda a liberação de outro recurso alocado ou dependente do primeiro processo.

Uma situação de deadlock pode surgir se as condições seguintes forem atendidas simultaneamente em um sistema:

  1. Exclusão mútua
  2. Manter e esperar
  3. Não-preempção
  4. Espera circular
A forma que o linux trata deadlocks é ignorando-os, assumindo que nunca irão acontecer. Esse modo de tratamento é um dos três existentes. São eles:
  • Prevenir
  • Identificar e Tratar
  • Ignorar
Em geral, o custo para tratamento de deadlocks não compensa e pode gerar um dano ainda maior que o próprio deadlock. Assim, a maioria dos sistemas ignora ou previne.

Existe uma técnica que torna possível eliminar um deadlock. Para isso, um processo será abortado. Existem duas formas de se conseguir isto, são elas: abortar todos os processos em deadlock ou abortar um processo de cada vez até que o ciclo de deadlock seja eliminado. Abortar um processo pode não ser fácil. Se o processo estiver no meio da atualização de um arquivo, por exemplo, seu cancelamento deixará esse arquivo em estado incorreto.

Existe ainda outra forma de eliminar deadlocks que é usando preempção de recursos, apropriando alguns recursos dos processo com sucesso e entregando esses recursos a outros processos, até que o ciclo de deadlock seja desfeito. Para isto, deve-se resolver três questões. A primeira é a Seleção da Vítima, ou seja, quem deverá ser preemptado. A seguir, a Reversão, que decide o que será feito com o processo do qual foi retirado um recurso. E, por último, garantir que a Starvation não ocorrerá, ou seja, nem sempre os recursos do mesmo processo serão preemptados.

Um comentário:

Bibliográfia utilizada

SILBERSCHATZ, Abraham - Sistemas Operacionais com Java, 7ª ed. rev. atual. - Rio de Janeiro: Elsevier Campus, 2008



TANENBAUM, Andrew S. - Sistemas Operacionais Modernos, 2ª ed. - São Paulo: Prentice Hall, 2003




STALLINGS, william - Operating Systems: Internals and Design Principles, Sixth Edition, 2009.