示例#1
0
        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);
            }
        }
示例#2
0
        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;
                }
            }
        }