Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Sumrio
Sumrio
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.
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.
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.
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.
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
Unix tenta evitar situaes de deadlock, mas no as elimina completamente. um compromisso entre:
correco; convenincia/ecincia;
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 .
Algoritmos de Deteco
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.
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?
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.
O pedido pode ser satisfeito: no conduz a deadlock mesmo que os processos usem os recursos ao mximo.
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.
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.
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.
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.
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.
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