Advertisement
Guest User

Untitled

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