Вы находитесь на странице: 1из 27

Sistemas Operativos: Deadlocks

Pedro F. Souto (pfs@fe.up.pt)

May 25, 2010

Sumrio

Deadlocks O Problema Solues Leitura Adicional

Sumrio

Deadlocks O Problema Solues Leitura Adicional

Deadlocks
Um zelo excessivo na eliminao de race conditions pode conduzir a um outro problema deadlock :
um cenrio em que 2 ou mais processos cam bloqueados indenidamente.

Um exemplo a seguinte soluo do bounded buffer com semforos:


public void remove(Object item) { mutex.down(); // keep other threads out empty.down(); // wait for some item

que difere da soluo correcta na ordem de execuo das operaes down():


Se o buffer estiver vazio, o consumidor bloqueia sem libertar o mutex, impedindo o produtor de eventualmente introduzir a mensagem no buffer.

Bloqueio Mtuo (Deadlock)

Denio um conjunto de processos est mutuamente bloqueado (deadlocked), se cada processo nesse conjunto est espera dum evento que apenas outro processo nesse conjunto pode causar. Normalmente, o evento pelo qual um processo espera a libertao dum recurso na posse de outro processo nesse conjunto
Numa situao de deadlock, nenhum processo pode:
executar; libertar os recursos que detm; ser activado.

Recursos
O estudo do problema de deadlock tem origem em SOs, no contexto da gesto de recursos dum computador. Um recurso um objecto usado por um processo. P. ex.:
fsico: disco, memria, CPU, ...; lgico: um socket, um cheiro, uma seco crtica, ...;

Num sistema, pode haver mais do que um recurso do mesmo tipo, p.ex. disco. Propriedades importantes de recursos: tipo de acesso certos recursos, p.ex. uma impressora, tm que ser acedidos em excluso mtua; preemptibilidade recursos podem ser ou no preemptveis: isto , podem ser ou no removidos dum processo sem problemas de maior. Por exemplo, uma impressora no preemptvel, mas o CPU -o.

Uso de Recursos por Processos

Recursos so geridos por gestores, os quais podem ser ou no componentes do SO. O uso de um recurso por um processo tipicamente envolve a sequncia:
pedido do recurso; uso do recurso; libertao do recurso.

Se o recurso pedido por um processo no estiver disponvel, o processo no o pode usar. Neste caso, o processo:
ou bloqueia, espera que o recurso que disponvel; ou prossegue, mas no ter acesso ao recurso pedido.

Condies Necessrias para Deadlock

Bloqueio espera que o recurso que disponvel (excluso mtua); Espera com reteno processos no libertam os recursos na sua posse quando bloqueiam espera de outros recursos; No-preempo recursos na posse dum processo no lhe podem ser retirados; Espera-circular tem que haver uma cadeia de 2 ou mais processos, cada um dos quais espera dum recurso na posse do processo seguinte.

Estratgias de Ataque ao Problema de Deadlock

1. Ignorar o problema: algoritmo da avestruz (Tanenbaum). 2. Detectar e recuperar. 3. Evitar (avoidance: soluo dinmica). 4. Prevenir (prevention: soluo esttica).

Algoritmo da Avestruz

Ignorar o problema: pretender que no existe. Pode ser aceitvel.


se a probabilidade de deadlock fr muito baixa; o custo de qualquer das outras solues fr elevado.

Unix tenta evitar situaes de deadlock, mas no as elimina completamente. um compromisso entre:
correco; convenincia/ecincia;

anlogo a muitos em engenharia. . . . viver gerir riscos.

Detectar e Recuperar

Tem 2 partes:
1. Detectar o deadlock :
O algoritmo basicamente testa se h alguma ordem de terminao dos processos.

2. Recuperar da situao:
preempo de recursos; roll-back de processos; terminao de processos.

Deteco de Deadlock

Faz uso das seguintes estruturas de dados: Vector dos recursos existentes, E, tem m elementos, i.e. tantos quantos os tipos de recursos. O valor de cada elemento o nmero de recursos do tipo correspondente existentes no sistema. Vector de recursos disponveis, D, com m elementos. Matriz dos recursos atribudos, A, de dimenso n m, em que n o nmero de processos. A linha i o vector com os recursos atribudos ao processo Pi . Matriz dos pedidos pendentes, P, de dimenso n m. A linha i o vector com os pedidos pendentes de recursos pelo processo Pi .

Exemplo de Deteco de Deadlock


E = 4 2 3 1 D = 2 1 0 0 0 0 1 0 2 0 0 1 2 0 0 1 P= 1 0 1 0 A= 0 1 2 0 0 0 0 0 Testar se h uma ordem de terminao dos processos. P1 e P2 esto bloqueados: os seus pedidos no podem ser satisfeitos. Mas P3 pode executar e se terminar libertar os seus recursos. Depois os pedidos de P2 podem ser satisfeitos e P2 poder terminar, libertando os seus recursos. Finalmente, os pedidos de P1 podero ser satisfeitos e P1 poder terminar: no h deadlock.

Algoritmos de Deteco

Os algoritmos de deteco so caros: O(m n2 ).


De facto, a complexidade dum algoritmo no a histria completa: h constantes a considerar e os valores dos parmetros se m ou n forem pequenos o custo pode ser baixo.

Quando devem ser executados?


sempre que feito um pedido; periodicamente; quando a utilizao do CPU diminui.

Recuperao de Deadlock (1/2)


Preempo de recursos: depende do recurso em causa:
no sempre aplicvel; pode requerer interveno humana,

Rollback de processos: fazer o checkpoint do estado dos processos, periodicamente; em caso de deadlock, identicar um processo que se rolled-back quebrar o deadlock. Terminar um processo no ciclo: de preferncia, dever-se- terminar um processo que possa ser reexecutado de incio sem problemas de maior.

Recuperao de Deadlock (2/2)


Em qualquer dos casos, preciso escolher uma vtima. Alguns critrios:
o processo que possui menos recursos; o processo que possui mais recursos; o processo que usou menos o CPU.

Pode ainda, usar-se o seguinte critrio:


o menor conjunto de processos que quebrar o deadlock.

Com excepo de roll-back as outras solues podem deixar o sistema num estado inconsistente. Mesmo com rollback, fazer o checkpointing do estado dos processos pode no ser suciente:
E se o processo rolled-back modicou um cheiro desde o ltimo checkpoint?

Estados Seguros e No-seguros


Admitamos que 3 processos partilham s um tipo de recurso, e que h 10 unidades desse tipo.
Has Max A B C 3 2 2 Free: 3 (a) 9 4 7 A B C Has Max 3 4 2 Free: 1 (b) 9 4 7 A B C Has Max 3 0 2 Free: 5 (c) 9 7 A B C Has Max 3 0 7 Free: 0 (d) 9 7 A B C Has Max 3 0 0 Free: 7 (e) 9

Deadlock Avoidance (Soluo Dinmica)

Ideia antes de satisfazer um pedido, averiguar se essa satisfao conduz a um estado no-seguro estratgia pessimista em comparao com deteco & recuperao. Requisito desta tcnica: necessrio o conhecimento a priori dos requisitos mximos de cada tipo de recurso por cada processo.

Algoritmo para Deadlock Avoidance


Faz uso das seguintes estruturas de dados: Vector dos recursos existentes, E, tem m elementos, i.e. tantos quantos os tipos de recursos. O valor de cada elemento o nmero de recursos do tipo correspondente existentes no sistema. Vector de recursos disponveis, D, com m elementos. Matriz dos recursos atribudos, A, de dimenso n m, em que n o nmero de processos. A linha i o vector com os recursos atribudos ao processo Pi . Matriz dos recursos a atribuir, R, de dimenso n m. A linha i o vector com os pedidos de recursos que o processo Pi ainda poder fazer: O algoritmo semelhante ao apresentado para deteco de deadlock, excepto em vez da matriz P usa-se a matriz R.

Exemplo de Deadlock Avoidance


Seja aps a satisfao condicionada dum pedido:
E = 6 3 0 A= 1 1 0 1. 2. 3. 4. P4 P1 P2 P3 3 0 1 1 1 0 4 1 0 1 0 0 2 1 0 0 1 0 D = 1 0 2 0 1 1 0 0 0 1 1 2 R= 3 1 0 0 0 0 1 0 2 1 1 0 D D D D = = = = 2 5 5 6 1 1 2 3 2 3 3 4 1 2 2 2 ; ; ; ;

pode terminar: pode terminar: pode terminar: pode terminar:

O pedido pode ser satisfeito: no conduz a deadlock mesmo que os processos usem os recursos ao mximo.

Consideraes sobre Deadlock Avoidance

Um pedido de recursos s satisfeito, se os recursos que carem disponveis, permitirem a terminao de todos os processos que detm pelo menos um recurso, assumindo que cada um destes processos usa o nmero mximo de recursos correspondente. Infelizmente, a utilidade deste algoritmo (Bankers Algorithm, de Dijkstra) no melhor dos casos limitada:
normalmente, os processos no conhecem a priori as suas necessidades mximas.

Provavelmente, alguns sistemas de tempo-real sero a nica excepo.

Prevenir Deadlocks (Soluo Esttica)

Ideia garantir que 1 das 4 condies necessrias nunca ocorre: 1. Excluso mtua; 2. Espera com reteno; 3. No-preempo; 4. Espera circular. deadlock avoidance uma soluo dinmica: o programa executa um algoritmo para determinar se a satisfao do pedido pode conduzir a deadlock. deadlock prevention uma soluo esttica: impede-se a ocorrncia de deadlock por concepo do programa.

Prevenir Deadlocks: No-exclusividade

Excluso mtua, p.ex., recorrendo a processos auxiliares printer spooler : nem todos os recursos se prestam a spooling; a conteno no acesso a outros recursos (p.ex. disco, no caso do printer spooler ) pode tambm dar origem a deadlocks. Princpio, em qualquer dos casos, deve-se: atribuir um recurso apenas quando necessrio; minimizar o nmero de processos que partilham um recurso.

Prevenir Deadlocks: Espera sem Reteno

Espera com reteno de recursos: Pedir todos os recursos necessrios antes de iniciar tarefa:
sofre do mesmo problema que deadlock avoidance.

Alternativamente, um processo dever libertar todos os recursos que possui, quando o pedido de um recurso conduziria a um bloqueio:
quando desbloqueado, o processo ter que readquirir todos os recursos de novo; uma variante da soluo anterior, na qual os recursos necessrios so descobertos dinamicamente.

Tcnica usada por vezes ao nvel do kernel do SO.

Prevenir Deadlocks: Preempo e No-circularidade

Preempo dos recursos: retirar recursos a um processo (sem a sua cooperao) invivel na maioria dos casos. Espera circular pode ser evitada por vezes. Por exemplo: denindo uma ordem total para todos os tipos de recursos; impondo que o pedido dos recursos respeite essa ordem. Infelizmente, nem sempre vivel.

Mais sobre Gesto de Recursos


Na prtica, usa-se uma combinao destas tcnicas. Inanio (starvation) de processos pode ocorrer tambm associada gesto de recursos: quando o nmero de recursos disponvel inferior ao nmero de recursos pedido, o sistema tem que decidir a que processos atribuir os recursos disponveis; se o algoritmo usado favorecer alguns processos em relao a outros, estes ltimos podero ser continuamente preteridos no acesso aos recursos e assim impossibilitados de fazer qualquer progresso. O escalonamento de processos um problema de gesto dum recurso particular: o CPU.

Leitura Adicional
Modern Operating Systems, 2nd. Ed. Seco 3.1: Resources Seco 3.2: Introduction to Deadlocks Seco 3.3: The Ostrich Algorithm Seco 3.4: Deadlock Detection and Recovery Seco 3.5: Deadlock Avoidance Seco 3.6: Deadlock Prevention Subseco 3.7.2: Nonresource Deadlocks Subseco 3.7.2: Starvation

Вам также может понравиться