我试图用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开始。
然后:
查找到达时间最小(最近)的进程您将找到共享到达时间的所有进程。但是,如果存在到达时间小于等于cc>的任何进程,则选择所有进程在这种情况下,哪个到达时间最早并不重要,因为任何到达时间小于等于cc>的进程都必须等待处理器变得可用。
无论选择哪一组进程,都要找到突发时间最小的进程。
安排这个过程。进程将在到达时间或nextAvailableTime开始将突发时间添加到开始时间,这将是新的nextAvailableTime
在您的小例子中,这将是一种工作方式:
有一个到达时间为1的进程,没有其他进程同时到达,所以您可以安排它这意味着下一个可用的时间是10点。
由于处理器将在时间10时可用,现在将有两个进程等待,到达时间为5和8。选择突发时间最小的一个,p2。这将在时间10+1=11结束,这将是下一个可用的时间。
现在只剩下一个过程了,P3它的到达时间是5点,所以它将等待。安排一下。
注意:我的第一个回答是建立一个“事件队列”,它是一个列表,按时间顺序排列,模拟器需要知道的事件在这种情况下,事件将是进程到达和进程完成这个问题的解决方案比你需要的要复杂得多。但这是一个更普遍的解决方案。如果您开始添加更多的因素,例如多个进程或一些具有紧急优先级的进程必须尽快安排,那么我概述的简单解决方案可能不够好。

10-02 01:15