我知道我需要一个整数来记录已经过去了多少时间
我将从三个值开始 - 经过时间、当前进程和下一个进程。您的调度循环可能如下所示。为简单起见,我已将选择下一个进程的逻辑置于独立函数中:
time = 0;
currentProcess = deque.end();
while(some processes remaining)
{
nextProcess = getNextProcess(time, currentProcess, deque);
if(nextProcess->arrivalTime > time)
{
// nothing to do now
// advance time by smaller of quota or nextProcess->arrivalTime
} else {
// at least one process has work ready
if(currentProcess != nextProcess)
{
// preemt currentProcess
// start nextProcess
// advance time by the smaller of quota or nextProcess->burstTime
// reduce nextProcess->burstTime by the time advanced
} else {
// continue with current process for quota or its remaining burstTime
// reduce its burstTime
}
}
currentProcess = nextProcess;
}
实施getNextProcess
取决于您的优先标准,幼稚的方法可能如下所示:
- 你
deque
从 position 开始currentProcess + 1
。当你到达终点时,从头开始。
- 注意最小
arrivalTime
大于的过程time
。让我们称之为closestCandidate
- 如果您使用 and 找到合适的流程
arrivalTime <= time
,请burstTime > 0
返回该流程
- 如果您
currentProcess
再次点击,请决定哪个更好处理currentProcess
并closestCandidate
返回。
最后要做的一件事是有效地实现循环条件。我会把它留给你弄清楚。
注意:我不确定deque
这里是否是最好的容器,我可能会forward_list
在它们完成时使用和删除进程。您也可以在双端队列中执行此操作,但那是 O(n) 操作。