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

最短作业优先(非抢占)-同时对突发时间和到达时间进行排序

卞琨
2023-03-14

我有一个问题,如何同时对到达时间和突发时间进行排序。我的代码首先检查较低的突发时间,然后检查到达时间。

最短作业优先(非抢占式)CPU调度检查进程突发时间,如果< code >进程具有最短的突发时间和到达时间,则执行该进程。

下面是我对数组进行排序的代码片段:

inputs.sort((a1, a2) => (a1.burst < a2.burst) ? 1 : (a1.burst < a2.burst) ? 1 : -1);

下面是上面代码片段的结果:

如果排序公式正确,这应该是输出:

参考:最短作业优先 (SJF)

共有1个答案

东明德
2023-03-14

这似乎需要迭代来确定进程的顺序,因为正在“执行”的当前进程的结束时间用于确定考虑下一个执行的可用进程。也就是说,在您的示例中,P1到达时间为0,结束时间间隔为5。因此,在时间间隔5之前到达的所有未完成的进程现在是要执行的候选进程。接下来执行具有最小突发时间的候选者,到达时间是平局决胜。(注意,这个平局决胜法只是假设数组是按到达时间排序的。)

js prettyprint-override">let process = [
  { Process: 'P1', ArrivalTime: 0, BurstTime: 5 },
  { Process: 'P2', ArrivalTime: 1, BurstTime: 3 },
  { Process: 'P3', ArrivalTime: 2, BurstTime: 8 },
  { Process: 'P4', ArrivalTime: 2, BurstTime: 6 },
  { Process: 'P5', ArrivalTime: 3, BurstTime: 3 },
  { Process: 'P6', ArrivalTime: 15, BurstTime: 2 },
];

// Get the first ArrivalTime.
let time = Math.min( ...process.map( p => p.ArrivalTime ) );

while ( process.find( p => p.Finished == null ) ) {

  // Now, "execute" the process in which the BurstTime is the least
  // amoung the processes which haven't finished and have an ArrivalTime
  // less than or equal to the current time...
  let execute = process.reduce( ( ni, p, i ) => {
    if ( p.Finished == null && p.ArrivalTime <= time && (ni === -1 || p.BurstTime < process[ ni ].BurstTime ) ) {
      ni = i;
    }
    return ni;
  }, -1 );
  
  // Capture the start time...
  process[ execute ].Started = time;
  // ...and then calculate the finish time.
  time += process[ execute ].BurstTime;
  process[ execute ].Finished = time;

}

// For ease of viewing, sort by Started.
process.sort( ( a, b ) => a.Started - b.Started );

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

  • 最短作业优先算法如下图所示: 如果首先是最短的作业/其次是最短的流程,那么顺序不应该是:P1 → P5 → P3 → P4 → P2吗?因为这是服务时间从低到高的顺序。< br >为什么进程2排在第二位? 我知道如果我们改用突发时间,那将是顺序,但我不知道服务时间和突发时间有什么区别。 任何有助于解释该图形的帮助都将不胜感激。

  • 我的目标是计算抢占最短作业优先调度算法的平均等待时间。 假设作业的到达时间以2个单位为间隔,如0,2,4,6……即,第一个作业以0个单位进入,第二个作业在2个单位的时间后进入,以此类推。 我为我的程序测试了 3 个测试用例并得到了正确答案: 测试用例1: 作业:8,4,9,5 平均时间:6.5 测试用例2: 作业:7,4,1,4 平均时间:3 但是当我把一个有1000个作业的文件作为输入时,我得到

  • 亲爱的AnyLogic社区, 我是AnyLogic的新手,希望你们能帮助我! 我有一个简单的流程模型,由多个源、队列、抢占、延迟、释放和接收器(流程模型)组成。我建模的系统是一个服务器容量问题。我有不同的服务时间和有限的服务器容量的代理,我感兴趣的KPI是在资源池耗尽时没有得到适当服务的客户的数量。目前,我允许客户在使用所有资源时在队列块超时,但这并不能准确地表示系统在实际生活中的表现。 在现实中

  • 给定下表,用于计算基于优先级的抢占式调度的流程和平均等待时间。 甘特图如下: 我有以下问题: 1) 周转时间是否 = 19 个单位? 2)如何计算平均等待时间?有公式吗? 3)如果很少有进程具有相同的优先级,该怎么办? 我是操作系统的新手。我看过其他一些类似的问题,但我不知道该怎么做。

  • 我正在尝试在 java 中模拟 CPU 调度算法并使用多线程。我已经成功地实施了FCFS(先到先得)和SJF(最短的工作优先)。但问题是当我开始想到SRTF(最短剩余时间优先)时,它是SJF的一种先发制人的形式。我正在使用以下模型: CPU的线程,它有一个变量,它每保持滴答声(一个简单的时钟增量)。我有一个标志,用于在开始执行之前检查CPU是否可用。 长期调度程序(LTS)的线程,它将进程从进程列