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 z Reusáveis – Usado e não gasto por um processo z z z z z z z z Arquivo em disco Unidade de Fita Processadores Canais de E/S Memórias Dispositivos Semáforos Bancos de Dados z “Consumíveis” – Criado e consumido (destruído) z z z z Interrupções Sinais Mensagens Informação em buffers de E/S 2 1 Recursos z z 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) z Deadlocks ocorem quando … – – z Recursos “Preemptáveis” – z Processos obtém aceeso exclusivo a dispositivos Estes dispositivos são chamados recursos em geral 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 z 1. 2. 3. Solicitar o recurso Usar o recurso Liberar o recurso Deve esperar se solicitação é negada z – – 5 Processo solicitante pode ser bloqueado Pode falhar com código de erro Introdução aos Deadlocks z 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 z z 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 Exclusão mútua Toma e espera Ausência de preempção Espera Circular 1. 2. 3. 4. 7 Modelagem de Deadlocks z 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 Ignore o problema! Detecção e recuperação Evite dinamicamente 1. 2. 3. • Alocação cuidadosa de recursos Prevenção 4. • Negação de uma das quatro condições 9 Modelagem de Deadlock A 10 B C Como deadlocks ocorrem 5 Modelagem de Deadlock (o) (p) (q) Como deadlock pode ser evitado 11 O algoritmo da avestruz z z Finja que não há qualquer problema Razoável se – – z z deadlocks ocorre muito raramente Custo de prevenção é alto UNIX e Windows adotam este enfoque É um custo benefício (trade off) entre – – conveniencia corretude 12 6 Detecção cm um recurso de cada tipo (1) z z Observe o propriedade do recurso e solicitações Um ciclo pode ser observado no grafo, denotando deadlock 13 Detecção cm um recurso de cada tipo (1) Estruturas de dados requeridas pelo algoritmo de detecção de deadlock 14 7 Detecção com um recurso de cada tipo (1) Um exemplo para o algoritmo de detecção de deadlock 15 Recuperação de Deadlock (1) z Recuperação por preempção – – z 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 z 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 Duas trajetórias de recursos de processos 18 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 z 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 – z z 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 z REPITA: Ache um processo não terminado j tal que N(j,i) <= W(i) para todo i. – – z 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 z z 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 z z z – 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 z Temos 3 tipos de recursos com quantidades: – z R(1) = 9, R(2) = 3, R(3) = 6 E temos 4 processos com estado inicial: 27 z Temos 3 tipos de recursos com quantidades: – z R(1) = 9, R(2) = 3, R(3) = 6 E temos 4 processos com estado inicial: P1 P2 P3 P4 z Claimed R1 R2 R3 3 2 2 6 1 3 3 1 4 4 2 2 Allocated R1 R2 R3 1 0 0 5 1 1 2 1 1 0 0 2 Available R1 R2 R3 1 1 2 Suponha que P2 solicite Q = (1,0,1). A solicitação deve ser atendida? 28 14 29 z O estado resultante seria: Claimed P1 P2 P3 P4 z R1 3 6 3 4 R2 2 1 1 2 R3 2 3 4 2 Allocated R1 1 6 2 0 R2 0 1 1 0 R3 0 2 1 2 Available R1 R2 R3 0 1 1 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 z No entanto, se do estado inicial, P1 solicitasse Q = (1,0,1). O estado resultante seria: P1 P2 P3 P4 z 32 Claimed R1 R2 R3 3 2 2 6 1 3 3 1 4 4 2 2 Allocated R1 R2 R3 2 0 1 5 1 1 2 1 1 0 0 2 Available R1 R2 R3 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) z (c) Três estados de alocação de recursos – – – seguro Seguro inseguro 33 O Algoritmo do Banqueiro para Múltiplos Recursos 34 17 Algoritmo do banqueiro : comentários z Um estado seguro não pode ser “deadlocked”. Mas um inseguro não está necessariamente em deadlock. z – – z 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 z Alguns dispositivos (como impressoras) podem ser spooled – – z z Nem todos os dipositivos podem ser spooled Princípio: – – 36 Apenas o daemon usa o recurso impressora Assim, deadlock para a impressora é eliminado 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 z Obrigue o processo a solicitar recurso antes de iniciar – z Problemas – – z Um processo nunca irá esperar por um reccurso 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 37 Atacar a condição de falta de preempção z z 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) z z Recusos normalmente ordenados Um grafo de recursos 39 RESUMO 40 20 Outros tópicos Trava (lock) em duas fases z Fase 1 – – – z Se a fase um for bem sucedida, inicia a fase dois – – z z Realiza atualizações Libera travas Observe a similiraridade com requerer todos os recursos de uma vez O algortimo funcioina se … – 41 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) programa pode ser parado e reiniciado Deadlocks sem recursos z É possível que dois processos entrem em deadlock – z 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) z O algoritmo para alocar um recurso – z z Funciona muito bem para processos curtos tem um sistema Pode fazere com que processos longos seja adiados indefinidamente – z Pode ser shortest job first Apesar de não estar bloqueado Solução: – Política First-come, first-served 43 22