Você está na página 1de 7

Introduo

Em um ambiente computacional, dispositivos e recursos so compartilhados a


todo momento: impressoras, discos, arquivos, posies nas tabelas internas do
sistema, etc. Os sistemas operacionais devem ter a habilidade de garantir a um
processo acesso exclusivo a certos recursos. Ento diz-se que um conjunto de
processos est em deadlock se cada processo no conjunto est esperando por
um evento que somente um outro esdo conjunto pode causar". Alguns chamam
esse processo de "bug", e o objetivo desse trabalho desenvolver os conceitos
acerca dessa questo.

O deadlock ocorre com um conjunto de processos e recursos nopreemptveis, onde um ou mais processos desse conjunto est aguardando a
liberao de um recurso por um outro processo que, por sua vez, aguarda a
liberao de outro recurso alocado ou dependente do primeiro processo.
comum em sites de noticias, onde a atualizao constante e, caso no se
tenha uma boa estrutura de cdigo, um processo pode acabar matando outro,
deixando o site lento no momento do carregamento.
Normalmente, esse problema no pode ser resolvido pelo sistema
operacional e requer interveno externa por parte do operador ou dos
usurios, forando a tomar atitudes drsticas, como provocar manualmente o
trmino do programa. Um exemplo onde erros de deadlock ocorrem no banco
de dados. Suponha que uma empresa tenha vrios vendedores e vrios
pontos de venda/caixas. O vendedor "A" vendeu 1 relgio e 1 pulseira. O
sistema ento solicita o travamento do registro da tabela estoque que contm o
total de relgios em estoque e em seguida solicita o travamento do registro que
contm o total de pulseiras em estoque. De posse da exclusividade de acesso
aos dois registros, ele l a quantidade de relgios, subtrai 1 e escreve de novo
no registro, o mesmo com o registro de pulseiras. Observe, no entanto que
existem diversos caixas operando simultaneamente de forma que se algum
outro caixa naquele exato instante estiver vendendo uma pulseira, ele ficar
aguardando a liberao do registro das pulseiras 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 foram vendidos 1 relgio e 1 pulseira e que o outro
caixa solicitou o travamento do registro com a quantidade de pulseiras e agora
quer o acesso ao de relgios, no entanto o de relgios est travado para o
primeiro caixa. Nenhum deles devolve o recurso (registro) sobre o qual tem
exclusividade e tambm no consegue acesso ao outro registro que falta para
terminar a operao. Isto um deadlock.
Outro exemplo bastante prtico acerca do conceito de Dead lock
famoso congestionamento de carros (Figura 1), j que esse impasse, gerado
quando vrios processos esto em disputa por recursos e acabaram gerando
uma dependncia circular. Na imagem os processos so representados pelos
carros.

(figura 1)
Resumidamente, Deadlocks ocorrem quando processos obtm acesso
exclusivo a recursos, tanto de hardware (ex: HD) quanto software (entrada em
base de dados), com isso, pdemos dizer que existem dois tipos de recursos:

1)Preemptivos: podem ser retirados do processo sem prejuzos;


Ex: Ocorre na memria, quando dois dispositivos solicitam a impresso de um
documento da impressora (sistema time-sharing):
-Processo "A" obtm a impressora;
-CPU retira processo A e processo B tenta obter a impressora; (Situao de
deadlock);
-Enviar processo "B" para disco e carrega o processo "A" na memria (elimina
o deadlock;)

2)No-preemptivos: Estes j no podem ser retirados do


processo, causam prejuzos;
Ex: CD-ROM:
-Processo "A" comeou a gravar um CD-ROM,
-Retirar repentinamente do processo "A" o gravador de CD e passar a um
outro processo,
-Resultar em um CD com erros.

Os dead locks ocorrem em geral com recursos no preemptivos, normalmente,


com preemptivos, so resolvidos pela realocao de recursos de um processo
a outro.

Existem quatro condies necessrias para que o deadlock ocorra, e para


preveno, precisa-se atacar cada uma delas, so:
-Excluso mtua: Cada recurso s pode estar alocado a um nico processo em
um determinado instante.
-Espera por recurso: um processo, alm dos recursos j alocados, pode estar
esperando por outros recursos.
-No-preempo: Um recurso no pode ser liberado de um processo s porque
outros processos desejam o mesmo recurso.
-Espera circular: Um processo pode ter de esperar por um recurso alocado a
outro processo, e vice-versa.

Deadlocks so um problema clssico em banco de dados transacionais, como


j falado acima, mas eles no so perigosos, a menos que eles sejam to
frequentes que voc no possa executar certas transaes. Normalmente voc
tem que escrever suas aplicaes de forma que elas sempre estejam
preparada a reexecutar uma transao se for feito um roll back por causa de
deadlocks.
O InnoDB utiliza bloqueio automtico de registro. Voc pode obter deadlocks
mesmo no caso de transaes que inserem ou deletam uma nica linha. Isto
ococrre porque estas operaes no so realmente 'atmicas': elas
automaticamente atribuem travas aos (possivelmente muitos) registros se
ndices da linha inserida/deletada.

Existem em geral, quatro estratgias para tratar deadlocks:


- Ignorar o problema;
- Detectar e recuperar o problema;
- Evitar dinamicamente o problema alocao cuidadosa de recursos;
- Prevenir o problema por meio da no satisfao de uma das quatro condies
citadas anteriormente;

Mais especificamente em banco de dados, pode-se lidar com deadlocks e


reduz-los com os seguintes truques:
1- Usando SHOW INNODB STATUS em verses do MySQL posteriores a
3.23.52 e 4.0.3 para determinar a causa do ltimo deadlock. Isto pode lhe
ajudar a sintonizar a sua aplicao a avitar travas.
2- Sempre estar preparado para reexecutar uma transao se ela falhar em um
deadlock. Deadlocks no so perigosos. Apenas tentar de novo.
3- Frequentemente reduzir as transaes. J que transaes pequenas tm
menos chances de colidir.
4- Se estiver utilizando as travas de leitura SELECT , FOR UPDATE ou
LOCK IN SHARE MODE, tente usar um nvel de isolamente mais baixo, o
READ COMMITTED.
5- Acesse as suas tabelas e linha em uma ordem fixa. Assim as transaes
formaro filas ordenadas e no entraro em deadlock. Adicione ndices bem
escolhidos a sua tabela. Ento a suas consultas precisaro varrer menos
registros de ndice e consequentemente atribuiro menos locks. Usando o

EXPLAIN SELECT para fazer o MySQL, selecione ndices apropriados a sua


consulta.
6- Usar menos locks: se voc pode utilizar um SELECT para retornar dados
de uma copia de banco de dados antiga, no adicione a clusula FOR
UPDATE ou LOCK IN SHARE MODE. Usar o nvel de isolamento READ
COMMITTED bom aqui, pois cada leitura consistente dentro da mesma
transao l da sua prpria cpia atual.
Se nada ajudar, serializar as transaes com bloqueio de tabela uma opo:
LOCK TABLES, t1, WRITE, t2, READ; [fazer algo com tabelas t1 e t2 aqui];
UNLOCK TABLES. O bloqueio de tabela faz com que suas transaes se
enfilerem em ordem e deadlocks sero evitados. Note que LOCK TABLES
inicia implictamente uma transao, assim como o comando BEGIN, e
UNLOCK TABLES finaliza implicitamente uma transao em um COMMIT.
Outra soluo para colocar transaes em srie criar uma tabela 'semforo'
auxiliar onde exista apenas uma nica linha. Cada transao atualiza esta linha
antes de acessar outra tabela. Deste modo todas as transaes acontecem em
srie. Note que o algoritmo de deteco automtico de deadlock do InnoDB
tambm funciona pois a trava de srie uma trava de registro. Na trava de
tabela do MySQL ns temos que recorrer ao mtodo do tempo limite para
resolver um deadlock.

Universidade Federal do Par

Aluno: Rodrigo Jos Lima da Silva e Silva.


Materia: Sistemas operacionais.
Assunto: Algoritmos de deadlock.
Belm, 08 de outubro de 2014.