gpt4 book ai didi

java - 按最短作业优先 (SJF) 的流程调度

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:16:02 24 4
gpt4 key购买 nike

我正在尝试用 Java 编写一个 CPU 调度模拟器。这些进程按顺序处理,使得突发时间(处理时间)最少的进程应首先处理。在开始之前,我在指定名称、突发时间和到达时间的 ArrayList 中输入所有进程。如果所有进程同时进入,代码在逻辑上工作正常。

问题是进程有不同的到达时间。我如何编辑代码以考虑此到达时间。

我只需要编辑代码部分,使我的流程具有最少的突发时间(相对于到达时间)

public Process removeSJ(){  // removes & returns the process with the min. burst time
int minBurstTime = processes.get(0).getBurstTime(); // processes is ArrayList of Processe objects
int minIndex = 0;
for (int i=1 ; i<processes.size(); i++){
int curBurstTime = processes.get(i).getBurstTime();
if ( (curBurstTime < minBurstTime)){
minBurstTime = curBurstTime;
minIndex = i;
}
}
numberOfProcesses--;
return (processes.remove(minIndex));}

示例输出

The processor schedules process : P2
arrival time = 8 , burst time = 1 , waiting Time = 0
Turnaround time = 1
The processor schedules process : P3
arrival time = 5 , burst time = 3 , waiting Time = 1
Turnaround time = 4
The processor schedules process : P1
arrival time = 1 , burst time = 9 , waiting Time = 4
Turnaround time = 13
****** Average Turnaround Time = 6 ******

最佳答案

您不仅需要搜索最小的突发时间,还需要搜索最近的可用时间。为此,您必须跟踪“处理器下次可用时间”nextAvailableTime。由于处理器在您启动时是空闲的,因此您可以从 nextAvailableTime = 0 开始。

然后:

  1. 寻找到达时间最短(最近)的进程。您会发现共享该到达时间的所有进程。 但是如果有到达时间<= nextAvailableTime的进程,则全部选择。在这种情况下,哪个到达时间最早并不重要,因为任何到达时间 <= nextAvailableTime 的进程都必须等待处理器可用。

  2. 无论您选择哪一组进程,请找出突发时间最短的进程。

  3. 安排该过程。该过程将在其到达时间或 nextAvailableTime 开始。将突发时间添加到开始时间,这将是新的 nextAvailableTime

这在您的小示例中的工作方式:

  1. 有一个进程的到达时间为 1,并且没有其他进程同时到达,因此您可以安排它。这意味着下一个可用时间将是 10 点。

  2. 由于处理器将在时间 10 可用,因此现在将有两个进程在等待,到达时间分别为 5 和 8。选择突发时间最短的进程 P2。这将在时间 10 + 1 = 11 完成,这将是下一个可用时间。

  3. 现在只剩下一个进程,P3。它的到达时间是 5,所以它会等待。安排它。

注意:我的第一个回答涉及设置一个“事件队列”,这是一个按时间排序的列表,其中包含模拟器需要注意的事件。在这种情况下,事件将是流程到达和流程完成。这个解决方案比您解决此问题所需的要复杂一些。但这是一个更通用的解决方案。如果您开始添加更多因素,例如多个进程或某些必须尽快安排的具有紧急优先级的进程,我概述的简单解决方案可能不够好。

关于java - 按最短作业优先 (SJF) 的流程调度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40954317/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com