Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Zasymulować działanie procesora. Na wykonanie czeka kolejka procesów. Każdy jest opisany za pomocą pary:
- identyfikator (kolejny numer tworzony przy dodawaniu procesu do kolejki), czas potrzebny do zakończenia
- realizacji. Każdy proces z kolejki ma przydzielany kwant czasu. Jeżeli po tym kwancie proces się nie zakończy
- to wędruje na koniec kolejki i czeka na przydzielenie kolejnego kwantu. Procesy są generowane z losową
- częstotliwością i mają losowe czasy wykonania. Ograniczyć liczbę tworzonych procesów. Przy wkładaniu
- procesu do kolejki raportować jego identyfikator i czas. Po zakończeniu wszystkich procesów wyświetlić czas,
- który upłynął do ich zakończenia.
- Do obsługi kolejki wykorzystać szablon queue.
- Kwant czasu (angielskie time quantum, time slice)- odcinek czasu przydzielany procesowi do działania w algorytmie rotacyjnym, rzędu milisekund.
- */
- #include "stdafx.h"
- #include <queue>
- #include <cstdlib>
- #include <iostream>
- /*
- Aby zrozumiec zadanie zapoznaj sie z FIFO
- oraz planowaniem rotacyjnym w tym wykladzie http://www.metal.agh.edu.pl/~wilk/wyk-os-is/wyklad5.pdf
- */
- #define execTimeRange 100 //zakres czasu realizacji z ktorego bedziemy losowac jej wartosc, do wyboru do koloru
- #define numOfProc 10 //ilosc procesow, ja sobie ustawilem 10
- class proces{
- public:
- int id; //id -identyfikator
- int execTime; // exeution time - czas realizacji
- };
- using namespace std;
- proces createProces( queue <proces> procesorQueue){ // przez ta funkcje dolaczamy proces do kolejki(queue)
- proces proc;
- proc.id = procesorQueue.size() + 1; // nadajemy id nowego procesu
- proc.execTime = (rand() % execTimeRange) + 1; //losujemy czas realizacji
- return proc;
- }
- void showProces(proces proc){ // pokazuje dane procesu
- cout << "id: " << proc.id << " czas realizacji: " << proc.execTime << endl;
- }
- int _tmain(int argc, _TCHAR* argv[]){
- queue <proces> procesorQueue, backupQueue; // backupqueue sluzy do trzymania wylosowanych procesow w ilosci numOfProc
- proces proc;
- int time = 0, //sluzy do przetrzaymywania informacji o łacznym wykonywanie wszystkich procesow
- quantum = (rand() % execTimeRange) + 1; //losujemy wartosc kwantu
- cout << "Kwant czasu wynosi " << quantum << "\n---------------------------\n";
- cout <<"Ilosc procesow wynosi: "<< numOfProc <<":\n\n";
- for(int i = 0; i < numOfProc; i++){
- backupQueue.push(createProces(backupQueue));
- proc = backupQueue.back();
- showProces(proc);
- }
- cout << "........................\n";
- while( (!backupQueue.empty()) || (!procesorQueue.empty()) ){ // dopoki kolejka z procesami i procesor nie sa puste
- if((!backupQueue.empty())){
- 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
- proc = backupQueue.front();
- procesorQueue.push(proc);
- cout << "dodano ";showProces(proc);
- backupQueue.pop();
- }
- }
- if(!procesorQueue.empty()){
- proc = procesorQueue.front();// sprawdzamy pierwszy element naszej kolejki
- cout << "procesor wykonuje: ";showProces(proc);
- if(proc.execTime >= quantum){
- time += quantum;// sumuje czas wykonywania wszystkich procesow
- proc.execTime -= quantum;
- procesorQueue.push(proc);
- procesorQueue.pop();
- }else{
- cout << "wykonano ";showProces(proc);
- time += proc.execTime;
- procesorQueue.pop();
- }
- }
- }
- cout << "\nCzas ktory uplynal do zakonczenia procesow " << time << "\n\n";
- system ("PAUSE");
- }
Advertisement
Add Comment
Please, Sign In to add comment