Esempio n. 1
0
 public SchedulerBase(List<Process> p)
 {
     ProcessList = p;
     ReadyQueue = new Queue<Process>(p);
     ProcessesInIO = new List<Process>();
     processInCPU = new Process();
     CPUOrder = new List<Process>();
     timer = 0;
 }
Esempio n. 2
0
 public FCFS(ProcessList processList, StreamWriter output)
 {
     Ready_Queue = new Queue<Process>();
     foreach (Process item in processList.processes) {
         Ready_Queue.Enqueue (item);
     }
     IO_Queue = new Queue<Process>();
     RunningJob = new Process (-1,0,0,0,0);
     IO_Job = new Process (-1, 0, 0, 0,0);
     Final_List = new Queue<Process> ();
     //StreamWriter output = new StreamWriter ("../../output.txt");
     simulate (10, output);
 }
Esempio n. 3
0
        public Process clone()
        {
            Process temp = new Process();
            temp.pid = this.pid;
            temp.CPU_burst1 = this.CPU_burst1;
            temp.CPU_burst2 = this.CPU_burst2;
            temp.IO_burst = this.IO_burst;
            temp.priority = this.priority;
            temp.period = this.period;
            temp.activePeriod = this.period;

            return temp;
        }
Esempio n. 4
0
 public SJF(ProcessList processList, StreamWriter output)
 {
     Ready_Queue = new Queue<Process>();
     PreSortedList = processList.processes.ToList ();
     PreSortedList.Sort ((p,q) => (p.getCPU_burst1 ()+p.getCPU_burst2 ()).CompareTo ((q.getCPU_burst1 ()+q.getCPU_burst2 ())));
     foreach (Process item in PreSortedList) {
         Ready_Queue.Enqueue (item);
     }
     IO_Queue = new Queue<Process>();
     RunningJob = new Process (-1,0,0,0,0);
     IO_Job = new Process (-1, 0, 0, 0,0);
     Final_List = new List<Process> ();
     //StreamWriter output = new StreamWriter ("../../output.txt");
     simulate (10, output);
 }
Esempio n. 5
0
        public Priority(ProcessList processList, StreamWriter output)
        {
            PreSortedList = processList.processes.ToList ();
            PreSortedList.Sort ((p,q) => p.getPriority ().CompareTo (q.getPriority ()));
            Ready_Queue = new Queue<Process>();
            foreach (Process item in PreSortedList) {
                Ready_Queue.Enqueue (item);
            }
            Temp_Job = new Process (0,0,0,0,0);
            IO_Queue = new Queue<Process>();
            RunningJob = new Process (-1,0,0,0,0);
            IO_Job = new Process (-1, 0, 0, 0,0);
            Final_List = new List<Process> ();

            simulate (10, output);
        }
Esempio n. 6
0
        public override void simulate(int snapshot, StreamWriter pa)
        {
            // TODO Auto-generated method stub
            pa.WriteLine ("**************************************RR STARTED**************************");
            quantum	= RRprocessList.getQuantum();

            //add all processes to queue
            foreach (Process process in RRprocessList.processes) {
                ReadyQueue.Enqueue(process);
                //pa.WriteLine (process.getCPU_burst1 ());
            }

            //initialize currents
            currentProcess = ReadyQueue.Dequeue ();
            currentIO = new Process(-1,-1,-1,-1,-1);

            //main RR while loop
            while (ReadyQueue.Count > 0) {

                //quantum for loop
                for (int i = 0; i < quantum; i++) {

                    //cpu processing
                    //pa.WriteLine (currentProcess.getPID ());

                    foreach (Process p in ReadyQueue) {
                        p.period++;
                    }

                    if (currentProcess.getCPU_burst1 () > 0) {
                        currentProcess.decrementCPUBurst1 ();
                    } else if (currentProcess.getCPU_burst1 () == 0 && currentProcess.getIO_burst () > 0) {
                        IOQueue.Enqueue (currentProcess);
                        break;
                    } else if (currentProcess.getCPU_burst1 () == 0 && currentProcess.getIO_burst () == 0 && currentProcess.getCPU_burst2 () > 0) {
                        currentProcess.decrementCPUBurst2 ();
                    } else {
                        break;
                    }
                    currentProcess.activePeriod++;

                    //io processing
                    if (currentIO.getIO_burst () > 0) {
                        currentIO.decrementIO_burst ();
                    } else if (currentIO.getIO_burst () == 0) {
                        ReadyQueue.Enqueue (currentIO);
                        if (IOQueue.Count > 0) {
                            currentIO = IOQueue.Dequeue ();
                        } else {
                            currentIO = new Process (-1, -1, -1, -1, -1);
                        }
                    } else {
                        if (IOQueue.Count > 0) {
                            currentIO = IOQueue.Dequeue ();
                        }
                    }
                    //increment time
                    time++;

                    //POKEMON SNAP
                    if (time % snapshot == 0) {
                        pa.WriteLine ("Taking Snap at time: " + time);
                        this.snapshot (pa);
                    }
                }

                if (currentProcess.getCPU_burst1 () > 0 || (currentProcess.getCPU_burst2 () > 0 && currentProcess.getIO_burst () == 0)) {
                    ReadyQueue.Enqueue (currentProcess);
                } else if (currentProcess.getCPU_burst1 () == 0 && currentProcess.getIO_burst () > 0 && !IOQueue.Contains(currentProcess)){
                    IOQueue.Enqueue (currentProcess);
                    //pa.WriteLine ("into IO2:"+ currentProcess.getPID ());
                } else if(currentProcess.getCPU_burst1 () == 0 && currentProcess.getCPU_burst2() == 0 && currentProcess.getIO_burst() == 0){

                    currentProcess.activePeriod--;
                    Final_List.Add (currentProcess);
                }
                if (ReadyQueue.Count>0) currentProcess = ReadyQueue.Dequeue ();

            }
            Final_List.Add(currentProcess); foreach (Process item in Final_List) item.period--;	time += 10;
            finalReport (pa);
            pa.WriteLine ("**************************************RR ENDED**************************");
        }
Esempio n. 7
0
        public override void simulate(int snapshot, StreamWriter pa)
        {
            int i;
            List<Process> TempList = new List<Process> ();
            pa.WriteLine ("**************************************PRIORITY STARTED**************************");
            foreach (Process item in Ready_Queue) {
                item.period = 0;
                item.activePeriod = 0;
            }
            while ((Ready_Queue.Count != 0 || IO_Queue.Count != 0) || (RunningJob.getCPU_burst1 () > 0 || RunningJob.getCPU_burst2 () > 0)||(IO_Job.getIO_burst()>0)) {
                //Get the running job
                if (RunningJob.getPID () == -1) {
                    //OH GEEZ RICK, Were on the fist iteration
                    RunningJob = Ready_Queue.Dequeue ();
                }

                //RUNNING JOB LOGIC START
                if (RunningJob.getCPU_burst1 () == 1) {
                    IO_Queue.Enqueue (RunningJob);
                    if (Ready_Queue.Count != 0) {
                        RunningJob.activePeriod++;
                        RunningJob = Ready_Queue.Dequeue ();
                        RunningJob.period++;
                    }
                } else if (RunningJob.getCPU_burst1 () < 1) {
                    if (RunningJob.getCPU_burst2 () != 0) {
                        RunningJob.decrementCPUBurst2 ();
                        RunningJob.activePeriod++;
                    } else {
                        if (Ready_Queue.Count != 0) {
                            Final_List.Add (RunningJob);
                            RunningJob = Ready_Queue.Dequeue ();
                        }
                    }
                } else if (RunningJob.getCPU_burst1 () > 1) {
                    RunningJob.decrementCPUBurst1 ();
                    RunningJob.activePeriod++;
                }

                //RUNNING JOB LOGIC END

                //IO JOB LOGIC START
                if (IO_Job.getPID () == -1) {
                    if (IO_Queue.Count != 0) {
                        IO_Job = IO_Queue.Dequeue ();
                    }
                } else {
                    if (IO_Job.getIO_burst () <= 1) {
                        IO_Job.decrementCPUBurst1 ();
                        Ready_Queue.Enqueue (IO_Job);
                        if (IO_Queue.Count != 0) {
                            IO_Job = IO_Queue.Dequeue ();
                        } else {
                            IO_Job = new Process (-1, 0, 0, 0, 0);
                        }

                    } else {
                        IO_Job.decrementCPUBurst1 ();//Cuz F**K U
                        IO_Job.decrementIO_burst ();
                        //IO_Job.period++;
                    }
                }
                //IO JOB LOGIC END

                //Count waiting time
                foreach (Process item in Ready_Queue) {
                    if (item.getPID () <= time) {
                        item.period++;
                    }
                }
                foreach (Process item in IO_Queue) {
                    //item.period++;
                }
                //End waiting time count
                time++;

                //POKEMON SNAP
                if (time % snapshot == 0) {
                    pa.WriteLine ("Taking Snap at time: " + time);
                    this.snapshot (pa);
                }

                TempList.Clear ();
                PreSortedList.Clear ();
                foreach (Process item in Ready_Queue) {
                    PreSortedList.Add (item);
                    TempList.Add (item);
                }

                i = PreSortedList.Count - 1;
                foreach (Process item in PreSortedList) {
                    if ((item.getPriority () < RunningJob.getPriority ())  ) {
                        Temp_Job = RunningJob;
                        RunningJob = item;
                        TempList.Remove (item);
                        TempList.Add (Temp_Job);
                    }
                    i--;
                }
                PreSortedList.Clear ();
                foreach (Process item in TempList) {
                    PreSortedList.Add (item);
                }
                Ready_Queue.Clear ();
                PreSortedList.Sort ((p,q) => p.getPriority ().CompareTo (q.getPriority ()));
                foreach (Process item in PreSortedList) {
                    Ready_Queue.Enqueue (item);
                }

            }
            Final_List.Add (RunningJob); foreach (Process item in Final_List) item.period--;
            finalReport (pa);
            pa.WriteLine ("**************************************PRIORITYENDED**************************");
        }
Esempio n. 8
0
        public override void simulate(int snapshot, StreamWriter pa)
        {
            pa.WriteLine ("**************************************FCFS STARTED**************************");
            foreach (Process item in Ready_Queue) {
                item.period = 0;
                item.activePeriod = 0;
            }
            while ((Ready_Queue.Count != 0 || IO_Queue.Count != 0) || (RunningJob.getCPU_burst1 () > 0 || RunningJob.getCPU_burst2 () > 0)||(IO_Job.getIO_burst()>0)) {
                //Get the running job
                if (RunningJob.getPID () == -1) {
                    //OH GEEZ RICK, Were on the fist iteration
                    RunningJob = Ready_Queue.Dequeue ();
                }

                //RUNNING JOB LOGIC START
                if (RunningJob.getCPU_burst1 () == 1) {
                    IO_Queue.Enqueue (RunningJob);
                    if (Ready_Queue.Count != 0) {
                        RunningJob.activePeriod++;
                        RunningJob = Ready_Queue.Dequeue ();
                        RunningJob.period++;
                    }
                } else if (RunningJob.getCPU_burst1 () < 1) {
                    if (RunningJob.getCPU_burst2 () != 0) {
                        RunningJob.decrementCPUBurst2 ();
                        RunningJob.activePeriod++;
                    } else {
                        if (Ready_Queue.Count != 0) {
                            Final_List.Enqueue (RunningJob);
                            RunningJob = Ready_Queue.Dequeue ();
                        }
                    }
                } else if (RunningJob.getCPU_burst1 () > 1) {
                    RunningJob.decrementCPUBurst1 ();
                    RunningJob.activePeriod++;
                }

                //RUNNING JOB LOGIC END

                //IO JOB LOGIC START
                if (IO_Job.getPID () == -1) {
                    if (IO_Queue.Count != 0) {
                        IO_Job = IO_Queue.Dequeue ();
                    }
                } else {
                    if (IO_Job.getIO_burst () <= 1) {
                        IO_Job.decrementCPUBurst1 ();
                        Ready_Queue.Enqueue (IO_Job);
                        if (IO_Queue.Count != 0) {
                            IO_Job = IO_Queue.Dequeue ();
                        } else {
                            IO_Job = new Process (-1, 0, 0, 0, 0);
                        }

                    } else {
                        IO_Job.decrementCPUBurst1 ();//Cuz F**K U
                        IO_Job.decrementIO_burst ();
                        //IO_Job.period++;
                    }
                }
                //IO JOB LOGIC END

                //Count waiting time
                foreach (Process item in Ready_Queue) {
                    if (item.getPID () <= time) {
                        item.period++;
                    }
                }
                foreach (Process item in IO_Queue) {
                        //item.period++;
                }
                //End waiting time count
                time++;

                //POKEMON SNAP
                if (time % snapshot == 0) {
                    pa.WriteLine ("Taking Snap at time: " + time);
                    this.snapshot (pa);
                }
            }
            Final_List.Enqueue (RunningJob); foreach (Process item in Final_List) item.period--;
            finalReport (pa);
            pa.WriteLine ("**************************************FCFS ENDED**************************");
        }
Esempio n. 9
0
        public override void simulate(int snapshot, StreamWriter pa)
        {
            // TODO Auto-generated method stub
            pa.WriteLine("**************************************MFQ STARTED**************************");
            //quantum	= 1;//RRprocessList.getQuantum();

            //add all processes to queue
            foreach (Process process in RRprocessList.processes)
            {
                ReadyQueue1.Enqueue(process);
                //pa.WriteLine (process.getCPU_burst1 ());
            }

            //initialize currents
            ReadyQueue1.Enqueue(new Process(-1, -1, -1, -1, -1));//dummy value, will check for this later

            currentProcess = ReadyQueue1.Dequeue();
            currentIO = new Process(-1, -1, -1, -1, -1);

            //main RR while loop

            while (ReadyQueue1.Count > 0)
            {

                if (currentProcess.getPID() == -1)
                {
                    ReadyQueue2.Enqueue(currentProcess);
                    currentProcess = ReadyQueue2.Dequeue();
                    continue;
                }

                //quantum for loop
                for (int i = 0; i < (quantum = 3); i++)
                {
                    time++;
                    //cpu processing
                    //pa.WriteLine (currentProcess.getPID ());

                    foreach (Process p in ReadyQueue2)
                    {
                        p.period++;
                    }

                    if (currentProcess.getCPU_burst1() > 0)
                    {
                        currentProcess.decrementCPUBurst1();
                    }
                    else if (currentProcess.getCPU_burst1() == 0 && currentProcess.getIO_burst() > 0)
                    {
                        IOQueue.Enqueue(currentProcess);
                        break;
                    }
                    else if (currentProcess.getCPU_burst1() == 0 && currentProcess.getIO_burst() == 0 && currentProcess.getCPU_burst2() > 0)
                    {
                        currentProcess.decrementCPUBurst2();
                    }
                    else
                    {
                        break;
                    }
                    currentProcess.activePeriod++;

                    //io processing
                    if (currentIO.getIO_burst() > 0)
                    {
                        currentIO.decrementIO_burst();
                    }
                    else if (currentIO.getIO_burst() == 0)
                    {
                        ReadyQueue2.Enqueue(currentIO);
                        if (IOQueue.Count > 0)
                        {
                            currentIO = IOQueue.Dequeue();
                        }
                        else
                        {
                            currentIO = new Process(-1, -1, -1, -1, -1);
                        }
                    }
                    else
                    {
                        if (IOQueue.Count > 0)
                        {
                            currentIO = IOQueue.Dequeue();
                        }
                    }
                    //increment time

                    //POKEMON SNAP
                    if (time % snapshot == 0)
                    {
                        pa.WriteLine("Taking Snap at time: " + time);
                        ReadyQueue = ReadyQueue1;
                        this.snapshot(pa);
                        pa.WriteLine("queue2");
                        ReadyQueue = ReadyQueue2;
                        this.snapshot(pa);
                    }
                }

                if (currentProcess.getCPU_burst1() > 0 || (currentProcess.getCPU_burst2() > 0 && currentProcess.getIO_burst() == 0))
                {
                    ReadyQueue2.Enqueue(currentProcess);
                }
                else if (currentProcess.getCPU_burst1() == 0 && currentProcess.getIO_burst() > 0 && !IOQueue.Contains(currentProcess))
                {
                    IOQueue.Enqueue(currentProcess);
                }
                else if (currentProcess.getCPU_burst1() == 0 && currentProcess.getCPU_burst2() == 0 && currentProcess.getIO_burst() == 0)
                {
                    currentProcess.activePeriod-=2;
                    Final_List.Add(currentProcess);
                }
                if (ReadyQueue1.Count > 0) currentProcess = ReadyQueue1.Dequeue();

            }

            /////////////////////////////////////////////////////////////////////////////////
            ////////start of queue 2/////////////////////////////////////////////////////////
            /////////////////////////////////////////////////////////////////////////////////
            if (ReadyQueue2.Count > 0) currentProcess = ReadyQueue2.Dequeue();
            while (ReadyQueue2.Count > 0)
            {
                time++;
                if (currentProcess.getPID() == -1)
                {
                    ReadyQueue3.Enqueue(currentProcess);
                    currentProcess = ReadyQueue3.Dequeue();
                    break;
                }

                //quantum for loop
                for (int i = 0; i < (quantum = 8); i++)
                {

                    //cpu processing
                    //pa.WriteLine (currentProcess.getPID ());

                    foreach (Process p in ReadyQueue2)
                    {
                        p.period++;
                    }

                    if (currentProcess.getCPU_burst1() > 0)
                    {
                        currentProcess.decrementCPUBurst1();
                    }
                    else if (currentProcess.getCPU_burst1() == 0 && currentProcess.getIO_burst() > 0)
                    {
                        IOQueue.Enqueue(currentProcess);
                        //pa.WriteLine ("into IO:"+ currentProcess.getPID ());
                        break;
                    }
                    else if (currentProcess.getCPU_burst1() == 0 && currentProcess.getIO_burst() == 0 && currentProcess.getCPU_burst2() > 0)
                    {
                        currentProcess.decrementCPUBurst2();
                    }
                    else
                    {
                        //Final_List.Enqueue (currentProcess);
                        break;
                    }
                    currentProcess.activePeriod++;

                    //io processing
                    if (currentIO.getIO_burst() > 0)
                    {
                        currentIO.decrementIO_burst();
                    }
                    else if (currentIO.getIO_burst() == 0)
                    {
                        ReadyQueue3.Enqueue(currentIO);
                        if (IOQueue.Count > 0)
                        {
                            currentIO = IOQueue.Dequeue();
                        }
                        else
                        {
                            currentIO = new Process(-1, -1, -1, -1, -1);
                        }
                    }
                    else
                    {
                        if (IOQueue.Count > 0)
                        {
                            currentIO = IOQueue.Dequeue();
                        }
                    }
                    //increment time

                    //POKEMON SNAP
                    if (time % snapshot == 0)
                    {
                        pa.WriteLine("Taking Snap at time: " + time);
                        ReadyQueue = ReadyQueue1;
                        this.snapshot(pa);
                    }
                }

                if (currentProcess.getCPU_burst1() > 0 || (currentProcess.getCPU_burst2() > 0 && currentProcess.getIO_burst() == 0))
                {
                    ReadyQueue3.Enqueue(currentProcess);
                }
                else if (currentProcess.getCPU_burst1() == 0 && currentProcess.getIO_burst() > 0 && !IOQueue.Contains(currentProcess))
                {
                    IOQueue.Enqueue(currentProcess);
                    //pa.WriteLine ("into IO2:"+ currentProcess.getPID ());
                }
                else if (currentProcess.getCPU_burst1() == 0 && currentProcess.getCPU_burst2() == 0 && currentProcess.getIO_burst() == 0)
                {
                    currentProcess.activePeriod-=2;
                    Final_List.Add(currentProcess);
                }
                if (ReadyQueue2.Count > 0) currentProcess = ReadyQueue2.Dequeue();

            }
            /////////////////////////////////////////////////////////////////////////////////
            ////////start of queue 3/////////////////////////////////////////////////////////
            /////////////////////////////////////////////////////////////////////////////////
            while ((ReadyQueue3.Count != 0 || IOQueue.Count != 0) || (currentProcess.getCPU_burst1() > 0 || currentProcess.getCPU_burst2() > 0) || (currentIO.getIO_burst() > 0))
            {
                time++;
                //Get the running job
                if (currentProcess.getPID() == -1)
                {
                    //OH GEEZ RICK, Were on the fist iteration
                    currentProcess = ReadyQueue3.Dequeue();
                }

                //RUNNING JOB LOGIC START
                if (currentProcess.getCPU_burst1() == 1)
                {
                    IOQueue.Enqueue(currentProcess);
                    if (ReadyQueue3.Count != 0)
                    {
                        currentProcess.activePeriod++;
                        currentProcess = ReadyQueue3.Dequeue();
                        currentProcess.period++;
                    }
                }
                else if (currentProcess.getCPU_burst1() < 1)
                {
                    if (currentProcess.getCPU_burst2() != 0)
                    {
                        currentProcess.decrementCPUBurst2();
                        currentProcess.activePeriod++;
                    }
                    else
                    {
                        if (ReadyQueue3.Count != 0)
                        {
                            Final_List.Add(currentProcess);
                            currentProcess = ReadyQueue3.Dequeue();
                        }
                    }
                }
                else if (currentProcess.getCPU_burst1() > 1)
                {
                    currentProcess.decrementCPUBurst1();
                    currentProcess.activePeriod++;
                }

                //RUNNING JOB LOGIC END

                //IO JOB LOGIC START
                if (currentIO.getPID() == -1)
                {
                    if (IOQueue.Count != 0)
                    {
                        currentIO = IOQueue.Dequeue();
                    }
                }
                else
                {
                    if (currentIO.getIO_burst() <= 1)
                    {
                        currentIO.decrementCPUBurst1();
                        ReadyQueue3.Enqueue(currentIO);
                        if (IOQueue.Count != 0)
                        {
                            currentIO = IOQueue.Dequeue();
                        }
                        else
                        {
                            currentIO = new Process(-1, 0, 0, 0, 0);
                        }

                    }
                    else
                    {
                        currentIO.decrementCPUBurst1();//Cuz F**K U
                        currentIO.decrementIO_burst();
                        //currentIO.period++;
                    }
                }
                //IO JOB LOGIC END

                //Count waiting time
                foreach (Process item in ReadyQueue3)
                {
                    if (item.getPID() <= time)
                    {
                        item.period++;
                    }
                }
                foreach (Process item in IOQueue)
                {
                    //item.period++;
                }
                //End waiting time count

                //POKEMON SNAP
                if (time % snapshot == 0)
                {
                    pa.WriteLine("Taking Snap at time: " + time);
                    ReadyQueue = ReadyQueue3;
                    this.snapshot(pa);
                }

            }
            Final_List.Add(currentProcess);
            foreach (Process item in Final_List) { item.period--; item.activePeriod--; }
            finalReport(pa);
            pa.WriteLine("**************************************MFQ ENDED**************************");
        }