在多编程环境中,经常会发生多个进程同时竞争CPU资源的情况。如果只有一个CPU可用,则必须在接下来运行的进程之间做出选择。操作系统中负责选择进程的部分称为调度器,它使用的算法称为调度算法。

多重编程的目标是最大化CPU利用率。标准如周转时间,响应时间,等待时间,吞吐量是建议的基础上,调度算法的判断。有许多CPU调度算法,其中两种是-

  • 多级队列调度
  • 多级反馈队列调度

MLQ (Multi Level Queue)和MLFQ (Multi Level Feedback Queue) CPU调度算法的区别:

多级队列调度(MLQ) 多级反馈队列调度(MLFQ)
它是一种将准备队列划分为若干个较小队列,并将进程永久分配到这些队列中的队列调度算法。这些进程是根据它们的内在特征(如内存大小、优先级等)进行划分的。 该算法根据CPU突发特征,将准备队列划分为更小的队列。这些进程不是永久地分配给一个队列,而是允许在队列之间移动。
该算法将队列分为两组,第一组包含后台进程,第二组包含前台进程。采用轮询算法将80%的CPU时间分配给前台队列,采用先到先得算法将20%的CPU时间分配给后台进程。 在这里,队列被分为高优先级队列和低优先级队列。如果进程的执行时间较长,它将被移到优先级较低的队列中。因此,该算法将I/O限制和交互进程置于更高优先级的队列中。
该算法的优先级是固定的。当一个队列中的所有进程都被完全执行时,则只执行另一个队列中的进程。因此,饥饿就会发生。 进程的优先级是动态的,因为进程被允许在队列之间移动。在低优先级队列中花费较长时间的进程可以转移到高优先级队列中,反之亦然。因此,它防止了饥饿。
由于进程不会在队列之间移动,所以它的调度开销低,而且不灵活。 由于允许进程在队列之间移动,因此它具有较高的调度开销和灵活性。

1. MLQ (multi – level Queue Scheduling)示例:

  • 系统进程队列
  • 交互式进程队列
  • 交互式编辑过程队列
  • 批处理队列
  • 学生处理队列

在这里,所有队列都有自己的调度算法,并以最高优先级选择进程。然后,它将被先发制人或非先发制人地执行。在高优先级队列全部为空之前,低优先级队列中的进程不能被执行。例如,如果批处理进程队列正在运行,且交互进程处于就绪状态,则批处理进程将被抢占,并允许执行交互进程。

2. 多级反馈队列调度(MLFQ)示例:
让我们考虑有三个队列的多级反馈队列。


当进程进入Q1时,它被允许执行,如果它没有在8毫秒内完成,它将被转移到Q2并接收16毫秒。同样,如果它没有在16秒内完成,它将被抢占到Q3。这样,在该方案中进行调度。