Advertisement
Kimossab

SO - Exame Recurso 2015

Jul 13th, 2015
405
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.08 KB | None | 0 0
  1. 1) A afirmação é falsa, as threads (tarefas) estam associadas a um processo por isso partlham a secçao de codigo, dados, heap, recursos, etc. Por isso não é criado umnovo espço de endereçamento mas é usado o mesmo do processo.
  2.  
  3. 3) Processos são alocados ao processador à medida que cheam (FIFO), mas apenas têm um tempo limitado de execução (quantum). Se o quantum se esgotar o processo está sujeito à preempção.
  4.  
  5. 4) O processo passa de Pronto a executar para em execução (despacho) quando é alocado o processador ao processo.
  6.  
  7. 5) O que se passa de errado é a concorrencia entre processos. Estes não estão sincronizados e executam a mesma secção (crítica) ao mesmo tempo e por isso acabam por misturar mensagems. Uma solução era usar um algoritmo que apenas deixe executar um processo de cada vez esta secção, por exemplo um semaforo. Deste modo, podiam executar sem inteferir um com o outro.
  8.  
  9. 6)
  10. Y 0
  11. X 1
  12. Z 0
  13. Porque a começa como 0. Cria um filho e este filho faz o fn(). incrementa o a antes de o mostrar, ou seja 1. Sai o filho. O a do pai ainda nao foi mudado, portanto é 0.
  14.  
  15. 7)
  16. Semaforo: Sincronização indireta, não é inderçavel a um processo em particular.
  17. Sinais: Sincronização direta. Apenas é possível para processos devidadmente identificados (PID) (operaçoes basicas: sleep() wakeup(PID) )
  18.  
  19. ambas evitam espera ativa
  20.  
  21. Semaforo: capacidade de memoria
  22. Sinais: wakeup pode-se perder se o outro nao estiver adormecido.
  23.  
  24. 9) nao sei...
  25.  
  26. 10)
  27. a) chmod 752
  28. 111 101 010 = rwxr-x-w-
  29. b) chmod u-xw
  30. -r--r--r--
  31. c) chmod o+x+w
  32. -rw-r--rwx
  33.  
  34. 11) c)
  35.  
  36. 12) b) d)
  37.  
  38. 13) a)
  39.  
  40. 14) a) b) c) d)
  41.  
  42. 15) a)
  43.  
  44. 16) a)
  45.  
  46. 17) a) c) d)
  47.  
  48. 18)
  49.  
  50. char terminado = 0;
  51.  
  52. void setterm(int sign)
  53. {
  54. terminado = 1;
  55. }
  56.  
  57. int main()
  58. {
  59. int cid;
  60. signal(SIGUSR1,setterm);
  61. cid = fork();
  62. if(cid == 0)
  63. {
  64. while(terminado == 0);
  65. printf("Processo pai terminou.");
  66. exit(0);
  67. }
  68. kill(cid,SIGUSR1);
  69. exit(0);
  70. }
  71.  
  72. Quando o processo pai for terminar irá lançar o sinal SIGUSR1 ao filho para lhe dizer que vai terminar. Assim o filho ja sabe que o pai terminou.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement