Advertisement
Guest User

Untitled

a guest
Oct 23rd, 2016
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.95 KB | None | 0 0
  1. semaphore full=1, full2=5, full3=1;
  2.  
  3. semaphore mutex=1, mutex2=1, mutex3=1;
  4.  
  5. semaphore IOREQ=0, reqservice=1, requestpending=0, physicalIO=0, OP_COMPLETE=1;
  6.  
  7. semaphore print;
  8.  
  9. int ADDR, B_ADDR, Temp_ADDR,D_ADDR, seek;
  10.  
  11. int ID, B_ID, Temp_ID, D_ID, DISK_ID;
  12.  
  13.  
  14. //Producer
  15. void User()
  16. {
  17. ID=1;
  18. ADDR=random(200);
  19. p(full);
  20. p(mutex);
  21. B_ID=ID;
  22. B_ADDR=ADDR;
  23. v(mutex);
  24.  
  25. p(print);
  26. cout << "User 1 Executes system call SIO or DOIO" <<endl;
  27. v(print);
  28.  
  29. v(IOREQ);
  30. p(reqservice);
  31. p(print);
  32. cout << "Driver signal User 1 (operation complete)" << endl;
  33. v(print);
  34.  
  35.  
  36. }
  37.  
  38.  
  39.  
  40.  
  41.  
  42.  
  43.  
  44. //Consumer
  45. void DOIO()
  46. {
  47. int Temp_ID;
  48. int Temp_ADDR;
  49. int IORQ1;
  50. int IORQ2;
  51. int buffersize=5;
  52. int i;
  53.  
  54.  
  55. p(IOREQ);
  56. p(mutex);
  57.  
  58. Temp_ID=B_ID;
  59. Temp_ADDR=B_ADDR;
  60. v(mutex);
  61. v(full);
  62.  
  63. //Communicating with driver(like producer)//
  64. for(i=0; i<6; i++)
  65. {
  66. p(full2);
  67. p(mutex2);
  68.  
  69. IORQ1=Temp_ID;
  70. IORQ2=Temp_ADDR;
  71. IORQ1++;
  72. IORQ2++;
  73.  
  74. p(print);
  75. cout << "User 1 Executes system call SIO or DOIO" <<endl;
  76. v(print);
  77.  
  78. if(IORQ1==buffersize);
  79. IORQ1=0;
  80.  
  81. if(IORQ2==buffersize);
  82. IORQ2=0;
  83. }
  84.  
  85. v(mutex2);
  86. v(requestpending);
  87.  
  88. }
  89.  
  90.  
  91.  
  92.  
  93.  
  94.  
  95.  
  96.  
  97.  
  98.  
  99.  
  100. //Consumer
  101. void Driver()
  102. {
  103. int buffersize=5;
  104. int Temp2_ID, Temp2_ADDR;
  105. int IORQ1, IORQ2;
  106. int i;
  107.  
  108. for(i=0; i<6; i++){
  109. p(requestpending);
  110. p(mutex2);
  111.  
  112. Temp2_ID=IORQ1;
  113. Temp2_ADDR=IORQ2;
  114. IORQ1++;
  115. IORQ2++;
  116. if(IORQ1==buffersize)
  117. IORQ1=0;
  118.  
  119. if(IORQ2==buffersize)
  120. IORQ2=0;
  121. }
  122.  
  123. v(mutex2);
  124. v(full2);
  125.  
  126. //Producer
  127. p(full3);
  128. p(mutex3);
  129. D_ADDR=Temp2_ADDR;
  130. v(mutex3);
  131. v(physicalIO);
  132. p(OP_COMPLETE);
  133. v(reqservice);
  134.  
  135.  
  136.  
  137. }
  138.  
  139.  
  140.  
  141.  
  142.  
  143.  
  144.  
  145.  
  146.  
  147.  
  148.  
  149. void Disk()
  150. {
  151. int i;
  152.  
  153. p(physicalIO);
  154. p(mutex3);
  155. seek=D_ADDR;
  156. v(mutex);
  157. v(full3);
  158.  
  159. for(i=1; i<seek; i++)
  160. {
  161. v(OP_COMPLETE);
  162. }
  163.  
  164.  
  165.  
  166. }
  167.  
  168.  
  169.  
  170.  
  171.  
  172.  
  173.  
  174.  
  175. void main()
  176. {
  177.  
  178. int i;
  179.  
  180. for(i=0;i<10;i++)
  181. {
  182.  
  183. cobegin
  184. {
  185. User();
  186. DOIO();
  187. Driver();
  188. Disk();
  189.  
  190. }
  191. }
  192.  
  193.  
  194. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement