mituri

[C++] Rozserzony symulator dzialania procesora

Oct 1st, 2015
282
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.94 KB | None | 0 0
  1. /*
  2. Zasymulować działanie procesora. Na wykonanie czeka kolejka procesów. Każdy jest opisany za pomocą pary:
  3. identyfikator (kolejny numer tworzony przy dodawaniu procesu do kolejki), czas potrzebny do zakończenia
  4. realizacji. Każdy proces z kolejki ma przydzielany kwant czasu. Jeżeli po tym kwancie proces się nie zakończy
  5. to wędruje na koniec kolejki i czeka na przydzielenie kolejnego kwantu. Procesy są generowane z losową
  6. częstotliwością i mają losowe czasy wykonania. Ograniczyć liczbę tworzonych procesów. Przy wkładaniu
  7. procesu do kolejki raportować jego identyfikator i czas. Po zakończeniu wszystkich procesów wyświetlić czas,
  8. który upłynął do ich zakończenia.
  9. Do obsługi kolejki wykorzystać szablon queue.
  10.  
  11. +
  12.  
  13. Wykonać zadanie 5 przy założeniu, że dane poszczególnych procesów są pobierane z pliku zawierającego:
  14. -opóźnienie dla procesu,
  15. -czas potrzebny na jego dokończenie. CZYLI NASZ PROCES.EXECtIME
  16.  
  17. Opóźnienie-czas, jaki zużywamy na wstrzymanie jednego procesu i uaktywnienie innego
  18. */
  19.  
  20. #include "stdafx.h"
  21. #include <queue>
  22. #include <cstdlib>
  23. #include <iostream>
  24. #include <string>
  25. #include <fstream>
  26.  
  27. class proces{
  28. public:
  29. int id;
  30. int execTime;
  31. };
  32.  
  33. #define execTimeRange 100 //zakres czasu realizaci
  34. #define numOfProc 10 //
  35.  
  36. using namespace std;
  37.  
  38. proces createProces( queue <proces> procesorQueue){
  39. proces proc;
  40. proc.id = procesorQueue.size() + 1;
  41. proc.execTime = (rand() % execTimeRange) + 1;
  42. return proc;
  43. }
  44. void showProces(proces proc){
  45. cout << "id: " << proc.id << " czas realizacji: " << proc.execTime << endl;
  46. }
  47.  
  48.  
  49. int _tmain(int argc, _TCHAR* argv[]){
  50.  
  51. queue <proces> procesorQueue, backupQueue;
  52. proces proc;
  53.  
  54. int time = 0,
  55. delay = 0,
  56. fileNumPointer = 0,
  57. quantum = rand() % execTimeRange;
  58.  
  59. cout << "Kwant czasu wynosi " << quantum << "\n---------------------------\n";
  60.  
  61. cout <<"Ilosc procesow wynosi: "<< numOfProc <<":\n\n";
  62.  
  63. /*
  64. Wykonać zadanie 5 przy założeniu, że dane poszczególnych procesów są pobierane z pliku zawierającego:
  65. -opóźnienie dla procesu,
  66. -czas potrzebny na jego dokończenie. CZYLI NASZ PROCES.EXECtIME
  67.  
  68. Opóźnienie
  69. czas, jaki zużywamy na wstrzymanie jednego procesu i uaktywnienie innego
  70. */
  71.  
  72. //otwieramy plik z danymi do pobrania
  73. fstream file;
  74. file.open( "text.txt" , std::ios::in | std::ios::out);
  75. if( file.good() == false )exit (0);
  76.  
  77. //tworzymy vector(czyli taka tablica) i wrzucamy do niej wartosci z pliku
  78. vector <string> fileNum;
  79. string line;
  80. while(getline(file,line)){
  81. fileNum.push_back(line);
  82. }
  83.  
  84. //wkladamy do naszej backupQueue procesy: 50% ze proces pobiera dane z pliku + ma opoznienie, 50% ze tworzymy go losujac mu execTime losowo
  85. for(int i = 0; i < numOfProc; i++){
  86. if(rand()%2){
  87. delay = atoi( fileNum[ fileNumPointer++ ].c_str());
  88. proc.execTime = atoi( fileNum[ fileNumPointer++ ].c_str());
  89. proc.execTime += delay;
  90. proc.id = backupQueue.size() + 1;
  91. backupQueue.push(proc);
  92. }else{
  93. backupQueue.push(createProces(backupQueue));
  94. proc = backupQueue.back();
  95. }
  96. showProces(proc);
  97. }
  98. cout << "........................\n";
  99.  
  100. while( (!backupQueue.empty()) || (!procesorQueue.empty()) ){
  101. if((!backupQueue.empty())){
  102. if(rand()%2){
  103. proc = backupQueue.front();
  104. procesorQueue.push(proc);
  105. cout << "dodano ";showProces(proc);
  106. backupQueue.pop();
  107. }
  108. }
  109. if(!procesorQueue.empty()){
  110. proc = procesorQueue.front();
  111. cout << "procesor wykonuje: ";showProces(proc);
  112. if(proc.execTime >= quantum){
  113. time += quantum;
  114. proc.execTime -= quantum;
  115. procesorQueue.push(proc);
  116. if(procesorQueue.size() > 0) procesorQueue.pop();
  117. }else{
  118. cout << "wykonano ";showProces(proc);
  119. time += proc.execTime;
  120. if(procesorQueue.size() > 0) procesorQueue.pop();
  121. }
  122. }
  123. }
  124. cout << "\nCzas ktory uplynal do zakonczenia procesow " << time << "\n\n";
  125.  
  126. system ("PAUSE");
  127. }
Advertisement
Add Comment
Please, Sign In to add comment