public void Rescheduling() { if (Action == true) { if (!squeue.Empty()) { Process rOneProcess = squeue.Item(); sresourse.ActiveProcess = null; sresourse.ActiveProcess = rOneProcess; squeue.Remove(); Action = false; sqtTermProc++; } else { sresourse.ActiveProcess = null; } } if (sresourse.ActiveProcess != null && sqtTermProc != 0) { midWaitTime = (midWaitTime + sresourse.ActiveProcess.WaitTime) / sqtTermProc; //значение ожидания после завершения midRoundTime = (midRoundTime + sresourse.ActiveProcess.RoundTime) / sqtTermProc; } if (!squeue.Empty()) { if (sresourse.ActiveProcess == null) { Process rrOneProcess = squeue.Item(); sresourse.ActiveProcess = rrOneProcess; squeue.Remove(); } } }
public void Rescheduling() { if (scpu.Free()) { Process proc = sPriorQ.Item(); sPriorQ.Remove(); proc.Status = processStatus.runningSt; scpu.ActiveProcess = proc; } if (!sPriorQ.Empty() && !scpu.Free()) { if (scpu.ActiveProcess.WorkTime == scpu.ActiveProcess.BurstTime) { scpu.ActiveProcess.resourseNeed = srng.Next(0,2); if (scpu.ActiveProcess.resourseNeed == 1) { scpu.ActiveProcess.Status = processStatus.waitingSt; sresourse.Put(scpu.ActiveProcess); scpu.ActiveProcess.WorkTime = 0; Process proc = sPriorQ.Item(); sPriorQ.Remove(); proc.Status = processStatus.runningSt; scpu.ActiveProcess = proc; } else { scpu.ActiveProcess.Status = processStatus.terminatedSt; Process proc = sPriorQ.Item(); sPriorQ.Remove(); scpu.ActiveProcess = proc; } } else // вытеснение { if (!sPriorQ.Empty() && !scpu.Free()) { Process proc = sPriorQ.Item(); if (proc.BurstTime.CompareTo(scpu.ActiveProcess.BurstTime) < 0 && (proc.BurstTime.CompareTo(scpu.ActiveProcess.BurstTime)!=0)) { sPriorQ.Remove(); proc.Status = processStatus.runningSt; scpu.ActiveProcess.Status = processStatus.readySt; sPriorQ.Put(scpu.ActiveProcess); scpu.ActiveProcess = proc; } } } } }