AULA 12 - Deadlocks

Você também pode gostar

Você está na página 1de 8

Sistemas Operacionais

AULA 12 - Deadlocks
Em alguns casos pode ocorrer a seguinte situao: um processo solicita um determinado recurso e este no est disponvel no momento. Quando isso ocontece o processo entra para o estado de espera (bloqueado). Em algumas situaes possvel que estes processos nunca mais mudem de estado, pois os recursos que eles necessitam podem estar sendo mantidos por outros processos em espera. Essa situao chamada de deadlock ou impasses. Definio: Um conjunto de processos est em estado de deadlock quando todos os processos no conjunto esto esperando por um evento que s pode ser causado por outro processo do conjunto. A idia de impasse ou deadlock pode ser mais facilmente entendida se fizermos uma analogia com uma escada de um prdio utilizada para casos de incndio. Apesar de ter sido construda como uma opo de fuga em caso de incndio, as pessoas que trabalham no prdio muitas vezes preferem utilizar a escada ao invs dos elevadores. No entanto, h espao apenas para uma pessoa em cada degrau. Logo, o trfego pela escada vai bem at que 2 pessoas se cruzam. Por outro lado, existe uma plataforma em cada um dos andares que suporta vrias pessoas. Os problemas acontecem no momento em que uma pessoa que est subindo a escada encontra outra que est descendo e ambas se recusam a retroceder at a plataforma. Esta situao permanecer gerando um impasse ou deadlock.

texto

desta

seo

foi

publicado

em

http://msdn.microsoft.com/pt-

br/library/ms177433.aspx

e estou inserindo neste material para mostrar

a importncia do conceito em algumas reas da computao. Leiam tambm as matrias publicadas sobre: Detectando e encerrando deadlocks: o http://msdn.microsoft.com/pt-br/library/ms178104.aspx

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

Prof. Dr. Jean M. Laine

Sistemas Operacionais
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. Por exemplo:

A transao A adquire um bloqueio compartilhado da linha 1. A transao B adquire um bloqueio compartilhado da linha 2. A transao A agora solicita um bloqueio exclusivo na linha 2 e bloqueado at que a transao B termine e libere o bloqueio

compartilhado que tem na linha 2.

A transao B agora solicita um bloqueio exclusivo na linha 1 e bloqueado at que a transao A termine e libere o bloqueio

compartilhado que tem na linha 1. A transao A no pode terminar at que a transao B termine, mas a transao B est bloqueada pela transao A. Essa condio tambm chamada de dependncia cclica: a transao A tem uma dependncia da transao B, e a transao B fecha o crculo tendo uma dependncia da transao A. Ambas as transaes em um deadlock esperaro indefinidamente, a menos que o deadlock seja quebrado por um processo externo. O monitor de deadlock do Microsoft Mecanismo de Banco de Dados do SQL Server verifica periodicamente detectar uma as tarefas que esto ele em um deadlock. uma das Se o monitor como

dependncia

cclica,

escolhe

tarefas

vtima e termina sua transao com um erro. Isso permite que a outra tarefa complete sua transao. O aplicativo com a transao que terminou com um erro pode repetir a transao, a qual normalmente concluda depois que a outra transao em deadlock encerrada. Usando certas convenes de codificao em aplicativos reduz a chance de que os aplicativos causaro deadlocks. Para obter mais informaes, consulte Minimizando deadlocks. O deadlock freqentemente confundido com bloqueio normal. Quando uma transao transao, solicita a um bloqueio em um recurso at bloqueado que o por outra seja

transao

solicitante

espera

bloqueio

liberado. Por padro, as transaes SQL Server no tm tempo limite, a menos que LOCK_TIMEOUT seja configurado. A transao solicitante

Prof. Dr. Jean M. Laine

Sistemas Operacionais
bloqueada, no em deadlock, por que ela no fez nada para bloquear a transao que deve o bloqueio. Finalmente, a transao proprietria vai terminar e liberar o bloqueio e a transao solicitante ter o bloqueio atribudo e processado. Os deadlocks s vezes so chamados de abrao mortal. Deadlock uma condio que pode ocorrer em qualquer sistema com vrios threads, no s em sistemas de gerenciamento de banco de dados

relacional, e pode ocorrer para outros recursos, alm de bloqueios de objetos em bancos de dados. Por exemplo, um thread em um sistema

operacional de vrios threads pode adquirir um ou mais recursos, como bloqueios de memria. Se o recurso sendo adquirido atualmente

propriedade de outro thread, o primeiro thread pode ter que esperar o thread proprietrio liberar o recurso alvo. O thread em espera tem uma dependncia do thread proprietrio para aquele recurso em particular. Em uma instncia do Mecanismo de Banco de Dados, sesses podem fazer um deadlock ao adquirir recursos que no so de banco de dados, como memria ou threads.

Na ilustrao, a transao T1 tem uma dependncia da transao T2 para o recurso de bloqueio de tabela Part. Da mesma forma, a transao T2 tem uma dependncia da transao T1 para o recurso de bloqueio de tabela Supplier. Devido a essas dependncias formarem um ciclo, h um deadlock entre as transaes T1 e T2. Os deadlocks tambm podem ocorrer quando uma tabela particionada e a configurao LOCK_ESCALATION do ALTER TABLE configurada para AUTO. Quando a LOCK_ESCALATION configurada para AUTO, a simultaneidade

aumenta ao permitir que o Mecanismo de Banco de Dados bloqueie parties de tabela no nvel de HoBT em vez de no nvel de TABLE. Entretanto, quando transaes separadas mantm bloqueios de partio em uma tabela e querem um bloqueio em algum lugar de outra partio de transaes, isso

Prof. Dr. Jean M. Laine

Sistemas Operacionais
causa um deadlock. Esse tipo de deadlock pode ser evitado configurando LOCK_ESCALATION simultaneidade para TABLE; as embora essa configurao extensas em ir uma reduzir partio a a

forando

atualizaes

esperarem por um bloqueio de tabela.

Modelo de Sistema
Em nosso sistema computacional existe um nmero finito de recursos (espao de memria, ciclos de CPU, arquivos, dispositivos de I/O, etc) que sero distribudos entre os processos existentes que concorrem pelo uso destes. Assim, sempre que um processo deseja utilizar algum dos recursos do sistema ele deve primeiro solicit-lo atravs de uma requisio ao sistema operacional. Consequentemente, aps utilizar o recurso o processo deve liber-lo para outros processos. Em um modo de operao normal, a seguinte seqncia deve ser estabelecida pelo processo: 1. pedido: se o processo no tiver seu pedido atendido ele bloqueado e ficar esperando at ganhar a posse do recurso. 2. uso: tendo posse do recurso ele poder utiliz-lo. 3. liberao: desalocar o recurso adquirido pelo processo o liberando para outro processo. Os pedidos e a liberao de recursos so feitos atravs de chamadas ao sistema operacional, por exemplo: open e close file, allocate e free memory, etc. No entanto, alguns pedidos so gerenciados pelo prprio usurio, como acontece ao utilizar semforos (UP e DOWN). O gerenciamento desses recursos feito pelo sistema operacional atravs de uma tabela, que registra se cada recurso est livre ou ocupado. Neste ltimo caso, tambm especificado o processo que tem a posse do recurso. Da mesma forma que acontecia no uso de semforos, qdo um processo P solicita um recurso X e ele est ocupado o P pode ser inserido em um fila associado ao recurso X. Existem alguns casos de deadlocks que podemos citar: 1. requisies de arquivos: se for permitido aos programas requisitar e bloquear durante sua execuo. P1 requisita e obtm arquivo F2 P2 requisita e obtm arquivo F1 Prof. Dr. Jean M. Laine 4

Sistemas Operacionais P1 requisita F1 mas est bloqueado P2 requisita F2 mas est bloqueado. 2. alocao de dispositivos dedicados: utilizao de um grupo de dispositivos dedicados pode gerar deadlocks. Exemplo: um programa que precise de 2 fitas magnticas para copiar dados de uma para outra. 3. alocao de mltiplos dispositivos: vrios processos requisitam e bloqueiam diferentes dispositivos dedicados.

Condies Necessrias
Para que um sistuao de deadlock seja criada, as seguintes condies devem acontecer simultaneamente: 1. excluso mtua: apenas um processo por vez pode usar o recurso. 2. monopolizao de recursos: acontece no exemplo da escada quando duas pessoas se cruzam em um lance e elas se recusam a retroceder. 3. no-preempo: os recursos s podem ser liberados voluntariamente pelo processo que o mantm. 4. 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.

Grafo de Alocao de Recursos


Podemos utilizar a notao de grafos para descrever os deadlocks. O grafo de alocao de recursos do sistema consistem em um conjunto de vrtices V e um conjunto de arestas R. O conjunto de vrtices V dividido em dois diferentes tipos de ns: P = {P1, P2, ..., Pn} descrevem todos os processos ativos no sistema e R = {R1, R2, ..., Rm} que designam os tipos de recursos do sistema. Portanto, uma aresta direcionada do processo Pi para o recurso Rj, denotada por Pi Rj (aresta de pedido), indica que o processo Pi solicitou uma instncia do recurso Rj e, no momento, est esperando por aquele recurso. Por outro lado, um aresta direcionada de um recurso Rj para um processo Pi, denotada por Rj Pi (aresta de atribuio), significa que uma instncia do recurso Rj foi alocada para o processo Pi.

Prof. Dr. Jean M. Laine

Sistemas Operacionais Graficamente, utilizamos crculos para representar processos e quadrados para os recursos. Alm disso, como cada recurso pode ter mais de uma instncia, representamos cada instncia por um ponto (bolinha) dentro do quadrado. Dinmica: quando um processo Pi solicita uma instncia de um determinado recurso, uma aresta de pedido inserida no grafo. Ao ser atendido, a aresta de pedido transformada em uma aresta de atribuio. Portanto, quando o processo liberar o recurso, a aresta de atribuio eliminada. O que pode ser um indcio de deadlock no grafo de alocao de recursos? Resposta: A existncia de ciclos!

Exemplo 1:

Figura 1. Grafo de Alocao de Recursos. Na Fig. 1 os processos P1, P2 e P3 esto em deadlock? (No!)

Prof. Dr. Jean M. Laine

Sistemas Operacionais Exemplo 2:

Figura 2. Grafo de Alocao de Recursos. Na Fig. 2 os processos P1, P2 e P3 esto em deadlock? (Sim!)

Mtodo para tratar Deadlocks


Em geral, podemos utilizar 3 mtodos para tratar o problema de deadlocks: 1. podemos usar um protocolo para garantir que o sistema nunca entre em estado de deadlock: PREVENO (o Sistema operacional deve eliminar uma das 4 condies para que o deadlock ocorra) 2. podemos permitir que o sistema entre em deadlock e se recupere: DETECO e RECUPERAO. 3. podemos ignorar o problema (Algoritmo do avestruz). Esta opo utilizada pela maioria dos sistemas operacionais, incluindo o UNIX. Para garantir que um sistema nunca entre em deadlock possvel usar um esquema de preveno de deadlocks ou de impedimento de deadlocks. Esta preveno realizada atravs de um conjunto de mtodos que garantem que pelo menos uma das situaes necessrias para que um deadlock acontea seja falha. Basicamente, isso feito limitando a forma como as solicitaes de recursos acontecem. Prof. Dr. Jean M. Laine 7

Sistemas Operacionais Caso o sistema operacional no utilize um esquema de preveno, ser necessrio um mecanismo de deteco e recuperao de deadlocks. Pelo fato do deadlock no ser evitado, at que ele seja descoberto provvel que o desempenho do sistema tenha sofrido uma considervel queda.

Exercicios
1. O que deadlock, quais as condies para o acontecimento desses impasses e quais as solues possveis? 2. Um conjunto de estratgias foram propostas por Havender com o intuito de prevenir a ocorrncia de deadlocks, analise cada uma delas e diga se as estratgias conseguem ou no atingir o seu propsito: a. Estratgia 1: Cada processo deve requisitar todos os recursos de que precisa de uma vez s e no pode continuar at que todos tenham sido concedisos. b. Estratgia 2: Se for negada mais uma requisio a um processo que retm certos recursos, ele deve liberar seus recursos originais e, se necessrio, requisit-los novamente junto com os recursos adicionais. c. Estratgia 3: Deve ser imposta uma ordenao linear de recursos a todos os processos; se um processo recebeu certos recursos, ele somente poder requisit-los novamente mais tarde, conforme a ordem. 3. Pesquise e descreva o mecanismo (idia) de funcionamento do algoritmo do banqueiro de Dijkstra proposto para evitar deadlocks. Alm disso, cite as deficincias presentes nesse algoritmo. 4. Por que a preveno de deadlock no uma preocupao primria para muitos sistemas operacionais? 5. D um exemplo de deadlock simples de recurso envolvendo 4 processos e 4 recursos. Desenhe o grafo de alocao de recursos apropriado. 6. Por que a recuperao de deadlock um problema to difcil?

Bibliografia
[1] SILBERSCHATZ, A. et al. Sistemas Operacionais: conceitos e aplicaes. Campus, 2001. (Cap. 8)

Prof. Dr. Jean M. Laine

Você também pode gostar