Advertisement
Guest User

Untitled

a guest
Feb 26th, 2017
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.47 KB | None | 0 0
  1. void MLF() {
  2.     int currentTime = 0;
  3.     float avgTime = 0;
  4.     int procsCompleted = 0;
  5.     vector<int> totalTimes( processVect.size() );
  6.     vector<int> runTimes( processVect.size() );
  7.     vector<Process*> processes;
  8.     queue<Process*> priorityQueue[5];
  9.     map<Process*, int> timeMap;
  10.  
  11.     while(procsCompleted < processVect.size()) {
  12.         processes = getProcesses(currentTime);
  13.  
  14.         for(int i = 0; i < processes.size(); i++) {
  15.             Process *process = processes.at(i);
  16.             if( timeMap.find(process) == timeMap.end() ) {
  17.                 priorityQueue[4].push(process);
  18.                 timeMap.emplace(process, 0);
  19.             }
  20.         }
  21.  
  22.         int queueIndex = -1;
  23.         if(priorityQueue[4].size() > 0) {
  24.             queueIndex = 4;
  25.         }
  26.         else if(priorityQueue[3].size() > 0) {
  27.             queueIndex = 3;
  28.         }
  29.         else if(priorityQueue[2].size() > 0) {
  30.             queueIndex = 2;
  31.         }
  32.         else if(priorityQueue[1].size() > 0) {
  33.             queueIndex = 1;
  34.         }
  35.         else if(priorityQueue[0].size() > 0) {
  36.             queueIndex = 0;
  37.         }
  38.  
  39.         if(queueIndex == -1) {
  40.             currentTime += 1;
  41.         }
  42.         else {
  43.             Process *process = priorityQueue[queueIndex].front();
  44.             currentTime += 1;
  45.             runTimes.at(process->processNum) += 1;
  46.  
  47.             if(runTimes.at(process->processNum) == process->serviceTime) {
  48.                 totalTimes.at(process->processNum) = currentTime - process->arrivalTime;
  49.                 avgTime += currentTime - process->arrivalTime;
  50.                 priorityQueue[queueIndex].pop();
  51.                 timeMap.erase(process);
  52.                 procsCompleted += 1;
  53.             }
  54.             else {
  55.                 if(queueIndex == 0) {
  56.                     priorityQueue[0].pop();
  57.                     priorityQueue[0].push(process);
  58.                 }
  59.                 else {
  60.                     timeMap.at(process) += 1;
  61.                     if(timeMap.at(process) == pow(2, 4 - queueIndex)) {
  62.                         priorityQueue[queueIndex].pop();
  63.                         priorityQueue[queueIndex-1].push(process);
  64.                         timeMap.at(process) = 0;
  65.                     }
  66.                 }
  67.             }
  68.         }
  69.     }
  70.  
  71.     avgTime /= totalTimes.size();
  72.  
  73.     ofs << std::fixed << std::setprecision(2) << avgTime;
  74.     for(int time: totalTimes) {
  75.         ofs << " " << time;
  76.     }
  77.     ofs << '\n';
  78. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement