Guest User

Untitled

a guest
Jul 18th, 2018
122
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.81 KB | None | 0 0
  1. esercizio del 09/12/2009
  2.  
  3. numero 1
  4. siano dati tre processi "stampa" come segue:
  5. stampa(x):(x=A,T,R) process
  6. while (true) {
  7. taratata.synchro(x);
  8. print(x);
  9. }
  10. scrivere il monitor taratata con una sola procedure entry synchro() che consenta di avere in output una sequenza infinita di TARATATA (i.e. TARATATATARATATATARATATATARATATA...)
  11.  
  12. condition okX[1, 2, 3]
  13. int state;
  14. sharp.d = msg[8] = {T, A, R, A, T, A, T, A}
  15.  
  16. while (true)
  17. taratata.enter(x);
  18. print(x);
  19. taratata.exit(x);
  20.  
  21.  
  22. p. entry enter(x)
  23. if (msg[state] != x)
  24. okX[x].wait();
  25.  
  26. p. entry exit(x)
  27. state = (state+1)%&;
  28. okX[msg[state]].signal();
  29.  
  30. potendo unire exit ed enter
  31. p. entry
  32. if (notfirst[x]) {
  33. state = (state+1)%&;
  34. okX[msg[state]].signal();
  35. }
  36. notfirst[x]=true;
  37. if (msg[state]!=x)
  38. okX[x].wait();
  39.  
  40.  
  41. -------------------------------------------------------------------------------------------
  42.  
  43. numero 2
  44. Uno scheduler cooperativo prevede che ogni processo chiami la funzione yield() quando può cedere il controllo agli altri processi.
  45. La funzione yield deve quindi attivare un altro processo e bloccare il chiamante.
  46. Facendo uso di semafori scrivere tre funzioni init, yield, fini tutte prive di parametri.
  47. Init viene chiamata da un processo che vuole iniziare la propria esecuzione, yield è quella descritta sopra e fini viene chiamata da un processo
  48. subito prima di terminare.
  49. Un solo processo alla volta deve essere in esecuzione (fra quelli che hanno chiamato init e non ancora fini), yield deve fare avvicendare i processi
  50. in ordine ciclico (come se fossero in una coda circolare, il processo che fa yield deve essere riattivato dopo che tutti quelli in attesa hanno avuto
  51. modo di essere eseguiti e chiamare nuovamente yield o fini).
  52.  
  53. semaphore.mutex(1)
  54. init
  55. mutex.P();
  56. yield();
  57. mutex.V();
  58. mutex.P();
  59. fini
  60. mutex.V();
Add Comment
Please, Sign In to add comment