#include "Planista.h" PCB running; Planista::Planista() { for (int i = 0; i < 8; i++) { kolejka_bool.push_back(false); } } Planista::~Planista() { } void Planista::dodaj_do_kolejki(PCB &x) { if (x.Dynamic_priority == NULL) { x.Dynamic_priority = x.Priority; } int nr = x.Dynamic_priority / 4; mapa_kolejek[nr].push_back(x); kolejka_bool.at(nr) = true; } void Planista::dzielnik_cpu() { for (int i = 0; i < 8; i++) //pętla sprawdzająca mape kolejek { for (std::list::iterator it = mapa_kolejek[i].begin(); it != mapa_kolejek[i].end(); it++) { if (it->PID == 1) { } else { it->CPU = it->CPU / 2; } } } } void Planista::powrot_do_kolejki(PCB &x) { x.Dynamic_priority = x.Priority + (x.CPU / 2); int nr = x.Priority / 4; mapa_kolejek[nr].push_back(x); kolejka_bool.at(nr) = true; } void Planista::run(Tree &t) { std::vector r = t.Ready_processes(); for (int j = 0; j < r.size(); j++) { bool go = true; for (size_t i = 0; i < r_in_q.size(); i++) { if (t.Get_process(r[j]).PID == r_in_q[i]) { go = false; } } if (go == true) { dodaj_do_kolejki(t.Get_process(r[j])); r_in_q.push_back(r[j]); } } int i = 0; while (kolejka_bool.at(i) == false) //sprawdzanie pierwszej dostępnej kolejki w mapie { //sprawdzanie pierwszej dostępnej kolejki w mapie if (kolejka_bool.at(i) == true) //sprawdzanie pierwszej dostępnej kolejki w mapie { //sprawdzanie pierwszej dostępnej kolejki w mapie break; //sprawdzanie pierwszej dostępnej kolejki w mapie } //sprawdzanie pierwszej dostępnej kolejki w mapie i++; if (i == 8) { return; } } //sprawdzanie pierwszej dostępnej kolejki w mapie PCB x = mapa_kolejek[i].front(); mapa_kolejek[i].pop_front(); if (mapa_kolejek[i].empty()) { kolejka_bool[i] == false; } running = x; running.Change_process_state(Running); } void Planista::make_zombie(PCB &actual, Tree &t, MemoryManager &mm) { actual.Change_process_state(Zombie); actual.Change_process_state(Terminated); running = actual; int nr = running.Priority / 4; if (mapa_kolejek[nr].empty()) { kolejka_bool[nr] = false; } t.Exit_1(running.PID, mm); } void Planista::check(PCB &actual, Tree &t) { if (actual.State !=Terminated) { actual.Change_process_state(Ready); running = actual; } if (actual.State == Terminated) { running.PID = NULL; } if (running.PID == NULL) { std::cout << "Start Planistyn"; run(t); actual = running; return; } if (running.PID != NULL) { std::cout << "odkladanie procesun"; powrot_do_kolejki(running); dzielnik_cpu(); run(t); actual = running; return; } // else // { // //std::cout << "Proces w Procesorzen"; // actual = running; // return; // } } //void Planista::act(PCB &act) { // act = running; //}