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; }
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 } }
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);