Moving FCFS to SRT style

This commit is contained in:
Zach S-B 2021-08-28 12:58:47 +10:00
parent ef07a1b3aa
commit 83ed551b44
3 changed files with 77 additions and 48 deletions

View File

@ -1,7 +1,7 @@
import java.util.LinkedList; import java.util.LinkedList;
/** /**
* First Come First Serve Algorithm * Shortest Remaining Time
*/ */
public class FCFS { public class FCFS {
@ -55,7 +55,6 @@ public class FCFS {
{ {
waitingQueue.add(newProcesses.get(i)); waitingQueue.add(newProcesses.get(i));
} }
newProcesses.clear(); newProcesses.clear();
} }
@ -63,53 +62,85 @@ public class FCFS {
{ {
System.out.println("FCFS:"); System.out.println("FCFS:");
int processesFinished = 0; int processesFinished = 0;
boolean startNew = true; Process currentProcess;
//timeStep++; Process lastRunProcess = new Process("temp", 0, 0, 0); //temp process for comparing the first run
do do
{ {
if(startNew) checkForArrivals(); //Check for any new processes since timestep
{
timeStep = timeStep+disp;
startNew = false;
}
else
{
;
}
checkForArrivals();
//As long as there is something in the queue
if(waitingQueue.size()>0) if(waitingQueue.size()>0)
{ {
if(waitingQueue.getFirst().isDone()) currentProcess = findShortestProcess();
if(!lastRunProcess.getId().equals(currentProcess.getId()))
{ {
waitingQueue.removeFirst(); timeStep = timeStep+disp;
System.out.println("T"+timeStep+": "+currentProcess.getId());
for(int i = 0; i<waitingQueue.size(); i++)
{
waitingQueue.get(i).runForOneTick(false);
}
}
runProcessTick(currentProcess);
if(currentProcess.isDone())
{
waitingQueue.remove(currentProcess);
processesFinished++; processesFinished++;
startNew = true;
}
else
{
runProcessTick(waitingQueue.getFirst());
} }
lastRunProcess = currentProcess;
} }
}while(processesFinished!=processListFromFile.size()); }while(processesFinished!=processListFromFile.size());
} }
private Process findShortestProcess()
{
// int listPos = -1;
// int remaining = waitingQueue.getFirst().getRemainingTime();
// for(int i = 0; i<waitingQueue.size(); i++)
// {
// if(waitingQueue.get(i).getRemainingTime()<remaining)
// {
// listPos = i;
// remaining = waitingQueue.get(i).getRemainingTime();
// }
// }
// if(listPos==-1)
// {
// return waitingQueue.getFirst();
// }
// else
// {
return waitingQueue.getFirst();
}
private void runProcessTick(Process input) private void runProcessTick(Process input)
{ {
input.saveStartTime(timeStep);
timeStep++; timeStep++;
for(int i = 0; i< waitingQueue.size(); i++)
input.runForOneTick(true); {
if(!input.getId().equals(waitingQueue.get(i).getId()))
{
waitingQueue.get(i).runForOneTick(false);
}
else
{
waitingQueue.get(i).runForOneTick(true);
}
}
if(input.isDone()) if(input.isDone())
{ {
input.saveEndTime(timeStep); input.saveEndTime(timeStep);
input.saveTurnTime(); input.saveTurnTime();
input.saveWaitTime();
} }
} }
@ -117,7 +148,7 @@ public class FCFS {
{ {
for (int i = 0; i < processListFromFile.size(); i++) for (int i = 0; i < processListFromFile.size(); i++)
{ {
System.out.println("T"+processListFromFile.get(i).getStartTime()+": "+processListFromFile.get(i).getId()); //System.out.println("T"+processListFromFile.get(i).getStartTime()+": "+processListFromFile.get(i).getId());
} }
System.out.println("\nProcess \tTurnaround Time \tWaiting Time"); System.out.println("\nProcess \tTurnaround Time \tWaiting Time");

View File

@ -13,9 +13,6 @@ public class Process {
private int remainingTime; private int remainingTime;
public int hold = -1;
public int unhold = -1;
//Constructors //Constructors
public Process(){ public Process(){

View File

@ -69,11 +69,11 @@ public class SRT {
{ {
checkForArrivals(); //Check for any new processes since timestep checkForArrivals(); //Check for any new processes since timestep
currentProcess = findShortestProcess(); //get the shortest one out of that
//As long as there is something in the queue //As long as there is something in the queue
if(waitingQueue.size()>0) if(waitingQueue.size()>0)
{ {
currentProcess = findShortestProcess();
if(!lastRunProcess.getId().equals(currentProcess.getId())) if(!lastRunProcess.getId().equals(currentProcess.getId()))
{ {
timeStep = timeStep+disp; timeStep = timeStep+disp;
@ -86,7 +86,6 @@ public class SRT {
runProcessTick(currentProcess); runProcessTick(currentProcess);
//convert to all be process driven instead of index driven
if(currentProcess.isDone()) if(currentProcess.isDone())
{ {
waitingQueue.remove(currentProcess); waitingQueue.remove(currentProcess);
@ -101,10 +100,10 @@ public class SRT {
private Process findShortestProcess() private Process findShortestProcess()
{ {
int listPos = 0; int listPos = -1;
int remaining = waitingQueue.get(0).getRemainingTime(); int remaining = waitingQueue.getFirst().getRemainingTime();
for(int i = 1; i<waitingQueue.size(); i++) for(int i = 0; i<waitingQueue.size(); i++)
{ {
if(waitingQueue.get(i).getRemainingTime()<remaining) if(waitingQueue.get(i).getRemainingTime()<remaining)
{ {
@ -113,15 +112,19 @@ public class SRT {
} }
} }
if(listPos==-1)
{
return waitingQueue.getFirst();
}
else
{
return waitingQueue.get(listPos); return waitingQueue.get(listPos);
} }
}
private void runProcessTick(Process input) private void runProcessTick(Process input)
{ {
input.saveStartTime(timeStep); timeStep++;
for(int i = 0; i< waitingQueue.size(); i++) for(int i = 0; i< waitingQueue.size(); i++)
{ {
if(!input.getId().equals(waitingQueue.get(i).getId())) if(!input.getId().equals(waitingQueue.get(i).getId()))
@ -134,8 +137,6 @@ public class SRT {
} }
} }
timeStep++;
if(input.isDone()) if(input.isDone())
{ {
input.saveEndTime(timeStep); input.saveEndTime(timeStep);