Example #1
0
        static void FCFS_Sched(List <Process> p, int nprocess)
        {
            FCFStime.Add(0);
            List <Process> FCFS = new List <Process>();

            for (int i = 0; i < nprocess; i++)
            {
                FCFS.Add(p[i]);
            }
            ArrivalCompare a = new ArrivalCompare();

            FCFS.Sort(a);
            int    time = 0;
            double wait = 0;

            while (FCFS.Count() != 0)
            {
                wait += time - FCFS[0].arrival;
                time += FCFS[0].burst;
                FCFSnames.Add(FCFS[0].name);
                FCFStime.Add(time);
                FCFS.RemoveAt(0);
            }
            FCFSavgwait = wait / nprocess;
        }
Example #2
0
            public static void RR_sched(List <Process> pro, int nprocess, int quantum)//add arrival time check
            {
                RRnames.Clear();
                RRtime.Clear();
                RRtime.Add(0);
                double         wait = 0;
                List <Process> RR   = new List <Process>();
                List <Process> p    = new List <Process>();

                foreach (Process x in pro)
                {
                    p.Add(x);
                    wait -= x.arrival;
                    wait -= x.burst;
                }
                ArrivalCompare a = new ArrivalCompare();

                p.Sort(a);
                int burstTime, proTime = 0 /*mish 3ayzeen n5aleeha b 0 3ashan mmkn yeb2a awel arrival mish b 0*/;

                int j = 0;

                while (p.Count() != 0 && j < p.Count() && p[j].arrival == proTime)
                {
                    RR.Insert(0, (p[j]));
                    p.RemoveAt(j);
                    j++;
                }

                while (RR.Count() != 0 || p.Count() != 0)
                {
                    int k = 0;
                    while (p.Count() != 0 && k < p.Count() && p[k].arrival <= proTime)
                    {
                        RR.Insert(0, (p[k]));
                        p.RemoveAt(k);
                        k++;
                    }
                    if (RR.Count() == 0 && p[k].arrival > proTime)
                    {
                        proTime++;
                        RRtime.Add(proTime);
                        RRnames.Add("No Process");
                    }
                    if (RR.Count() != 0 && RR[0].burst > quantum)
                    {
                        burstTime  = RR[0].burst;
                        burstTime -= quantum;
                        //wait += quantum * (RR.Count() - 1);
                        proTime += quantum;
                        int x = 0;
                        while (p.Count() != 0 && x < p.Count() && p[x].arrival <= proTime)
                        {
                            RR.Add(p[x]);
                            p.RemoveAt(x);
                            x++;
                        }
                        Process processnext = new Process();
                        processnext.name  = RR[0].name;
                        processnext.burst = burstTime;
                        RRnames.Add(RR[0].name);
                        RRtime.Add(proTime);
                        RR.RemoveAt(0);
                        RR.Add(processnext);
                    }
                    else if (RR.Count() != 0 && RR[0].burst == quantum)
                    {
                        proTime += quantum;
                        RRnames.Add(RR[0].name);
                        wait += proTime;
                        RRtime.Add(proTime);
                        RR.RemoveAt(0);
                    }
                    else if (RR.Count() != 0 && RR[0].burst < quantum)
                    {
                        burstTime = RR[0].burst;
                        proTime  += burstTime;
                        RRnames.Add(RR[0].name);
                        RRtime.Add(proTime);
                        RR.RemoveAt(0);
                        wait += proTime;
                    }
                }
                RRavgwait = wait / nprocess;
            }
Example #3
0
        static void RR_sched(List <Process> pro, int nprocess, int quantum)//add arrival time check
        {
            RRtime.Add(0);
            Queue <Process> RR = new Queue <Process>();
            List <Process>  p  = new List <Process>();

            foreach (Process x in pro)
            {
                p.Add(x);
            }
            ArrivalCompare a = new ArrivalCompare();

            p.Sort(a);
            int    burstTime, proTime = 0;
            double wait = 0;

            foreach (Process z in p)
            {
                wait -= z.arrival;
            }
            int j = 0;

            while (p.Count() != 0 && p[j].arrival == proTime && j < p.Count())
            {
                RR.Enqueue(p[j]);
                p.RemoveAt(j);
                j++;
            }

            while (RR.Count() != 0)
            {
                int k = 0;
                while (p.Count() != 0 && k < p.Count() && p[k].arrival <= proTime)
                {
                    RR.Enqueue(p[k]);
                    p.RemoveAt(k);
                    k++;
                }
                if (RR.Peek().burst > quantum)
                {
                    burstTime  = RR.Peek().burst;
                    burstTime -= quantum;
                    wait      += quantum * ((RR.Count() - 1) + p.Count());
                    proTime   += quantum;
                    int x = 0;
                    while (p.Count() != 0 && x < p.Count() && p[x].arrival <= proTime)
                    {
                        RR.Enqueue(p[x]);
                        p.RemoveAt(x);
                        x++;
                    }
                    Process processnext = new Process();
                    processnext.name  = RR.Peek().name;
                    processnext.burst = burstTime;
                    RRnames.Add(RR.Peek().name);
                    RRtime.Add(proTime);
                    RR.Dequeue();
                    RR.Enqueue(processnext);
                }
                else if (RR.Peek().burst == quantum)
                {
                    wait    += quantum * ((RR.Count() - 1) + p.Count());
                    proTime += quantum;
                    RRnames.Add(RR.Peek().name);
                    RRtime.Add(proTime);
                    RR.Dequeue();
                }
                else if (RR.Peek().burst < quantum)
                {
                    proTime += RR.Peek().burst;
                    wait    += RR.Peek().burst *((RR.Count() - 1) + p.Count());
                    RRnames.Add(RR.Peek().name);
                    RRtime.Add(proTime);
                    RR.Dequeue();
                }
            }
            RRavgwait = wait / nprocess;
        }