Capítulo 3 Deadlocks 3.1. Recursos 3.2. Introdução a deadlocks 3.3. O algoritmo a avestruz 3.4. Detecção e recuperação de deadlock 3.5. Evitando Deadlock 3.6. Prevenindo Deadlock 3.7. Outros assuntos 1 Recursos Reusáveis Usado e não gasto por um processo Arquivo em disco Unidade de Fita Processadores Canais de E/S Memórias Dispositivos Semáforos Bancos de Dados Consumíveis Criado e consumido (destruído) Interrupções Sinais Mensagens Informação em buffers de E/S 2 1
Recursos Os processos precisam ter acesso aos recursos de forma razoavelmente ordenada Suponha que um processo tenha o recurso A e solicite o recursos B Ao mesmo tempo, outro processo possui B e solicita A Ambos são bloqueados e permanecem bloqueados 3 Recursos (1) Deadlocks ocorem quando Processos obtém aceeso exclusivo a dispositivos Estes dispositivos são chamados recursos em geral Recursos Preemptáveis Podem ser retirados de um processo sem efeito danoso Recursos Não Preemptáveis Provocaram falha do processo se retirados 4 2
Recursos(2) Sequencia de eventos requeridos para usar um recursos 1. Solicitar o recurso 2. Usar o recurso 3. Liberar o recurso 5 Deve esperar se solicitação é negada Processo solicitante pode ser bloqueado Pode falhar com código de erro Introdução aos Deadlocks Definição Formal: Um conjunto de processos está em deadlocked se cada processo no conjunto espera por um evento que apenas um outro processo do conjunto pode causar Normalmente o evento é a liberação de um recurso Nenhum dos processo pode executar Liberar recursos Ser acordado 6 3
Quatro condições para Deadlock 1. Exclusão mútua 2. Toma e espera 3. Ausência de preempção 4. Espera Circular 7 Modelagem de Deadlocks Modelado por grafos diretos recurso R está atribuido ao processo A processo B está solcitando/esperando recurso S procesos C e D estão em deadlock sobre os recursos T e U 8 4
Modelagem Deadlock Estratégias para lidar com deadlock 1. Ignore o problema! 2. Detecção e recuperação 3. Evite dinamicamente Alocação cuidadosa de recursos 4. Prevenção Negação de uma das quatro condições 9 Modelagem de Deadlock A B C 10 Como deadlocks ocorrem 5
Modelagem de Deadlock (o) (p) (q) 11 Como deadlock pode ser evitado O algoritmo da avestruz 12 Finja que não há qualquer problema Razoável se deadlocks ocorre muito raramente Custo de prevenção é alto UNIX e Windows adotam este enfoque É um custo benefício (trade off) entre conveniencia corretude 6
Detecção cm um recurso de cada tipo (1) 13 Observe o propriedade do recurso e solicitações Um ciclo pode ser observado no grafo, denotando deadlock Detecção cm um recurso de cada tipo (1) 14 Estruturas de dados requeridas pelo algoritmo de detecção de deadlock 7
Detecção com um recurso de cada tipo (1) 15 Um exemplo para o algoritmo de detecção de deadlock Recuperação de Deadlock (1) Recuperação por preempção Tome um recurso de algum outro processo Depende da natureza do recurso Recuperação por retrocesso Realize pontos de verificação periodicamente Use este estado salvo Reinicie o processo se for encontrado um deadlock 16 8
Recuperação de Deadlock Recuperação matando processos Forma mais simples de resolver um deadlock Mate um dos processos no ciclo de deadlock deadlock O outro processo obtem os recursos Escolhar processos que possam ser re-executados do início 17 Evitando Deadlock trajetórias de recursos 18 Duas trajetórias de recursos de processos 9
Exemplo de trajetória Deadlock pode ocorrer 19 Exemplo de trajetória Deadlock não pode ocorrer 20 10
Estados seguros e inseguros (a) (b) (c) (d) (e) Demonstração que o estado em (a) é seguro 21 Estados seguros e inseguros(2) (a) (b) (c) (d) Demonstração que o estado em b é inseguro 22 11
Algoritmo do banqueiro Um estado é segura sse existe uma seqüência {P1..Pn} onde a cada Pi é alocado todos os seus recursos para execução até o término Ou seja, podemos sempre rodar todos os processo até a término a partir de um estado seguro O algoritmo de segurança é a parte que determina se um estado é seguro Inicialização: Todos os processos são considerados não terminados O vetor de trabalho é inicializado com a quantidade de recursos disponíveis : W(i) = V(i) para todo i; 23 REPITA: Ache um processo não terminado j tal que N(j,i) <= W(i) para todo i. Se não existe tal j, vá para FIM SENÃO: termine este processo e recupere os seus recursos: W(i) = W(i) + A(j,i) para todo i. Então vá para REPITA FIM: se todos os processo terminaram estão este estado é seguro. Senão, é inseguro. 24 12
Seja Q(j,i) a quantidade de recurso do tipo i requisitada pelo processo j. Para determinar se uma solicitação deve ser atendida usamos o algoritmo do banqueiro: Se Q(j,i) <= N(j,i) pata todo i então continue. Senão provoque condição de erro (solicitações excedidas). Se Q(j,i) <= V(i) para todo i então continue. Senão espere (recurso não está disponível ainda) Finja que a solicitação foi atendida e determine o novo estado recurso-alocação: 25 V(i) = V(i) - Q(j,i) para todo i A(j,i) = A(j,i) + Q(j,i) para todo i N(j,i) = N(j,i) - Q(j,i) para todo i Se o estado resultando for seguro então aloque o recurso para o processo j. Caso contrário, o processo j deve esperar pela solicitação Q(j,i) e restaurar o estado antigo. 26 13
Temos 3 tipos de recursos com quantidades: R(1) = 9, R(2) = 3, R(3) = 6 E temos 4 processos com estado inicial: 27 Temos 3 tipos de recursos com quantidades: R(1) = 9, R(2) = 3, R(3) = 6 E temos 4 processos com estado inicial: P1 P2 P3 P4 Claimed Allocated Available R1 R2 R3 R1 R2 R3 R1 R2 R3 3 2 2 6 1 3 3 1 4 4 2 2 1 0 0 5 1 1 2 1 1 0 0 2 1 1 2 28 Suponha que P2 solicite Q = (1,0,1). A solicitação deve ser atendida? 14
29 O estado resultante seria: P1 P2 P3 P4 Claimed Allocated Available R1 R2 R3 R1 R2 R3 R1 R2 R3 3 2 2 1 0 0 0 1 1 6 1 3 6 1 2 3 1 4 2 1 1 4 2 2 0 0 2 Este estado é seguro com seqüência {P2, P1, P3, P4}. Após P2, temos W = (6,2,3) que habilita o outro processo terminar. Daí: atende a solicitação.. 30 15
31 No entanto, se do estado inicial, P1 solicitasse Q = (1,0,1). O estado resultante seria: 32 P1 P2 P3 P4 Claimed Allocated Available R1 R2 R3 R1 R2 R3 R1 R2 R3 3 2 2 6 1 3 3 1 4 4 2 2 2 0 1 5 1 1 2 1 1 0 0 2 0 1 1 Que não é seguro pois qualquer processo para terminar precisaria uma unidade adicional de R1. Solicitação recusada: P1 é bloqueado. 16
O Algoritmo do Banqueiro para um recurso (a) (b) (c) 33 Três estados de alocação de recursos seguro Seguro inseguro O Algoritmo do Banqueiro para Múltiplos Recursos 34 17
Algoritmo do banqueiro : comentários Um estado seguro não pode ser deadlocked. Mas um inseguro não está necessariamente em deadlock. Ex: P1 do estado anterior (inseguro) poderia liberar temporariamente uma unidade de R1 e R3 (retornando para um estado seguro) Alguns processos podem ter que esperar desnecessariamente Uso sub ótimo dos recursos Todos os algoritmos que evitam deadlock assumem que os processos são independentes: livres de qualquer restrição de sincronização 35 Prevenção de Deadlock Atacando a condição de exclusão mútua 36 Alguns dispositivos (como impressoras) podem ser spooled Apenas o daemon usa o recurso impressora Assim, deadlock para a impressora é eliminado Nem todos os dipositivos podem ser spooled Princípio: Evite alocar recurso quando não for absolutametne necessário O mínimo de processos possível deve solicitar o recurso 18
Atacando a condição de toma e espera 37 Obrigue o processo a solicitar recurso antes de iniciar Um processo nunca irá esperar por um reccurso Problemas Pode não saber todos os recursos que necessitará no início Prende recursos que outros processos poderiam estar utilizando Variação: Processos devem liberars todos os recursos Então solicitar todos os recurso necessários naquele instante Atacar a condição de falta de preempção NÃO É UMA OPÇÃO VIÁVEL Considere um processo que obteve uma impressora Na metade da sua tarefa Perde a impressora!!?? 38 19
Atacando a condição de espera circular (1) (a) (b) Recusos normalmente ordenados Um grafo de recursos 39 RESUMO 40 20
Outros tópicos Trava (lock) em duas fases 41 Fase 1 O processo tentar travar todos os registros que precisa, um por vez Se algum registro requerido estiver travado, reinicia (nenhum trabalho real é feito na fase um) Se a fase um for bem sucedida, inicia a fase dois Realiza atualizações Libera travas Observe a similiraridade com requerer todos os recursos de uma vez O algortimo funcioina se programa pode ser parado e reiniciado Deadlocks sem recursos É possível que dois processos entrem em deadlock Cada um espera que o outro realize uma tarefa Pode ocorer com semáforos Cada processo deve fazer um down() em dois semáforos (mutex e outro) Se realizado na ordem errada, ocorrerá deadlock 42 21
Fome (Starvation) O algoritmo para alocar um recurso Pode ser shortest job first Funciona muito bem para processos curtos tem um sistema Pode fazere com que processos longos seja adiados indefinidamente Apesar de não estar bloqueado Solução: Política First-come, first-served 43 22