Class RoundRobinScheduler

java.lang.Object
cambio.simulator.resources.cpu.scheduling.CPUProcessScheduler
cambio.simulator.resources.cpu.scheduling.RoundRobinScheduler

public final class RoundRobinScheduler extends CPUProcessScheduler
Self adjusting Round-Robin (SARR) scheduler with dynamic median-based quantum calculation.

Algorithm developed by Ram Matarneh: Self-Adjustment Time Quantum in Round Robin Algorithm Depending on Burst Time of the Now Running Processes

Executes a round-robin scheduling where the assigned work quantum is the median of all current left over work demands of all entered processes. The quantum is updated each time a new processes enters or all processes had a round with the current quantum. This provides a shorter average waiting and turn-around time than the fixed quantum round-robin. Further, this round-robin scheduler adjust dynamically to demand sizes that can heavily vary between experiments/architecture descriptions.

Keeps processes in order (first come first serve). And ensures fairness.

Author:
Lion Wagner
See Also:
  • Constructor Details

    • RoundRobinScheduler

      public RoundRobinScheduler(String name)
  • Method Details

    • enterProcess

      public void enterProcess(CPUProcess process)
      Enters the process into the scheduling queue.
      Specified by:
      enterProcess in class CPUProcessScheduler
      Parameters:
      process - Process that is to be scheduled
      See Also:
    • retrieveNextProcess

      public org.javatuples.Pair<CPUProcess,Integer> retrieveNextProcess()
      Pulls the next Process to handle and its assigned time/work quantum.
      Specified by:
      retrieveNextProcess in class CPUProcessScheduler
      Returns:
      a pair containing the next process to handle and its assigned time/work quantum.
      See Also:
    • retrieveNextProcessNoReschedule

      public org.javatuples.Pair<CPUProcess,Integer> retrieveNextProcessNoReschedule()
      Interface used by Multi Level Feedback queues.

      Does not put the process back into the Queue.

      Specified by:
      retrieveNextProcessNoReschedule in class CPUProcessScheduler
      Returns:
      a pair containing the next process to handle and its assigned time quantum.
      See Also:
    • hasProcessesToSchedule

      public boolean hasProcessesToSchedule()
      Checks whether this scheduler currently has processes ready to be retrieved from scheduling.
      Specified by:
      hasProcessesToSchedule in class CPUProcessScheduler
      Returns:
      true if there is a process ready to schedule, false otherwise
    • getTotalWorkDemand

      public int getTotalWorkDemand()
      Calculates the sum of all scheduled process's demand remainders.
      Specified by:
      getTotalWorkDemand in class CPUProcessScheduler
      Returns:
      the sum of the demand remainder of all processes that are currently in queue.
    • clear

      public void clear()
      Clears all current processes from the scheduler.
      Specified by:
      clear in class CPUProcessScheduler
    • size

      public int size()
      Counts the amount of processes that are currently scheduled.
      Specified by:
      size in class CPUProcessScheduler
      Returns:
      the amount of processes that are currently scheduled.