📌  相关文章
📜  多级队列调度 (MLQ) 和最短作业优先之间的区别(1)

📅  最后修改于: 2023-12-03 15:23:43.433000             🧑  作者: Mango

多级队列调度 (MLQ) 和最短作业优先之间的区别

介绍

多级队列调度和最短作业优先都是操作系统中常用的调度算法。它们的大致思想相似,都是基于优先级或长度的排序来进行进程调度。然而,在细节实现上,它们还是有一些不同的。

多级队列调度

多级队列调度 (MLQ) 通常将就绪队列划分为多个队列,每个队列有不同的优先级。在多级队列调度中,新到达的进程总是进入最高优先级的队列,等待进程运行或被阻塞。运行的进程如果用尽了时间片或阻塞了,在队列中的优先级会降低一级,等待下一次调度。如果一个进程在低优先级队列中等待了很长时间,它的优先级也会逐渐提高,到达某个级别后,它将被移到高优先级队列中。

MLQ 的优点是允许更加公平地分配 CPU 时间到不同的进程之间。同时,它允许把不同类型的进程分组到不同的队列中,使得特定类型的进程能够更快地得到响应。例如,一些实时进程可以放在高优先级队列中,而后台进程可以被放在低优先级队列中。

最短作业优先

最短作业优先 (SJF) 是一种根据进程执行时间来决定调度顺序的算法。在 SJF 中,所有就绪队列中所有进程都按照执行时间升序排列。当一个进程抵达并就绪时,它会马上开始执行直到完成。这种算法需要知道每个进程的预期执行时间。

SJF 的优点是可以最小化进程平均等待时间,因为它总是优先执行执行时间最短的进程。但是,实际上很难准确预估每个进程的执行时间,而且在一个就绪队列中,短进程会发生饥饿现象,即长作业会一直等待短作业的完成。因此,这种算法不太适用于实际的操作系统。

区别

总的来说,MLQ 和 SJF 都是基于优先级或长度的排序来对进程进行调度。但是,它们的实现方式不同:

  • MLQ 包括多个优先级队列,允许进程的优先级在不同队列之间移动。而 SJF 可能只有一个队列,按执行时间排序。
  • MLQ 的进程实际上可以在不同的队列之间移动。而 SJF 进程在一个队列中等待,可能会饥饿。
  • 在 MLQ 中,每个队列通常都有自己的时间片,允许较低优先级的进程获得一些 CPU 时间。而在 SJF 中,同样的情况下长作业会一直等待短作业的完成。
  • MLQ 允许不同类型的进程在不同的队列中进行调度,而 SJF 可能难以确定每个进程的执行时间,因此很难分类。
  • 在多核 CPU 上,MLQ 可以在不同的核心上并行执行不同的队列。而 SJF 只能按顺序执行。
结论

MLQ 和 SJF 都有优缺点。MLQ 更加灵活,允许不同的优先级队列,特定类型的进程更快地得到响应;SJF 可以最小化进程平均等待时间,但实际上也很难准确预估每个进程的执行时间。在实际操作系统中,通常采用多种不同的调度算法,结合使用,以达到最佳的执行效果。