Advertisement
Guest User

Untitled

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