Ejemplo n.º 1
0
        public override Process Step(MultiLevelFeedbackQueueScheduler sender)
        {
            if (currentProcess != null)
            {
                if (currentProcess.remainingBurstTime <= 0)
                {
                    currentProcess.endStep = sender.step;
                    finishedProcesses.Add(currentProcess);

                    if (processQueue.Count == 0)
                    {
                        currentProcess = null;
                        if (finishedProcesses.Count == allProcesses.Count)
                        {
                            isEnded = true;
                        }
                    }
                    else
                    {
                        currentProcess = processQueue.Dequeue();
                    }
                }
                if (currentProcess != null)
                {
                    currentProcess.remainingBurstTime -= 1;
                }
            }
            return(currentProcess);
        }
 public StepResponse(Process _process, bool _isMLFQ, MultiLevelFeedbackQueueScheduler _sender, bool _isPageDemanded, bool _isEnded)
 {
     process        = _process;
     isMLFQ         = _isMLFQ;
     sender         = _sender;
     isPageDemanded = _isPageDemanded;
     isEnded        = _isEnded;
 }
Ejemplo n.º 3
0
        public override Process Step(MultiLevelFeedbackQueueScheduler sender)
        {
            processesToRemove = new List <Process>();
            foreach (Process process in sender.unStartedProcesses)
            {
                if (process.arrivalTime == sender.step)
                {
                    sender.queues[0].processQueue.Enqueue(process);

                    processesToRemove.Add(process);
                }
            }
            foreach (var process in processesToRemove)
            {
                sender.unStartedProcesses.Remove(process);
            }

            if (currentProcess != null)
            {
                if (currentProcess.remainingBurstTime <= 0)
                {
                    currentProcess.endStep = sender.step;
                    sender.finishedProcesses.Add(currentProcess);
                    currentProcess = null;
                    foreach (var sch in sender.queues)
                    {
                        if (sch.processQueue.Count > 0)
                        {
                            sender.currentQueue = sch;
                        }
                    }
                    if (processQueue.Count == 0)
                    {
                        currentProcess = null;
                        if (finishedProcesses.Count == allProcesses.Count)
                        {
                            isEnded = true;
                        }
                        return(null);
                    }
                    else
                    {
                        currentProcess = processQueue.Dequeue();
                    }
                    duration = 0;
                }

                else if (duration >= quantum)
                {
                    processQueue.Enqueue(currentProcess);
                    currentProcess = processQueue.Dequeue();
                    duration       = 0;
                }
                currentProcess.remainingBurstTime -= 1;
                duration++;
            }
            return(currentProcess);
        }
        private void buttonSetMLFQ_Click(object sender, EventArgs e)
        {
            AddMLFQForm pop = new AddMLFQForm();

            if (pop.ShowDialog() == DialogResult.OK)
            {
                string name = "MLFQ-" + pop.queues[0].name + "-" + pop.queues[1].name + "-" + pop.queues[2].name;
                List <MultiLevelableScheduler> list = new List <MultiLevelableScheduler>();
                listBoxMLFQ.Items.Clear();
                for (int i = 0; i < 3; i++)
                {
                    list.Add(pop.queues[i]);
                    listBoxMLFQ.Items.Add(pop.queues[i].name);
                }
                Scheduler tempScheduler = new MultiLevelFeedbackQueueScheduler(name, list, FIFO, LRU);
                simulationManager.schedulers.Clear();
                simulationManager.schedulers.Add(tempScheduler);
            }
            else
            {
                //do nothing
            }
        }
Ejemplo n.º 5
0
        private void schedulersDataGrid_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            if (e.ColumnIndex == 0)
            {
                if (e.RowIndex == schedulersDataGrid.Rows.Count - 1)
                {
                    AddSchedulerForm pop = new AddSchedulerForm();
                    if (pop.ShowDialog() == DialogResult.OK)
                    {
                        if (pop.scheduler == schedulerTypes.RoundRobbin)
                        {
                            string    name          = "RR(Q:" + pop.value + ")";
                            Scheduler tempScheduler = new RoundRobinScheduler(name, pop.value, new List <Process>(), pop.color);
                            simulationManager.schedulers.Add(tempScheduler);
                            int tempIndex = schedulersDataGrid.Rows.Add("x", name, string.Empty, tempScheduler);
                            schedulersDataGrid[2, tempIndex].Style.BackColor =
                                schedulersDataGrid[2, tempIndex].Style.SelectionBackColor = pop.color;
                        }
                        else if (pop.scheduler == schedulerTypes.FirstComeFirstServe)
                        {
                            string    name          = "FCFS";
                            Scheduler tempScheduler = new FirstComeFirstServeScheduler(name, new List <Process>(), pop.color);
                            simulationManager.schedulers.Add(tempScheduler);
                            int tempIndex = schedulersDataGrid.Rows.Add("x", name, string.Empty, tempScheduler);
                            schedulersDataGrid[2, tempIndex].Style.BackColor =
                                schedulersDataGrid[2, tempIndex].Style.SelectionBackColor = pop.color;
                        }
                        else if (pop.scheduler == schedulerTypes.HightstResponseRatioNext)
                        {
                            string    name          = "HRRN";
                            Scheduler tempScheduler = new HighestResponseRatioNextScheduler(name, new List <Process>(), pop.color);
                            simulationManager.schedulers.Add(tempScheduler);
                            int tempIndex = schedulersDataGrid.Rows.Add("x", name, string.Empty, tempScheduler);
                            schedulersDataGrid[2, tempIndex].Style.BackColor =
                                schedulersDataGrid[2, tempIndex].Style.SelectionBackColor = pop.color;
                        }
                        else if (pop.scheduler == schedulerTypes.EarliestDeadlineFirst)
                        {
                            string    name          = "EDF(D=x" + pop.value + ")";
                            Scheduler tempScheduler = new EarliestDeadlineFirstScheduler(name, new List <Process>(), pop.color, pop.value);
                            simulationManager.schedulers.Add(tempScheduler);
                            int tempIndex = schedulersDataGrid.Rows.Add("x", name, string.Empty, tempScheduler);
                            schedulersDataGrid[2, tempIndex].Style.BackColor =
                                schedulersDataGrid[2, tempIndex].Style.SelectionBackColor = pop.color;
                        }
                        else if (pop.scheduler == schedulerTypes.ShortestJobFirst)
                        {
                            string    name          = "SJF";
                            Scheduler tempScheduler = new EarliestDeadlineFirstScheduler(name, new List <Process>(), pop.color);
                            simulationManager.schedulers.Add(tempScheduler);
                            int tempIndex = schedulersDataGrid.Rows.Add("x", name, string.Empty, tempScheduler);
                            schedulersDataGrid[2, tempIndex].Style.BackColor =
                                schedulersDataGrid[2, tempIndex].Style.SelectionBackColor = pop.color;
                        }
                        else if (pop.scheduler == schedulerTypes.MultilevelFeedbackQueue)
                        {
                            string name = "MLFQ-" + pop.sch[0].name + "-" + pop.sch[1].name + "-" + pop.sch[2].name;
                            List <MultiLevelableScheduler> list = new List <MultiLevelableScheduler>();
                            for (int i = 0; i < 3; i++)
                            {
                                list.Add(pop.sch[i]);
                            }
                            Scheduler tempScheduler = new MultiLevelFeedbackQueueScheduler(name, pop.color, list);
                            simulationManager.schedulers.Add(tempScheduler);
                            int tempIndex = schedulersDataGrid.Rows.Add("x", name, string.Empty, tempScheduler);
                            schedulersDataGrid[2, tempIndex].Style.BackColor =
                                schedulersDataGrid[2, tempIndex].Style.SelectionBackColor = pop.color;
                        }
                    }
                }
                else
                {
                    simulationManager.schedulers.RemoveAt(e.RowIndex);
                    schedulersDataGrid.Rows.RemoveAt(e.RowIndex);
                }

                refreshStepDataGrid();
            }
            else if (e.ColumnIndex == 1 && e.RowIndex < schedulersDataGrid.Rows.Count - 1)
            {
                AddSchedulerForm pop = new AddSchedulerForm();
                if (pop.ShowDialog() == DialogResult.OK)
                {
                    if (pop.scheduler == schedulerTypes.RoundRobbin)
                    {
                        string    name = "RR(Q:" + pop.value + ")";
                        Scheduler previousScheduler = simulationManager.schedulers[e.RowIndex];
                        Scheduler tempScheduler     = new RoundRobinScheduler(name, pop.value, null, previousScheduler.graphColor);
                        simulationManager.schedulers[e.RowIndex]           = tempScheduler;
                        schedulersDataGrid.Rows[e.RowIndex].Cells[1].Value = name;
                    }
                    else if (pop.scheduler == schedulerTypes.EarliestDeadlineFirst)
                    {
                        string    name = "EDF(D=x" + pop.value + ")";
                        Scheduler previousScheduler = simulationManager.schedulers[e.RowIndex];
                        Scheduler tempScheduler     = new EarliestDeadlineFirstScheduler(name, null, previousScheduler.graphColor, pop.value);
                        simulationManager.schedulers[e.RowIndex]           = tempScheduler;
                        schedulersDataGrid.Rows[e.RowIndex].Cells[1].Value = name;
                    }
                }

                refreshStepDataGrid();
            }
            else if (e.ColumnIndex == 2 && e.RowIndex < schedulersDataGrid.Rows.Count - 1)
            {
                if (colorDialog1.ShowDialog() == DialogResult.OK)
                {
                    simulationManager.schedulers[e.RowIndex].graphColor            = colorDialog1.Color;
                    schedulersDataGrid[2, e.RowIndex].Style.BackColor              =
                        schedulersDataGrid[2, e.RowIndex].Style.SelectionBackColor = colorDialog1.Color;
                }
            }
        }
 public StepResponse(Process _process, bool _isMLFQ, MultiLevelFeedbackQueueScheduler _sender)
 {
     process = _process;
     isMLFQ  = _isMLFQ;
     sender  = _sender;
 }
 public abstract Process Step(MultiLevelFeedbackQueueScheduler sender);