// CPUScheduler.h Dave Reed 2/5/05 /////////////////////////////////////////////////////////////////////////////// #ifndef _CPU_SCHEDULER_ #define _CPU_SCHEDULER_ #include #include #include "Job.h" #include "Die.h" using namespace std; class CPUScheduler { public: CPUScheduler(int delay, int slice, int min, int max); int getTime() const; bool jobsRemaining() const; // RETURNS TRUE IF JOBS IN EITHER QUEUE void addNewJob(Job newJob); // ADDS NEW JOB TO READY QUEUE void execute(); // EXECUTES CURRENT JOB, UPDATES QUEUES private: class PriorityJob : Job // HIDDEN CLASS FOR PRIORITY QUEUE OF JOBS { public: PriorityJob(Job j, int pri) : Job(j) { priority = pri; } int getPriority() const { return priority; } bool operator<(const PriorityJob & j) const { return priority > j.priority; } private: int priority; }; queue readyQueue; // JOBS READY TO EXECUTE priority_queue waitQueue; // JOBS WAITING ON I/O int loadDelay, timeSlice, IOmin, IOmax; // SIMULATION PARAMETERS int currentTime; // CURRENT TIME IN SIMULATION int sliceTimeRemaining, loadTimeRemaining; // TIME REMAINING IN JOB SLICE, LOADING Die randomizer; // RANDOM # GENERATOR (FOR I/O DELAYS) int getIOLength(); // PRIVATE FUNCTION FOR I/O LENGTH }; #endif