【问题标题】:Processes Scheduling by shortest job first (SJF)按最短作业优先的流程调度 (SJF)
【发布时间】:2017-04-18 16:03:45
【问题描述】:

我正在尝试用 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 ******

【问题讨论】:

    标签: java algorithm operating-system


    【解决方案1】:

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

    然后:

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

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

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

    这在你的小例子中的工作方式:

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

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

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

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

    【讨论】:

    • 很好的解决方案。非常感谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-13
    • 2019-09-03
    • 2012-11-22
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-22
    相关资源
    最近更新 更多