/// <summary> /// A very unfortunately named function. Handles the logic for the demo. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Button_Click_1(object sender, RoutedEventArgs e) { //FCFS Instantiation ProcessQueue fcfsQueue = new FCFS(); this.PopulateDemoQueue(fcfsQueue); ContextSwitchManager csmFCFS = new ContextSwitchManager(); Grid fcfsparent = this.tabfcfs; Thread threadfcfs = new Thread(() => RunQueue(fcfsQueue, csmFCFS)); //SJF Instantiation ProcessQueue sjfQueue = new SJF(); this.PopulateDemoQueue(sjfQueue); ContextSwitchManager csmSJF = new ContextSwitchManager(); Grid sjfparent = this.tabsjf; Thread threadsjf = new Thread(() => RunQueue(sjfQueue, csmSJF)); //MLFQ Instantiation MultiLevelQueue mlfqQueue = new MLFQ(); ProcessQueue mlfqRR6 = new RR(6); this.PopulateDemoQueue(mlfqRR6); ProcessQueue mlfqRR11 = new RR(11); ProcessQueue mlfqFCFS = new FCFS(); mlfqQueue.AddProcessQueue(mlfqRR6); mlfqQueue.AddProcessQueue(mlfqRR11); mlfqQueue.AddProcessQueue(mlfqFCFS); ContextSwitchManager csmMLFQ = new ContextSwitchManager(); Grid mlfqparent = this.tabmlfq; Thread threadmlfq = new Thread(() => RunQueue(mlfqQueue, csmMLFQ)); //Spawn off the threads. threadfcfs.Start(); threadsjf.Start(); threadmlfq.Start(); //Join back up with the threads. threadfcfs.Join(); threadsjf.Join(); threadmlfq.Join(); this.PopulateResults(fcfsQueue, csmFCFS, fcfsparent); this.PopulateResults(sjfQueue, csmSJF, sjfparent); this.PopulateResults(mlfqQueue, csmMLFQ, mlfqparent); this.GenerateTextFile("fcfsFall2013.txt", csmFCFS); this.GenerateTextFile("sjfFall2013.txt", csmSJF); this.GenerateTextFile("mlfqFall2013.txt", csmMLFQ); }
/// <summary> /// USE THIS FOR TESTING. It will prepare all of the times for you. All you have to input is commented. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Button_Click_1(object sender, RoutedEventArgs e) { //CHANGE THE BELOW LINE TO TEST YOUR QUEUE. //EXAMPLE: //ProcessQueue testqueue = new FCFS(); //Becomes... //ProcessQueue testqueue = new SJF(); //etc ProcessQueue testqueue = new FCFS(); #region Process Instantiation. int[][] time = new int[8][]; time[0] = new int[] { 4, 24, 5, 73, 3, 31, 5, 27, 4, 33, 6, 43, 4, 64, 5, 19, 2 }; time[1] = new int[] { 18, 31, 19, 35, 11, 42, 18, 43, 19, 47, 18, 43, 17, 51, 19, 32, 10 }; time[2] = new int[] { 6, 18, 4, 21, 7, 19, 4, 16, 5, 29, 7, 21, 8, 22, 6, 24, 5 }; time[3] = new int[] { 17, 42, 19, 55, 20, 54, 17, 52, 15, 67, 12, 72, 15, 66, 14 }; time[4] = new int[] { 5, 81, 4, 82, 5, 71, 3, 61, 5, 62, 4, 51, 3, 77, 4, 61, 3, 42, 5 }; time[5] = new int[] { 10, 35, 12, 41, 14, 33, 11, 32, 15, 41, 13, 29, 11 }; time[6] = new int[] { 21, 51, 23, 53, 24, 61, 22, 31, 21, 43, 20 }; time[7] = new int[] { 11, 52, 14, 42, 15, 31, 17, 21, 16, 43, 12, 31, 13, 32, 15 }; int pnum = 1; for (int i = 0; i < time.Count(); i++) { List<ExecutionTimeUnit> t = new List<ExecutionTimeUnit>(); for (int j = 0; j < time[i].Count(); j++) { ExecutionTimeType type; if (j % 2 == 0) type = ExecutionTimeType.BURST; else type = ExecutionTimeType.IO; t.Add(new ExecutionTimeUnit(time[i][j], type)); } ExecutionTime et = new ExecutionTime(t); Process proc = new Process(et); proc.Name = "P" + pnum.ToString(); testqueue.AddProcess(proc); pnum++; } while (testqueue.State != QueueState.COMPLETE) testqueue.Run(); #endregion #region Display crap for debugging //Datatable to display results. DataTable dt = new DataTable(); dt.Columns.Add("Process"); dt.Columns.Add("WT"); dt.Columns.Add("TT"); dt.Columns.Add("RT"); testqueue.CompleteProcs.Sort((x, y) => x.Name.CompareTo(y.Name)); foreach (Process p in testqueue.CompleteProcs) { dt.Rows.Add(p.Name, p.WaitingTime, p.TurnaroundTime, p.ResponseTime); } double avgWaitingTime = 0; double avgTurnaroundTime = 0; double avgResponseTime = 0; foreach (Process p in testqueue.CompleteProcs) { avgWaitingTime += p.WaitingTime; avgTurnaroundTime += p.TurnaroundTime; avgResponseTime += p.ResponseTime; } avgWaitingTime /= testqueue.CompleteProcs.Count; avgTurnaroundTime /= testqueue.CompleteProcs.Count; avgResponseTime /= testqueue.CompleteProcs.Count; dt.Rows.Add("Avg", avgWaitingTime, avgTurnaroundTime, avgResponseTime); gridResults.ItemsSource = dt.DefaultView; gridResults.HorizontalGridLinesBrush = gridResults.VerticalGridLinesBrush = new SolidColorBrush(Colors.LightGray); this.lblUtilization.Content = "CPU Utilization: " + Decimal.Round((testqueue.CPUUtil * 100), 2) + "%"; #endregion //Debug breakpoint sp object r = new Object(); }