Advertisement
Guest User

papa

a guest
Nov 29th, 2015
137
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.65 KB | None | 0 0
  1. /**
  2. * Programos pavadinimas: CPUSchedulling.
  3. * Paskirtis: Pavaizduoti centrinio procesorinio prietaiso procesu skirstymo algoritmus.
  4. * Autorius: Dovydas Girdvainis
  5. * Vilniaus Gedimino technikos universiteto operaciniu sistemu koncepciju 4 laboratorinsi darbas.
  6. * Laboratorinio darbo uzduotis:
  7. * Parašyti programinį kodą C/C++ kalba, iliustruojantį CPĮ darbo planavimą pagal 2.1 – 2.5 punktuose apibūdintus algoritmus.
  8. * Laboratorinio darbo metu bus pateikta:
  9. *+ procesų skaičius;
  10. *+ CPĮ paketo trukmės;
  11. *+ atsiradimo laikas (TLVLP algoritme);
  12. *+ prioritetas (PDP algoritme);
  13. *+ laiko kvantas (ŽL algoritme).
  14. * Gali būti padaryta prielaida, kad visi procesai atsiranda nuliniu laiko momentu (išskyrus TLVLP algoritmą), bet tam tikra tvarka,
  15. *+ pvz., iš eilės: P1, P2 ... Pn. Turi būti numatyta galimybė keisti procesų skaičių ir jų CPĮ paketų trukmę.Turi būti apskaičiuojama
  16. *+ ir atvaizduojama: kiekvieno proceso laukimo trukmė, vidutinė laukimo trukmė,kiekvieno proceso apyvartos trukmė, vidutinė apyvartos trukmė.
  17. * Programos paleidimas:
  18. * ./CPUSchedulling algoritmo_tipas procesu_skaicius n_paketo_trukme n_paketo_atsiradimo_laikas n_paketo_prioritetas laiko_kvantas
  19. * Programos isvedamas rezultatas:
  20. *+ procesu skaicius;
  21. *+ N_proceso_laukimo_trukme, N_proceso_apyvarta;
  22. *+ vidutine_procesu_laukimo_trukme, vidutine_apyvartos_trukme.
  23. * 2015 m. VGTU
  24. */
  25. #include <iostream>
  26. #include <iomanip>
  27.  
  28. using namespace std;
  29.  
  30. int main()
  31. {
  32. string tipas; /**< algoritmo tipas */
  33. int n; /**< procesu skaicius */
  34. cout<<"tipas: ";
  35. cin>>tipas;
  36. cout<<endl<<"Proc. skaicius:";
  37. cin>>n;
  38. double* lenght=new double[n]; /**< procesu trukmiu masyvas */
  39. double* appear=new double[n]; /**< procesu atrisadimo laiku masyvas */
  40. int* priority=new int[n]; /**< procesu prioritetai */
  41. double q; /**< laiko kvantas */
  42. double t_avg=0; /**< proceso vidutine laukimo trukme */
  43. double tr_avg=0; /**< vidutine procesu apyvarta */
  44. double* t=new double[n]; /**< n-ojo proceso laukimo trukme */
  45. double* tr=new double[n]; /**< n-ojo proceso apyvarta */
  46.  
  47. /**< Nuskaitymo ciklas */
  48. if((tipas=="PAPA")||(tipas=="FCFS")||((tipas=="TDP")||(tipas=="SJF")))
  49. {
  50. for(int i=0; i<n; i++)
  51. {
  52. cout<<endl<<i<<" Proc trukme: ";
  53. cin>>lenght[i];
  54. }
  55. }
  56. else if((tipas=="TLVLP")||(tipas=="SRTF"))
  57. {
  58. for(int i=0; i<n; i++)
  59. {
  60. cout<<endl<<i<<" Proc. trukme: ";
  61. cin>>lenght[i];
  62. cout<<endl<<i<<" Proc. atsiradimas: ";
  63. cin>>appear[i];
  64. }
  65. }
  66. else if((tipas=="PDP")||(tipas=="PS"))
  67. {
  68. for(int i=0; i<n; i++)
  69. {
  70. cout<<endl<<i<<" Proc trukme: ";
  71. cin>>lenght[i];
  72. cout<<endl<<i<<" Proc prioritetas: ";
  73. cin>>priority[i];
  74. }
  75. }
  76. else if((tipas=="ZL")||(tipas=="RR"))
  77. {
  78. for(int i=0; i<n; i++)
  79. {
  80. cout<<endl<<i<<" Proc trukme ";
  81. cin>>lenght[i];
  82. }
  83. cout<<endl<<"Laiko kvantas: ";
  84. cin>>q;
  85. }
  86.  
  87. /**< Pirmas atejo - pirmas aptarnautas algoritmas */ // done
  88. if((tipas=="PAPA")||(tipas=="FCFS"))
  89. {
  90. t[0]=0;
  91. tr[0]=0;
  92. int b=0; // Sekancio proco laukimo trukme
  93. cout<<endl<<"Proc. skaic.: "<<n<<endl;
  94. for(int i=0; i<n; i++)
  95. {
  96. if(i==0)
  97. {
  98. t[i]=0;
  99. tr[i]=b+lenght[i];
  100. tr_avg+=tr[i];
  101. b+=lenght[i];
  102. cout<<i<<" Proc.: "<<t[i]<<" "<<tr[i]<<endl;
  103. i++;
  104. }
  105. t[i]=b;
  106. t_avg+=t[i];
  107. tr[i]=b+lenght[i];
  108. tr_avg+=tr[i];
  109. b+=lenght[i];
  110. cout<<i<<" Proc.: "<<t[i]<<" "<<tr[i]<<endl;
  111. }
  112. t_avg=t_avg/n;
  113. tr_avg=tr_avg/n;
  114. cout<<setprecision(2)<<t_avg<<" "<<setprecision(2)<<tr_avg<<endl;
  115. }
  116.  
  117. /**< Trumpiausio darbo pirmumo algoritmas */ // done
  118. else if((tipas=="TDP")||(tipas=="SJF"))
  119. {
  120. double tmp;
  121.  
  122. /**< Isiruosiuojame pagal paketo ilgi */
  123. for(int i=0; i<n; i++)
  124. {
  125. for(int j=(i+1); j<n; j++)
  126. {
  127. if(lenght[i]>lenght[j])
  128. {
  129. tmp=lenght[i];
  130. lenght[i]=lenght[j];
  131. lenght[j]=tmp;
  132. }
  133. }
  134. }
  135.  
  136. t[0]=0;
  137. tr[0]=0;
  138. int b=0; // Sekancio proco laukimo trukme
  139. cout<<endl<<"Proc. skaic.: "<<n<<endl;
  140. for(int i=0; i<n; i++)
  141. {
  142. if(i==0)
  143. {
  144. t[i]=0;
  145. tr[i]=b+lenght[i];
  146. tr_avg+=tr[i];
  147. b+=lenght[i];
  148. cout<<i<<" Proc.: "<<t[i]<<" "<<tr[i]<<endl;
  149. i++;
  150. }
  151. t[i]=b;
  152. t_avg+=t[i];
  153. tr[i]=b+lenght[i];
  154. tr_avg+=tr[i];
  155. b+=lenght[i];
  156. cout<<i<<" Proc.: "<<t[i]<<" "<<tr[i]<<endl;
  157. }
  158. t_avg=t_avg/n;
  159. tr_avg=tr_avg/n;
  160. cout<<setprecision(2)<<t_avg<<" "<<setprecision(2)<<tr_avg<<endl;
  161. }
  162.  
  163. /**< Trumpiausio likusio veikimo laiko pirmumo algoritmas */
  164. else if((tipas=="TLVLP")||(tipas=="SRTF"))
  165. {
  166. bool* status=new bool[n]; /**< proceso statusu masyvas */
  167. int x;
  168. bool done; /**< Ar visi procesai baigti? */
  169.  
  170. for(int i=0; i<=n; i++)
  171. status[i]=0;
  172.  
  173. while(!done)
  174. {
  175. x=0;
  176. for(int i=0; i<=n; i++)
  177. {
  178. if(status[i]==1)
  179. x++;
  180. if(x==n)
  181. done=1;
  182. if((lenght[i]>lenght[i+1])&&(appear[i]<appear[i+1]))
  183. {
  184. lenght[i]--;
  185. tr[i]++;
  186. if(lenght[i]==0)
  187. status[i]=1;
  188. i++;
  189. }
  190. }
  191.  
  192. }
  193. }
  194.  
  195. /**< Prioritetinio darbo paskirstymo algoritmas */ // done
  196. else if((tipas=="PDP")||(tipas=="PS"))
  197. {
  198. double tmp;
  199. /**< Isirusiuojame pagal prioriteta */
  200. for(int i=0; i<n; i++)
  201. {
  202. for(int j=(i+1); j<n; j++)
  203. {
  204. if(priority[i]>priority[j])
  205. {
  206. tmp=lenght[i];
  207. lenght[i]=lenght[j];
  208. lenght[j]=tmp;
  209.  
  210. tmp=priority[i];
  211. priority[i]=priority[j];
  212. priority[j]=tmp;
  213. }
  214. }
  215. }
  216.  
  217. t[0]=0;
  218. tr[0]=0;
  219. int b=0; // Sekancio proco laukimo trukme
  220. cout<<endl<<"Proc. skaic.: "<<n<<endl;
  221. for(int i=0; i<n; i++)
  222. {
  223. if(i==0)
  224. {
  225. t[i]=0;
  226. tr[i]=b+lenght[i];
  227. tr_avg+=tr[i];
  228. b+=lenght[i];
  229. cout<<i<<" Proc.: "<<t[i]<<" "<<tr[i]<<endl;
  230. i++;
  231. }
  232. t[i]=b;
  233. t_avg+=t[i];
  234. tr[i]=b+lenght[i];
  235. tr_avg+=tr[i];
  236. b+=lenght[i];
  237. cout<<i<<" Proc.: "<<t[i]<<" "<<tr[i]<<endl;
  238. }
  239. t_avg=t_avg/n;
  240. tr_avg=tr_avg/n;
  241. cout<<setprecision(2)<<t_avg<<" "<<setprecision(2)<<tr_avg<<endl;
  242. }
  243.  
  244. /**< Ziediniu lenktyniu algoritmas */
  245. else if((tipas=="ZL")||(tipas=="RR"))
  246. {
  247. bool* status=new bool[n]; /**< proceso statusu masyvas */
  248. int x; /**< Proceso statusas */
  249. bool done; /**< Ar visi procesai baigti? */
  250.  
  251. t[0]=0;
  252. tr[0]=0;
  253.  
  254. while(!done)
  255. {
  256. x=0;
  257.  
  258. for(int i=0; i<=n; i++)
  259. {
  260. /**< Procesu statusu tikrinimas */
  261. if(status[i]==1)
  262. x++;
  263. if(x==n)
  264. done=1;
  265.  
  266. /**< Laiko kvanto ciklas */
  267. for(int j=0; j<=q; j++)
  268. {
  269. begining:
  270. if(lenght[i]==0)
  271. {
  272. status[i]=1;
  273. i++;
  274. goto begining;
  275. }
  276.  
  277. if(lenght[i]!=0)
  278. {
  279. lenght[i]--;
  280. tr[i]++;
  281. }
  282. }
  283.  
  284. if((i==0)&&(lenght[i]==0))
  285. t[i]=0;
  286.  
  287. if(lenght[i]!=0)
  288. {
  289. for(int p=i+1; p<=n; p++)
  290. {
  291. if(lenght[p]<=q)
  292. t[i]+=lenght[p];
  293. else
  294. t[i]+=q;
  295. }
  296. }
  297. }
  298. }
  299.  
  300. cout<<endl<<"Proc. skaic.: "<<n<<endl;
  301.  
  302. for(int i=0; i<=n; i++)
  303. {
  304. t_avg+=t[i];
  305. tr_avg+=tr[i];
  306. cout<<i<<" Proc.: "<<t[i]<<" "<<tr[i]<<endl;
  307. }
  308.  
  309. t_avg=t_avg/n;
  310. tr_avg=tr_avg/n;
  311.  
  312. cout<<t_avg<<" "<<tr_avg<<endl;
  313. cout<<setprecision(2)<<t_avg<<" "<<setprecision(2)<<tr_avg<<endl;
  314. }
  315.  
  316. return 0;
  317. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement