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;
/**
* First Come First Serve Algorithm
* Shortest Remaining Time
*/
public class FCFS {
@ -55,7 +55,6 @@ public class FCFS {
{
waitingQueue.add(newProcesses.get(i));
}
newProcesses.clear();
}
@ -63,53 +62,85 @@ public class FCFS {
{
System.out.println("FCFS:");
int processesFinished = 0;
boolean startNew = true;
//timeStep++;
Process currentProcess;
Process lastRunProcess = new Process("temp", 0, 0, 0); //temp process for comparing the first run
do
{
if(startNew)
{
timeStep = timeStep+disp;
startNew = false;
}
else
{
;
}
checkForArrivals();
checkForArrivals(); //Check for any new processes since timestep
//As long as there is something in the queue
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++;
startNew = true;
}
else
{
runProcessTick(waitingQueue.getFirst());
}
lastRunProcess = currentProcess;
}
}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)
{
input.saveStartTime(timeStep);
timeStep++;
input.runForOneTick(true);
for(int i = 0; i< waitingQueue.size(); i++)
{
if(!input.getId().equals(waitingQueue.get(i).getId()))
{
waitingQueue.get(i).runForOneTick(false);
}
else
{
waitingQueue.get(i).runForOneTick(true);
}
}
if(input.isDone())
{
input.saveEndTime(timeStep);
input.saveTurnTime();
input.saveWaitTime();
}
}
@ -117,7 +148,7 @@ public class FCFS {
{
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");

View File

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

View File

@ -69,11 +69,11 @@ public class SRT {
{
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
if(waitingQueue.size()>0)
{
currentProcess = findShortestProcess();
if(!lastRunProcess.getId().equals(currentProcess.getId()))
{
timeStep = timeStep+disp;
@ -86,7 +86,6 @@ public class SRT {
runProcessTick(currentProcess);
//convert to all be process driven instead of index driven
if(currentProcess.isDone())
{
waitingQueue.remove(currentProcess);
@ -101,10 +100,10 @@ public class SRT {
private Process findShortestProcess()
{
int listPos = 0;
int remaining = waitingQueue.get(0).getRemainingTime();
int listPos = -1;
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)
{
@ -113,15 +112,19 @@ public class SRT {
}
}
if(listPos==-1)
{
return waitingQueue.getFirst();
}
else
{
return waitingQueue.get(listPos);
}
}
private void runProcessTick(Process input)
{
input.saveStartTime(timeStep);
timeStep++;
for(int i = 0; i< waitingQueue.size(); i++)
{
if(!input.getId().equals(waitingQueue.get(i).getId()))
@ -134,8 +137,6 @@ public class SRT {
}
}
timeStep++;
if(input.isDone())
{
input.saveEndTime(timeStep);