Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Parte1f

335 views

Published on

  • Be the first to comment

  • Be the first to like this

Parte1f

  1. 1. <ul>Deadlocks (impasses) </ul>
  2. 2. Exemplos de recursos <ul><li>impressoras, drives, tabelas, memória, tempo de processador
  3. 3. Sequência de eventos necessária para usar um recurso
  4. 4. Solicitar recurso
  5. 5. Usar recurso
  6. 6. Liberar recurso
  7. 7. Se o pedido for negado …
  8. 8. Pode bloquear e esperar -> semáforo ou espera ociosa
  9. 9. Pode falhar, retornando código de erro </li></ul>
  10. 10. Um conjunto de processos bloqueados cada qual mantendo um recurso e aguardando por um recurso mantido por outro processo do conjunto . Semaphore x=1; Semaphore y=1; void t1( void) { down( &x); down( &y); } void t2( void) { down( &y); down( &x); } <ul>O problema do deadlock </ul>
  11. 11. <ul><li>Processo
  12. 12. Classe de recurso com 4 instâncias
  13. 13. Pi solicita instância de Ri
  14. 14. B solicita S
  15. 15. (1 instância de cada tipo de recurso)
  16. 16. Pi está mantendo uma instância de Ri
  17. 17. A detém (mantém) R </li></ul>(1 instância de cada tipo de recurso) <ul>Grafo de alocação de recursos </ul><ul>P i </ul><ul>R j </ul><ul>P i </ul><ul>R j </ul>
  18. 18. O deadlock pode acontecer se 4 condições ocorrerem simultaneamente: 1) Exclusão mútua : apenas um processo pode utilizar o recurso de cada vez; 2) Posse e espera : um processo que detém pelo menos um recurso, está aguardando para adquirir recursos adicionais mantidos por outros processos; 3) Não-preempção : um recurso pode ser liberado apenas voluntariamente pelo processo que o detém; 4) Espera circular : existe um conjunto de processos {P0, P1, …, Pn} aguardando, de tal forma que P0 está aguardando um recurso mantido por P1, P1 está aguardando um recurso mantido por P2, …, Pn-1 está aguardando um recurso de Pn e Pn está aguardando um recurso mantido por P0. <ul>Caracterização do deadlock </ul>
  19. 19. Grafo com mais de uma instância de cada tipo de recurso <ul>Exemplo de um grafo de alocação de recursos </ul>
  20. 20. Grafo de alocação de recursos com um ciclo mas sem deadlock
  21. 21. Detecção de deadlocks com um recurso de cada tipo <ul><li>Quando se tem um grafo com um recurso de cada tipo, um ciclo
  22. 22. indica a presença deadlock </li></ul>
  23. 23. Fatos <ul><li>Se o grafo não contiver ciclos => não há deadlock
  24. 24. Se o grafo contiver ciclo(s): </li><ul><li>Se houver apenas uma instância de cada tipo de recurso => deadlock
  25. 25. Se houver várias instâncias de cada tipo de recurso => possibilidade de deadlock </li></ul></ul>
  26. 26. Detecção de deadlocks com vários recursos de cada tipo <ul><li>Algoritmo </li><ul><li>1) Procura-se um processo desmarcado, Pi, para o qual a i-ésima linha de R (Ri) seja
  27. 27. menor ou igual ao disponível (A): </li><ul><ul><ul><ul><ul><ul><ul><ul><li>Ri <= A? </li></ul></ul></ul></ul></ul></ul></ul></ul><li>2) Se este processo for encontrado, adiciona-se a i-ésima linha de C à A, marca-se o
  28. 28. processo como terminado e volta-se ao passo 1 </li><ul><ul><ul><ul><ul><ul><ul><ul><li>A = A+Ci </li></ul></ul></ul></ul></ul></ul></ul></ul><li>3) Se não existir esse processo, o algoritmo termina </li></ul><li>Ao final do algoritmo, se existirem processos desmarcados, significa que irá ocorrer
  29. 29. um deadlock </li></ul>
  30. 30. Detecção de deadlocks com vários recursos de cada tipo Exemplo E = [4 2 3 1] E: vetor de recursos existentes A = [2 1 0 0] A: vetor de recursos disponíveis ( available ) C = 0 0 1 0 C: matriz de alocação atual ( current ) 2 0 0 1 0 1 2 0 R = 2 0 0 1 R: matriz de requisições 1 0 1 0 2 1 0 0 Ri <= A? A = A+Ci R2<=A A = A+C2 A=[4 2 2 1] Ri <= A? A = A+Ci R3<=A A = A+C3 A=[2 2 2 0] Ri <= A? A = A+Ci R1<=A A = A+C1 A=[4 2 3 1] A=E !!!
  31. 31. Métodos para tratar deadlocks <ul><ul><li>Ignora-se o problema e finge-se que nunca vai ocorrer (algoritmo do avestruz). </li></ul></ul>usado por muitos sistemas operacionais de uso geral (Linux, Windows) <ul><ul><li>Permite-se que o sistema entre em deadlock e depois faz-se a recuperação
  32. 32. Assegura-se que o sistema nunca entrará num estado de deadlock </li></ul></ul>
  33. 33. Algoritmos de recuperação de deadlocks <ul><ul><li>Eliminação (morte) de processos </li><ul><li>grosseiro mas simples. Usual em sistemas de uso geral (Windows e Linux) mas
  34. 34. improvavél em sistemas de tempo real. </li></ul><li>Rollback (reversão de estado) </li><ul><li>necessário gravar o estado do processo periodicamente para ser utilizado
  35. 35. quando necessário ( deadlock ). e.g. pontos de recuperação do Windows </li></ul><li>Preempção </li><ul><li>retira-se um recurso de determinado processo, devolvendo-se aquele mais tarde
  36. 36. (depende da natureza do processo e do recurso) </li></ul></ul></ul>
  37. 37. Algoritmos para evitar deadlocks <ul><ul><li>Trajetória de recursos
  38. 38. Análise de estados seguros e inseguros
  39. 39. um estado é seguro se não está em deadlock e existe uma ordem de escalonamento
  40. 40. na qual todos os processos possam ser executados até sua conclusão. O sistema pode
  41. 41. garantir que todos os processos terminarão
  42. 42. estado inseguro : pode até ser que todos os processos terminem mas esta garantia
  43. 43. não pode ser dada. </li></ul></ul>
  44. 44. Algoritmos para evitar deadlocks <ul><ul><li>Trajetória de recursos </li></ul></ul>A solicita Printer A libera Printer
  45. 45. Algoritmos para evitar deadlocks <ul><ul><li>Análise de estados seguros e inseguros
  46. 46. o primeiro estado é seguro porque há uma ordem de escalonamento (BCA) que permite
  47. 47. que todos os processos terminem. Já o segundo estado é inseguro porque permite
  48. 48. apenas que B termine: A e C necessitarão de 5 recursos e estarão disponíveis apenas
  49. 49. 4. </li></ul></ul>seguro inseguro
  50. 50. Prevenção de deadlocks <ul><ul><li>Ataca-se a condição de posse-e-espera </li><ul><li>Os processos solicitam todos os seus recursos antes de começar. </li><ul><li>Processo nunca tem de esperar </li></ul><li>Problema: pode-se não saber quais são os recursos necessários já no início </li></ul></ul></ul>
  51. 51. Prevenção de deadlocks <ul><ul><li>Ataca-se a condição de espera circular </li><ul><li>Recursos ordenados
  52. 52. Pedido de recursos feitos por ordem numérica
  53. 53. Grafo de recursos nunca terá ciclos </li></ul></ul></ul>
  54. 54. <ul>[1] Real-Time Systems and Programming Languages . Burns A., Wellings A. <ul>2nd edition </ul>[2] Análise de Sistemas Operacionais de Tempo Real Para Applicações de <ul>Robótica e Automação. Aroca R. V. Dissertação de Mestrado. </ul>[3] Operating System Concepts . Silberschatz, Galvin, Gagne. 8 th edition [4] Sistemas Operacionais Modernos. Tanenbaum 2a edição </ul><ul>Bibliografia </ul>

×