当前位置: 首页 > 知识库问答 >
问题:

按最短作业优先 (SJF) 进行流程调度

晋涛
2023-03-14

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

共有1个答案

狄宾实
2023-03-14

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

然后:

>

  • 寻找到达时间最小(最近)的进程。您将找到共享该到达时间的所有进程。但是如果有任何进程有到达时间

    无论选择哪一组进程,都要找到突发时间最小的进程。

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

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

    >

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

    由于处理器将在时间10变得可用,现在将有两个进程等待,到达时间为5和8。选择突发时间最小的一个,P2。这将在时间10 1=11结束,这将是下一个可用时间。

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

    注意:我的第一个回答是建立一个“事件队列”,这是一个按时间排序的列表,列出了模拟器需要知道的事件。在这种情况下,事件将是流程到达和流程完成。这个解决方案比你解决这个问题所需的要复杂一点。但这是一个更通用的解决方案。如果您开始添加更多的因素,比如多个进程或一些具有紧急优先级的进程,必须尽快进行调度,那么我概述的简单解决方案可能不够好。

  •  类似资料:
    • 到目前为止,我们根据它们的到达时间(在FCFS调度中)调度这些进程。 但是,SJF调度算法根据其突发时间安排进程。 在SJF调度中,就绪队列中可用进程列表中的突发时间最短的进程将在下一个进行调度。 然而,预测一个过程所需的突发时间是非常困难的,因此这个算法在系统中很难实现。 SJF的优势 最大吞吐量 最低的平均等候时间和周转时间 SJF的缺点 可能会面临饥饿问题 这是不可实现的,因为一个进程的确切

    • 假设以下进程在指定的时间到达执行。每个进程将运行列出的时间量。 我想绘制甘特图并计算抢占式最短作业优先调度的平均等待时间。 解决办法 http://imgur.com/fP8u61C 等待时间为2毫秒。 请告诉我这是否正确。 我怀疑的步骤是,在进程B到达的3ms时,调度程序是完成进程A还是启动进程B。

    • 我熟悉最短进程下一个调度算法(SJF),它是一种非抢先算法。但是,该算法一次只能处理一个突发时间最小的进程。是否可以一次修改为“下一个最短流程2”? 所以对于这里提到的例子: 第一行表示进程总数。随后的行表示进程ID、到达时间、突发时间。 一次有两个流程的SJF计划将按如下方式工作: 这里 Idle表示当前有多少处理器空闲。在这种情况下,有2个处理器。可以观察到,在时间< code>t=4,有2个

    • 我已经创建了一个C程序来模拟非抢占式最短作业优先算法,但它在某些输入上有缺陷。最短作业优先算法程序接受所需数量的过程的到达和突发时间的输入,并将过程安排在两个阶段中。第一阶段涉及根据到达时间来安排节目,第二阶段根据突发时间来安排节目,假设它们的到达时间低于前一过程完成的时间。这一切最终都会被编译并显示出来。 这些是预期的结果: 这些是我通过我的程序获得的结果: 任何帮助都将不胜感激。谢谢!

    • 假设我有两个进程等待使用抢先最短作业优先(SJF)执行。 在 Time = 2 时,两个进程的突发时间相同,即 3。SJF 排序会运行进程 2,因为它具有更高的初始突发时间,还是会运行进程,因为它们的突发时间当前相同? 谢谢:)

    • 所以我正在研究调度,包括FCFS和最短作业优先。我首先真的在纠结我最短的工作,我看不到我的逻辑错误。我把它打印出来,有些数字是正确的,但不是全部。我使用的测试文件包含以下文本: 我使用 任何帮助,指针或代码,将不胜感激! 编辑我认为我的问题是基于sfj函数的逻辑。对于输入,第一列是进程id,第二列是到达时间,第三列是突发时间或进程需要cpu多长时间。 我得到的输出是: 当我真正期望时: