FCFS,SJN,SRT,Round Robin的调度顺序(时间线)

时间:2017-11-15 08:08:16

标签: algorithm operating-system scheduler round-robin

我从我的朋友那里得到了这个问题,他是操作系统领域的新手。

我们得到了:

工作号码1
到达时间= 0,CPU周期= 80,

工作号码2
到达时间= 22,CPU周期= 60,

工作号码3
到达时间= 44,CPU周期= 24,

职位编号4 到达时间= 55,CPU周期= 40。

如何执行FCFS,SJN,SRT,Round Robin的调度顺序(使用20的时间量)。

谢谢。如果你能给我任何想法......

1 个答案:

答案 0 :(得分:0)

FCFS:代表先到先得意味着首先执行的工作必须首先执行才能以这种方式完成工作。

作业编号1然后是作业编号2,然后是作业编号3,然后是作业编号4.

当新进程进入时,它不会停止执行。缺点是短进程必须等待更长的进程才能完成,因为假设更短的进程结束,那么它必须等待队列中的所有长进程结束。

最短作业 这不能用于短期调度程序。我将在最后解释原因

您的下一个算法 SRT 基于此算法。在这里,我们在订单中获得工作,如果新工作很短,我们就不会在cpu中工作。然而,他们的进程到达时间是不同的,所以它将首先执行job1然后job2然后job3然后job4。可能你认为job3更短,它应该切换cpu但只有在你被允许抢占这个过程时才会发生,如果是这样的话那么它不是 SJB 而是<强> SRT

但是如果你在时间0有两个进程,长度/突发= 80和40那么它将选择突发为40的进程。

仅适用于长期调度程序此算法不适用于短期调度程序,因为您需要知道下一个进程的长度/突发需要花费时间,或者您还可以尝试近似时间,有一个复杂的公式,但总是不起作用。

SRT:代表最短的剩余时间: premptive 算法/最短作业版本。

  • 第一个作业:到达时间0和CPU周期80
  • 第二个作业:到达时间22和CPU周期60
  • 第3个工作:到达时间44和CPU周期24
  • 4rth job:到达时间55和CPU周期40

在时间0,您拥有的唯一进程是F1(意味着第一个作业),在22毫秒后将新进程放入队列中,以便调度程序计算它的长度并执行第一个作业22毫秒现在,它的剩余时间是80-22 = 58,新进程的长度是60,大于58,因此调度程序不会切换到新进程。在44毫秒后,第三个作业进入,因此您有80-44 = 36,第三个作业所需的时间仅为24,因此调度程序将该进程的所有结果放在堆栈上并将CPU分配给第三个作业/进程。

55秒后,另一个进程被放置在队列中,长度为40,但第三个进程仍然短路,因此第一个作业是进程3,将在第一个作业完成。

  • 作业1运行44秒:此时剩余时间= 36,作业 3 获得处理器。

  • 作业3运行24秒:完成。

    此时我们的作业1为36毫秒,作业2为60毫秒,作业4为40秒。因此,调度程序再次将CPU分配给作业1,因为它是最短的,一旦完成,则分配给作业4,然后分配给作业2.

缺点:抢占太多也需要时间。

Round-Robin:先到先得类似,唯一的区别是它为每个进程分配相等的时间(意味着允许抢占,而fcfs不会允许)。在这里你使用几毫秒的时间量。

有两种可能性:要么进程完成它的爆发,那么进程会自动释放CPU,如果不是时间量超过调度程序,则CPU将远离此进程并将其分配给下一个进程。

如果队列中有N个进程,则每个进程将以最多q个时间单位的块为单位获得1 / n cpu时间。

  • Job1获取CPU 20毫秒,因为队列中没有其他进程,所以这个job1再次获得cpu接下来的20秒。
  • 由于第一个作业此次执行了2 * 20,因此队列中有一个新进程(job2),因此该进程将使CPU获得20秒。当job2正在执行时,队列中还有另外两个进程。(job3和job4)。 现在job3获取CPU 20秒,然后job4获得CPU 20 m。 第一个周期后:
  • Job1执行了2 * 20;剩余时间= 40

  • job2执行了20次;剩余时间= 40

  • job3已执行20;剩余时间= 4
  • job4已执行20;剩余时间= 20。

第二个周期后:   - Job1执行了40-20;剩余时间= 20

  • job2执行了40-20;剩余时间= 20
  • job3执行了4-4;剩余时间=完成/仅执行4秒。
  • job4执行了20-20;剩余时间= 0 /完成。

第三个周期后:   - Job1执行了20 - 20;剩余时间= 0

  • job2执行了20-20;剩余时间= 0

该算法的性能取决于时间量子的大小。如果你的时间量很小,那么过多的抢占/上下文切换(将堆栈移动进程并将cpu分配给新进程)也不好,如果时间量太大,那么它也不好并试着去思考为什么? :d