Class Scheduler

java.lang.Object
  |
  +--Scheduler
Direct Known Subclasses:
DiskScheduler, RRScheduler

abstract class Scheduler
extends java.lang.Object

A Scheduler schedules jobs seeking service from a Device. The class Scheduler itself is "abstract", meaning that there are no instance of Scheduler, only of its subclasses. This simulation has two Schedulers: DiskScheduler for scheduling the disk and RRScheduler for scheduling the CPU. The base class takes care of maintaining statistics on queue lengths. The subclasses do all the actual work.

See Also:
DiskScheduler, RRScheduler

Field Summary
private  int lastChanged
          The last time the queue length changed
private  int lenSum
          The time integral of queue length
private  int maxLen
          The maximum queue length
private static int MAXQUEUE
          The max queue length we tally in the histogram
private  int qlen
          The current queue length
private  int[] queueHist
          The amount of time the queue had a given length
 
Constructor Summary
(package private) Scheduler()
           
 
Method Summary
abstract  boolean add(Job j)
          Add a new job wanting service.
abstract  void printQueue()
          For debugging: print the queue of waiting jobs
 void printStats()
          Print statistics about the history of this queue.
protected  void queueChanged(int amount)
          This method should be called by a subclass whenever the queue length changes.
abstract  Job remove()
          Retrieve (and remove) the next job to be served.
abstract  boolean reschedule(Job j)
          This method is called when there is a clock interrupt, and just after a job changes state.
 
Methods inherited from class java.lang.Object
, clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
 

Field Detail

MAXQUEUE

private static final int MAXQUEUE
The max queue length we tally in the histogram

qlen

private int qlen
The current queue length

lastChanged

private int lastChanged
The last time the queue length changed

maxLen

private int maxLen
The maximum queue length

lenSum

private int lenSum
The time integral of queue length

queueHist

private int[] queueHist
The amount of time the queue had a given length
Constructor Detail

Scheduler

Scheduler()
Method Detail

add

public abstract boolean add(Job j)
Add a new job wanting service.
Parameters:
j - the job to serve
Returns:
true if this scheduler would like to preempt the current job.

remove

public abstract Job remove()
Retrieve (and remove) the next job to be served.
Returns:
the next job (null if there is no such job).

reschedule

public abstract boolean reschedule(Job j)
This method is called when there is a clock interrupt, and just after a job changes state.
Parameters:
j - the job currently being serviced by the corresponding device.
Returns:
true if the scheduler wants to preempt the current job.

printQueue

public abstract void printQueue()
For debugging: print the queue of waiting jobs

queueChanged

protected void queueChanged(int amount)
This method should be called by a subclass whenever the queue length changes.

printStats

public void printStats()
Print statistics about the history of this queue.