mituri

[C++] Symulator dzialania procesora

Oct 1st, 2015
271
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.59 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. Kwant czasu (angielskie time quantum, time slice)- odcinek czasu przydzielany procesowi do działania w algorytmie rotacyjnym, rzędu milisekund.
  13. */
  14.  
  15.  
  16. #include "stdafx.h"
  17. #include <queue>
  18. #include <cstdlib>
  19. #include <iostream>
  20.  
  21. /*
  22. Aby zrozumiec zadanie zapoznaj sie z FIFO
  23. oraz planowaniem rotacyjnym w tym wykladzie http://www.metal.agh.edu.pl/~wilk/wyk-os-is/wyklad5.pdf
  24. */
  25.  
  26. #define execTimeRange 100 //zakres czasu realizacji z ktorego bedziemy losowac jej wartosc, do wyboru do koloru
  27. #define numOfProc 10 //ilosc procesow, ja sobie ustawilem 10
  28.  
  29. class proces{
  30. public:
  31. int id; //id -identyfikator
  32. int execTime; // exeution time - czas realizacji
  33. };
  34.  
  35.  
  36. using namespace std;
  37.  
  38. proces createProces( queue <proces> procesorQueue){ // przez ta funkcje dolaczamy proces do kolejki(queue)
  39. proces proc;
  40. proc.id = procesorQueue.size() + 1; // nadajemy id nowego procesu
  41. proc.execTime = (rand() % execTimeRange) + 1; //losujemy czas realizacji
  42. return proc;
  43. }
  44. void showProces(proces proc){ // pokazuje dane procesu
  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; // backupqueue sluzy do trzymania wylosowanych procesow w ilosci numOfProc
  52. proces proc;
  53.  
  54. int time = 0, //sluzy do przetrzaymywania informacji o łacznym wykonywanie wszystkich procesow
  55. quantum = (rand() % execTimeRange) + 1; //losujemy wartosc kwantu
  56.  
  57. cout << "Kwant czasu wynosi " << quantum << "\n---------------------------\n";
  58.  
  59. cout <<"Ilosc procesow wynosi: "<< numOfProc <<":\n\n";
  60.  
  61. for(int i = 0; i < numOfProc; i++){
  62. backupQueue.push(createProces(backupQueue));
  63. proc = backupQueue.back();
  64. showProces(proc);
  65. }
  66. cout << "........................\n";
  67.  
  68. while( (!backupQueue.empty()) || (!procesorQueue.empty()) ){ // dopoki kolejka z procesami i procesor nie sa puste
  69. if((!backupQueue.empty())){
  70. if(rand()%2){ // "procesy sa generowane z losowa czestotliwoscia" ja wybrałem 50%. rand()%2 zwraca 0 lub 1. jest 0 to nie robi nic jestli wyjdzie 1 to dodaje proces do procesorQuene, czyli do procesora
  71. proc = backupQueue.front();
  72. procesorQueue.push(proc);
  73. cout << "dodano ";showProces(proc);
  74. backupQueue.pop();
  75. }
  76. }
  77. if(!procesorQueue.empty()){
  78. proc = procesorQueue.front();// sprawdzamy pierwszy element naszej kolejki
  79. cout << "procesor wykonuje: ";showProces(proc);
  80. if(proc.execTime >= quantum){
  81. time += quantum;// sumuje czas wykonywania wszystkich procesow
  82. proc.execTime -= quantum;
  83. procesorQueue.push(proc);
  84. procesorQueue.pop();
  85. }else{
  86. cout << "wykonano ";showProces(proc);
  87. time += proc.execTime;
  88. procesorQueue.pop();
  89. }
  90. }
  91. }
  92. cout << "\nCzas ktory uplynal do zakonczenia procesow " << time << "\n\n";
  93.  
  94. system ("PAUSE");
  95. }
Advertisement
Add Comment
Please, Sign In to add comment