#include #include "ready.cpp" int ticktime = 0; int hickyname = 4; int quantum = 6; readylist rl; processList pl; blockqueue bl; void initRand() { srand( (unsigned)time( NULL ) ); } void idle(void) { cout << " idle" << endl; if(bl.isEmpty()) if((pl.returnFirst()->p.ready == ticktime) || (pl.returnFirst()->p.ready == (ticktime - 1))) ticktime += 1; else ticktime = pl.returnFirst()->p.ready; else if(pl.isEmpty()) if((bl.first->p.ready == ticktime) || (bl.first->p.ready == (ticktime - 1))) ticktime += 1; else ticktime = bl.first->p.ready; else if(pl.returnFirst()->p.ready > bl.first->p.ready) if((bl.first->p.ready == ticktime) || (bl.first->p.ready == (ticktime - 1))) ticktime += 1; else ticktime = bl.first->p.ready; else if((pl.returnFirst()->p.ready == ticktime) || (pl.returnFirst()->p.ready == (ticktime - 1))) ticktime += 1; else ticktime = pl.returnFirst()->p.ready; } void cpuRR(void) { cout << " P" << rl.first->p.name << endl; if ((rl.first->p.blocking.first != NULL) && (rl.first->p.blocking.first->time < quantum)) { ticktime += rl.first->p.blocking.first->time; rl.removeprocess('b', pl, bl, ticktime, quantum); } else if((rl.first->p.blocking.first != NULL) && (rl.first->p.blocking.first->time < quantum)) { ticktime += quantum; rl.removeprocess('r', pl, bl, ticktime, quantum); } else if(rl.first->p.work > quantum) { ticktime += quantum; rl.removeprocess('r', pl, bl, ticktime, quantum); } else { ticktime += rl.first->p.work; rl.removeprocess('d', pl, bl, ticktime, quantum); } } void cpuFIFO(void) { cout << " P" << rl.first->p.name << endl; if (rl.first->p.blocking.first != NULL) { ticktime += rl.first->p.blocking.first->time; rl.removeprocess('b', pl, bl, ticktime, 0); } else { ticktime += rl.first->p.work; rl.removeprocess('d', pl, bl, ticktime, 0); } } void cpuSRT(void) { cout << " P" << rl.first->p.name << endl; if ((rl.first->p.blocking.first != NULL) && (rl.first->p.blocking.first->time < quantum)) { ticktime += rl.first->p.blocking.first->time; rl.removeprocessnew('b', pl, bl, ticktime, quantum); } else if((rl.first->p.blocking.first != NULL) && (rl.first->p.blocking.first->time < quantum)) { ticktime += quantum; rl.removeprocessnew('r', pl, bl, ticktime, quantum); } else if(quantum < rl.first->p.work) { ticktime += quantum; rl.removeprocessnew('r', pl, bl, ticktime, quantum); } else { ticktime += rl.first->p.work; rl.removeprocessnew('d', pl, bl, ticktime, quantum); } } void cpuSJF(void) { cout << " P" << rl.first->p.name << endl; if (rl.first->p.blocking.first != NULL) { ticktime += rl.first->p.blocking.first->time; rl.removeprocessSJF('b', bl, ticktime); } else { ticktime += rl.first->p.work; rl.removeprocessSJF('d', bl, ticktime); } } void cpuLWC(void) { cout << " P" << rl.first->p.name << endl; if ((rl.first->p.blocking.first != NULL) && (rl.first->p.blocking.first->time < quantum)) { ticktime += rl.first->p.blocking.first->time; rl.removeprocessnew('b', pl, bl, ticktime, quantum); } else if((rl.first->p.blocking.first != NULL) && (rl.first->p.blocking.first->time < quantum)) { ticktime += quantum; rl.removeprocessnew('r', pl, bl, ticktime, quantum); } else if(quantum < rl.first->p.work) { ticktime += quantum; rl.removeprocessnew('r', pl, bl, ticktime, quantum); } else { ticktime += rl.first->p.work; rl.removeprocessnew('d', pl, bl, ticktime, quantum); } } void runScheduler(int opt) { char pause; cin >> pause; if(pause == 'c') { if(opt != 3) { if(ticktime > 26) if(((ticktime % 30) <= 3) || ((ticktime % 30) >= 27)) {hickyname++; cout << endl << "The new process entering is: " << endl << endl; cout << "Process\tType\tReady\tWork\tBlock" << endl; pl.addProcess(ticktime, hickyname); cout << endl << endl; } } if((rl.isEmpty()) && (pl.isEmpty()) && (bl.isEmpty())) {cout << ticktime << endl; cout << "done" << endl; } else {rl.getready(pl, bl, ticktime); cout << ticktime << endl; ticktime += 2; cout << " sched" << endl; cout << " rl:"; rl.print(); cout << " bl:"; bl.print(); cout << ticktime << endl; if(rl.isEmpty()) idle(); else { if (opt == 1) {cpuRR();} else if (opt == 2) {cpuFIFO();} else if (opt == 3) {cpuLWC();} else if (opt == 4) {cpuSJF();} else if (opt == 5) {cpuSRT();} } runScheduler(opt); } } }