public static void cpuidle(MLFQ_Queue queue1)//Handles CPU Idle incrementing Processes in I/O Burst counters { if (processesinio.Count != 0) { int n = 0; while (processesinio.ElementAt(n).iocounter < processesinio.ElementAt(n).ioburst) { cpu_idle++; totaltime++; processesinio.ElementAt(n).iocounter++; if (n == processesinio.Count - 1) { n = 0; } else { n++; } } queue1.Enqueue(processesinio.ElementAt(n)); processesinio.RemoveAt(n); } }
static void Main(string[] args) { Process p1 = new Process("P1", new List <int> { 4, 24, 5, 73, 3, 31, 5, 27, 4, 33, 6, 43, 4, 64, 5, 19, 2 }); Process p2 = new Process("P2", new List <int> { 18, 31, 19, 35, 11, 42, 18, 43, 19, 47, 18, 43, 17, 51, 19, 32, 10 }); Process p3 = new Process("P3", new List <int> { 6, 18, 4, 21, 7, 19, 4, 16, 5, 29, 7, 21, 8, 22, 6, 24, 5 }); Process p4 = new Process("P4", new List <int> { 17, 42, 19, 55, 20, 54, 17, 52, 15, 67, 12, 72, 15, 66, 14 }); Process p5 = new Process("P5", new List <int> { 5, 81, 4, 82, 5, 71, 3, 61, 5, 62, 4, 51, 3, 77, 4, 61, 3, 42, 5 }); Process p6 = new Process("P6", new List <int> { 10, 35, 12, 41, 14, 33, 11, 32, 15, 41, 13, 29, 11 }); Process p7 = new Process("P7", new List <int> { 21, 51, 23, 53, 24, 61, 22, 31, 21, 43, 20 }); Process p8 = new Process("P8", new List <int> { 11, 52, 14, 42, 15, 31, 17, 21, 16, 43, 12, 31, 13, 32, 15 }); MLFQ_Queue queue1 = new MLFQ_Queue(1); MLFQ_Queue queue2 = new MLFQ_Queue(2); MLFQ_Queue queue3 = new MLFQ_Queue(3); //Initialize queue references to each other and set lower priority queue references queue1.queue1 = queue1; queue1.queue2 = queue2; queue1.queue3 = queue3; queue1.lowerpriority = queue2; queue2.queue1 = queue1; queue2.queue2 = queue2; queue2.queue3 = queue3; queue2.lowerpriority = queue3; queue3.queue1 = queue1; queue3.queue2 = queue2; queue3.queue3 = queue3; queue3.lowerpriority = null; //Add all processes to queue1 queue1.Enqueue(p1); queue1.Enqueue(p2); queue1.Enqueue(p3); queue1.Enqueue(p4); queue1.Enqueue(p5); queue1.Enqueue(p6); queue1.Enqueue(p7); queue1.Enqueue(p8); processesinio = new List <Process>(); bool finished = false; while (finished == false) { executequeue1(queue1); //Execute the Processes in queue1 using Round Robin with TQ 6 executequeue2(queue2); //Execute the Processes in queue2 using Round Robin with TQ 11 executequeue3(queue3); //Execute the Processes in queue3 using FCFS if (queue1.Count == 0 && queue2.Count == 0 && queue3.Count == 0 && numprocesscomplete != 8 && processesinio.Count != 0) //Execute if CPU is idle { cpuidle(queue1); } if (queue1.Count == 0 && queue2.Count == 0 && queue3.Count == 0 && numprocesscomplete != 8 && processesinio.Count == 0)//Condition if all processes have completed { printresults(p1, p2, p3, p4, p5, p6, p7, p8); finished = true; } } }