15
Programação Concorrente DEADLOCK

Principais Características DeadLock

Embed Size (px)

Citation preview

Page 1: Principais Características DeadLock

Programação Concorrente

DEADLOCK

Page 2: Principais Características DeadLock

2

1 Introdução........................................................................................................................................................3

2 Deadlock..........................................................................................................................................................4

2.1 Exemplo 1.....................................................................................................................................................4

2.2 Exemplo 2.....................................................................................................................................................4

2.3 Exemplo 3.....................................................................................................................................................6

3 Diagramas de processos e recursos.........................................................................................................6

4 Condições Necessárias para a ocorrência de deadlock......................................................................8

5 Método para tratar Deadlocks.....................................................................................................................9

5.1 Ignorar o problema (algoritmo da avestruz).........................................................................................9

5.2 Detecção e recuperação dos deadlocks...............................................................................................9

5.3 Prevenção dinâmica...................................................................................................................................9

5.4 Prevenção estrutural..................................................................................................................................9

6 Recuperação de deadlocks.......................................................................................................................10

6.1 Recuperação através de preempção....................................................................................................10

6.2 Recuperação através de operações de rollback...............................................................................10

6.3 Recuperação através de eliminação de processos..........................................................................10

7 Prevenção de deadlocks....................................................................................................................10

8 Algoritmo do banqueiro de Dijkstra........................................................................................................11

9 Conclusão......................................................................................................................................................12

10 Referências Bibliográficas.......................................................................................................................13

Page 3: Principais Características DeadLock

3

1 INTRODUÇÃO

Page 4: Principais Características DeadLock

4

2 DEADLOCK

Um deadlock acontece quando duas ou mais tarefas bloqueiam uma à outra permanentemente, sendo que cada uma tem o bloqueio de um recurso, que a outra tarefa está tentando bloquear.

2.1 EXEMPLO 1

A transação A adquire um bloqueio compartilhado da linha 1. A transação B adquire um bloqueio compartilhado da linha 2.

A transação A agora solicita um bloqueio exclusivo na linha 2 e é bloqueado até que a transação B termine e libere o bloqueio compartilhado que tem na linha 2.

A transação B agora solicita um bloqueio exclusivo na linha 1 e é bloqueado até que a transação A termine e libere o bloqueio compartilhado que tem na linha 1.

A transação A não pode terminar até que a transação B termine, mas a transação B está bloqueada pela transação A. Essa condição é também chamada de dependência cíclica: a transação A tem uma dependência da transação B, e a transação B fecha o círculo tendo uma dependência da transação A. Ambas as transações em um deadlock esperarão indefinidamente, a menos que o deadlock seja quebrado por um processo externo.

2.2 EXEMPLO 2

Outro exemplo onde erros de deadlock ocorrem é no banco de dados:

Suponha que uma empresa tenha vários vendedores e vários pontos de venda/caixas. O vendedor A vendeu 1 martelo e 1 furadeira. O sistema então solicita o travamento do registro da tabela ESTOQUE que contém o total de martelos em estoque e em seguida solicita o travamento do registro que contém o total de furadeiras em estoque. De posse da exclusividade de acesso aos dois registros, ele lê a quantidade de martelos, subtrai 1 e escreve de novo no registro, o mesmo com o registro de furadeiras. Observe, no entanto que existem diversos caixas operando simultaneamente de forma que se algum outro caixa naquele exato instante estiver vendendo um furadeira, ele ficará de aguardando a liberação do registro das furadeiras para depois alterá-lo. Note que ele só altera os registro depois que for dada exclusividade para ele de TODOS os recursos que ele precisa, ou seja, de todos os registro. Suponha agora que em outro caixa a venda foram vendidos 1 furadeira e 1 martelo e que o outro caixa solicitou o travamento do registro com a quantidade de furadeiras e agora quer o acesso ao de martelos, no entanto o de martelos está travado para o primeiro caixa. Nenhum deles devolve o recurso

Page 5: Principais Características DeadLock

5

(registro) sobre o qual tem exclusividade e também não consegue acesso ao outro registro que falta para terminar a operação. Isto é um deadlock.

2.3 EXEMPLO 3

Uma outra forma de ilustrar um deadlock pode ser com um exemplo de uma lei aprovada pela assembleia do estado norte-americano de Kansas no início deste século. Dizia, em parte: "Quando dois trens se aproximarem um do outro em um cruzamento, ambos deverão parar completamente e nenhum dos dois deverá ser acionado até que o outro tenha partido."

Figura 2.1: Representação de um deadlock

3 DIAGRAMAS DE PROCESSOS E RECURSOS

O estudo dos bloqueios perpétuos pode ser bastante facilitado através da utilização de diagramas especiais denominados diagramas de alocação de recursos ou diagramas de processo versus recursos ou ainda grafos de alocação de recursos [SGG01, p. 162].

Nestes diagramas existem apenas duas entidades, processos e recursos, interligados por arcos direcionados. Os processos são representados através de quadrados ou retângulos. Os recursos são representados através de circunferências. Os arcos direcionados unindo processos e recursos são usados com dois significados distintos: requisição de recursos e alocação de recursos.

Na Figura 2 temos os elementos construtivos possíveis deste tipo de diagrama.

Page 6: Principais Características DeadLock

6

Figura 3.1: Elementos do Diagrama de Processos x Recursos

Neste exemplo, embora exista disputa por recursos (processos B e E requisitam o uso do recurso W), não existe nenhum caminho fechado, ou seja, não existe qualquer deadlock, sendo assim este diagrama pode ser reduzido:

1. D finaliza o uso de Z.

2. Com Z livre, C libera W para alocar Z.

Tabela 3.1: Exemplo de alocação e requisição de recursos

Page 7: Principais Características DeadLock

7

Figura 3.2: Diagrama de processos e recursos da Tabela 3.1

3. Com W livre, ou B ou E poderão alocá-lo. Se B for favorecido nesta disputa, alocando W, embora E permaneça em espera, Y será liberado.

4. Com Y livre, A libera X para alocar Y.

5. Não surgindo novos processos, B libera W.

6. Com W livre, E pode prosseguir sua execução.

A redução, independentemente do tempo que os processos utilizarão os recursos alocados, mostra que tais processos serão atendidos dentro de um intervalo de tempo menor ou maior. A despeito de questões relacionadas com desempenho, esta a situação desejável em um sistema.

Diferentemente, a alocação e requisição de recursos em um sistema pode configurar um deadlock. Utilizando o diagrama de alocação de recursos, poderíamos representar um deadlock envolvendo dois processos e dois recursos, como ilustra a Figura 3.3.

Através destes diagramas, fica clara a situação da formação de uma cadeia circular (um caminho fechado) ligando uma sequencia de requisições e alocações de recursos do sistema por parte de um grupo de processos.

Page 8: Principais Características DeadLock

8

Figura 3.3: Representação de deadlock envolvendo 2 processos

4 CONDIÇÕES NECESSÁRIAS PARA A OCORRÊNCIA DE DEADLOCK

O deadlock ocorre naturalmente em alguns sistemas. No entanto, é necessário ressaltar que tais sistemas precisam obedecer a algumas condições para que uma situação de deadlock se manifeste.

Essas condições estão listadas abaixo, onde as três primeiras caracterizam um modelo de sistema, e a última é o deadlock propriamente dito: processos que estejam de posse de recursos obtidos anteriormente podem solicitar novos recursos. Caso estes recursos já estejam alocados a outros processos, o processo solicitante deve aguardar pela liberação do mesmo;

não-preempção: Os recursos não podem sofrer preempção; ou seja, um recurso só pode ser liberado voluntariamente pelo processo que o mantém, depois que esse processo tiver completado sua tarefa.

exclusão mútua: Pelo menos um recurso deverá ser mantido em modo não-compartilhado; ou seja, apenas um processo de cada vez pode usar esse recurso. Se outro processo solicitar esse recurso, o processo solicitante deverá ser retardado até que o recurso tenha sido liberado.

posse-e-espera: Deve haver um processo que esteja mantendo pelo menos um recurso e esteja esperando para obter recursos adicionais que estejam sendo mantidos por outros processos no momento.

espera circular: dado um conjunto de processos {P1, P2, ..., Pn} em espera, P1 está esperando por um recurso mantido por P2; P2 está esperando um recurso mantido por P3 e assim sucessivamente, até que Pn esteja esperando por um recurso alocado por P1.

5 MÉTODO PARA TRATAR DEADLOCKS

Page 9: Principais Características DeadLock

9

Segundo Tanenbaum [TAN92, p. 245] existem basicamente quatro alternativasPara o tratamento dos bloqueios perpétuos, ou seja, quatro estratégias básicas para resolvermos os problemas dos deadlocks:

5.1 IGNORAR O PROBLEMA (ALGORITMO DA AVESTRUZ)

Apesar de não parecer uma solução para o problema, devem ser consideradas a possibilidade de ocorrência dos deadlocks e os custos computacionais associados ao seu tratamento. A alternativa mais simples realmente é ignorar o problema e conviver com a possibilidade de sua ocorrência. Os sistemas UNIX utilizam esta aproximação favorecendo aspectos de performance em situações mais comuns.

5.2 DETECÇÃO E RECUPERAÇÃO DOS DEADLOCKS

Outra alternativa é permitir que os bloqueios ocorram, procurando-se detectá-los e recuperá-los. Deve-se utilizar algum algoritmo que produza um diagrama de alocação de recursos, analisando em busca de caminhos fechados (deadlocks) utilizando alguma técnica de recuperação. Estes algoritmos especiais, que apesar da sobrecarga que provocam, podem evitar maiores transtornos no sistema possibilitando que na ocorrência dos deadlocks estes sejam descobertos e eliminados.

5.3 PREVENÇÃO DINÂMICA

Os deadlocks podem ser prevenidos através de procedimentos cuidadosos de alocação que analisam constantemente a possibilidade de formação de cadeias circulares. Tais algoritmos também são complexos e acabam por onerar o sistema computacional.

5.4 PREVENÇÃO ESTRUTURAL

Os deadlocks podem ser estruturalmente eliminados de um sistema através da negação de uma ou mais das quatro condições de ocorrência. Para isto devem ser tratadas as condições de Coffman et al., o que é resumidamente apresentado na Tabela abaixo:

Para garantir que um sistema nunca entre em deadlock é possível usar um esquema de prevenção de deadlocks ou de impedimento de deadlocks. Esta prevenção é realizada através de um conjunto de métodos que garantem que pelo menos uma das situações necessárias para que um deadlock aconteça seja falha. Basicamente, isso é feito limitando a forma como as solicitações de recursos acontecem.

Caso o sistema operacional não utilize um esquema de prevenção, será necessário um mecanismo de detecção e recuperação de deadlocks. Pelo fato do deadlock não ser evitado, até que ele seja descoberto é provável que o desempenho do sistema tenha sofrido uma considerável queda.

Page 10: Principais Características DeadLock

10

6 RECUPERAÇÃO DE DEADLOCKS

Ainda que os deadlocks ocorram, dentro de certas circunstâncias é possível resolvê-los, isto é, recuperá-los ou eliminá-los, utilizando algumas t´técnicas:

6.1 RECUPERAÇÃO ATRAVÉS DE PREEMPÇÃO

Retirando-se algum recurso envolvido no bloqueio perpétuo do processo que o aloca permite a quebra do caminho fechado e consequente solução do deadlock. O problema reside que nem sempre um recurso pode ser retirado de um processo sem efeitos colaterais prejudiciais a este processo.

6.2 RECUPERAÇÃO ATRAVÉS DE OPERAÇÕES DE ROLLBACK

Exige a implementação de checkpoints, isto é, um mecanismo de armazenamento de estados seguros do sistema através da cópia dos estados individuais dos processos em arquivos especiais. Isto possibilita que tais estados sejam retomados a partir daquele ponto. Esta solução,além da difícil implementação, exige muitos recursos e tem elevado custo computacional, embora resolva bem o problema.

6.3 RECUPERAÇÃO ATRAVÉS DE ELIMINAÇÃO DE PROCESSOS

Esta é maneira mais simples, embora também a mais drástica. Um ou mais dos processos identificados como envolvidos no bloqueio perpétuo podem ser sumariamente eliminados, de modo que o bloqueio seja resolvido.Enquanto alguns processos podem ser seguramente reiniciados (p.e., uma compilação), procedimentos de atualização em bancos de dados nem sempre podem ser interrompidos e reiniciados. A eliminação de processos que não podem ser simplesmente reiniciados pode provocar prejuízos ao sistema.

7 PREVENÇÃO DE DEADLOCKS

A prevenção de deadlocks é a estratégia preferencialmente adotada pelos projetistas de sistemas, adotando-se uma política que assume o custo da prevenção como alternativa aos prejuízos possíveis da ocorrência dos deadlocks e de sua eliminação. Para prevenir-se a ocorrência dos deadlocks podem ser adotadas uma ou mais das seguintes estratégias, tal como proposto por Havender (1968):

1. Um processo só pode solicitar um recurso se liberar o recurso que detém.2. Um processo que tem negado o pedido de recurso adicional deve liberar o recurso que atualmente detém.3. Se a solicitação de recursos ocorrer em ordem linear ascendente, a espera circular não consegue se formar.

Page 11: Principais Características DeadLock

11

Mesmo com as quatro condições estando presentes, é possível evitar-se a ocorrência dos deadlocks utilizando-se o algoritmo do banqueiro de Dijkstra.

8 ALGORITMO DO BANQUEIRO DE DIJKSTRA

O algoritmo do banqueiro, proposto por Dijkstra em 1965, é uma solução clássica no estudo dos sistemas operacionais que visa ilustrar as questões associadas à concessão de recursos aos processos e as consequências possíveis destas concessões [DEI92, p. 167] [TAN92, p. 256]. Este algoritmo efetua um mapeamento dos recursos e processos de forma a considerar, a cada pedido de uso de um recurso, se tal alocação leva a um estado seguro ou não. Se o estado seguinte é seguro, o pedido é concedido, caso contrário tal solicitação é adiada até que possa conduzir a um estado seguro.Na prática, o problema desta solução é que cada processo deve especificar, inicialmente, a quantidade máxima de cada recurso que pretenda utilizar. Além disso, a quantidade de processos varia a cada instante em sistemas reais. Se um novo processo conduzir a um estado inseguro, sua criação deverá ser adiada, o que também pode gerar um deadlock. Outro ponto é que a quantidade de recursos pode variar (geralmente diminuir com falhas no sistema) aumentando muito a complexidade desta solução e, portanto, sua aplicação prática.

Page 12: Principais Características DeadLock

12

9 CONCLUSÃO

Page 13: Principais Características DeadLock

13

10 REFERÊNCIAS BIBLIOGRÁFICAS

https://docs.google.com/viewer?a=v&q=cache:2e6vJya3gPUJ:regulus.pcs.usp.br/~jean/so/AULA%252012%2520-%2520Deadlocks.pdf+&hl=pt-BR&gl=br&pid=bl&srcid=ADGEEShWWVReRvF3L7BkwY4xzLzXzz0gdgzMa2cyCm_fGM_NWixcnv5KFv8ZAshX63UDPqQKzYMgqJ9pC_xB_YE3Ux0abi_Jx45vBfUfJ_YOU-OEQD91LFAkIcM5hh2sOm95EeGn1lW3&sig=AHIEtbS5kvrc2FmR42tDYE82NFrblU7uJw

http://msdn.microsoft.com/pt-br/library/ms177433.aspx

http://msdn.microsoft.com/pt-br/library/ms178104.aspx

http://msdn.microsoft.com/pt-br/library/ms177453.aspx

http://pt.wikipedia.org/wiki/Deadlock