public static double GetProdU() { int noNodes = 0; int noStreams = 0; PDQ pdq = new PDQ(); pdq.Init(""); noStreams = pdq.CreateClosed("Production", Job.TERM, 20.0, 20.0); noNodes = pdq.CreateNode("CPU", Node.CEN, QDiscipline.FCFS); noNodes = pdq.CreateNode("DK1", Node.CEN, QDiscipline.FCFS); noNodes = pdq.CreateNode("DK2", Node.CEN, QDiscipline.FCFS); pdq.SetDemand("CPU", "Production", 0.30); pdq.SetDemand("DK1", "Production", 0.08); pdq.SetDemand("DK2", "Production", 0.10); pdq.Solve(Methods.APPROX); return (pdq.GetUtilization("CPU", "Production", Job.TERM)); }
public static void main(String[] args) { Parameters p = new Parameters(); int noNodes = 0; int noStreams = 0; double Ucpu_prod = 0.0; boolean PRIORITY = true; // Turn priority on or off here String noPri = "CPU Scheduler - No Pri"; String priOn = "CPU Scheduler - Pri On"; // ---------------------------------------------------------------------------- if (PRIORITY) { Ucpu_prod = GetProdU(); } // ---------------------------------------------------------------------------- PDQ pdq = new PDQ(); pdq.Init(PRIORITY ? priOn : noPri); // ---- Workloads // ------------------------------------------------------------- noStreams = pdq.CreateClosed("Production", Job.TERM, 20.0, 20.0); noStreams = pdq.CreateClosed("Developmnt", Job.TERM, 15.0, 15.0); // ---- Nodes // ----------------------------------------------------------------- noNodes = pdq.CreateNode("CPU", Node.CEN, QDiscipline.FCFS); if (PRIORITY) { noNodes = pdq.CreateNode("shadCPU", Node.CEN, QDiscipline.FCFS); } noNodes = pdq.CreateNode("DK1", Node.CEN, QDiscipline.FCFS); noNodes = pdq.CreateNode("DK2", Node.CEN, QDiscipline.FCFS); // ---- Service demands at each node // ------------------------------------------ pdq.SetDemand("CPU", "Production", 0.30); if (PRIORITY) { pdq.SetDemand("shadCPU", "Developmnt", 1.00 / (1 - Ucpu_prod)); } else { pdq.SetDemand("CPU", "Developmnt", 1.00); } pdq.SetDemand("DK1", "Production", 0.08); pdq.SetDemand("DK1", "Developmnt", 0.05); pdq.SetDemand("DK2", "Production", 0.10); pdq.SetDemand("DK2", "Developmnt", 0.06); // ---- We use APPROX rather than EXACT to match the numbers in the book // ------ pdq.Solve(Methods.APPROX); pdq.Report(); } // main