📌  相关文章
📜  多级队列 (MLQ) CPU 调度

📅  最后修改于: 2021-09-27 06:24:16             🧑  作者: Mango

先决条件:CPU调度
可能会发生就绪队列中的进程可以分为不同的类,其中每个类都有自己的调度需求。比如一个常见的划分是前台(交互)进程和后台(批处理)进程。这两个类有不同的调度需求。对于这种情况,使用了多级队列调度。现在,让我们看看它是如何工作的。

就绪队列针对每一类进程划分为单独的队列。例如,让我们采用三种不同类型的流程系统流程、交互流程和批处理流程。所有三个进程都有自己的队列。现在,看下图。

所有三种不同类型的进程都有自己的队列。每个队列都有自己的调度算法。例如,队列 1 和队列 2 使用循环,而队列 3 可以使用FCFS来调度那里的进程。

队列之间的调度:如果所有队列都有一些进程会发生什么?哪个进程应该得到cpu?为了确定这个队列之间的调度是必要的。有两种方法可以做到这一点——

  1. 固定优先级抢占式调度方法——每个队列相对于较低优先级队列具有绝对优先级。让我们考虑以下优先级顺序队列 1 > 队列 2 > 队列 3。根据该算法,除非队列 1 和队列 2 为空,否则批处理队列(队列 3)中的任何进程都不能运行。如果任何批处理(队列 3)正在运行并且任何系统(队列 1)或交互进程(队列 2)进入就绪队列,则批处理将被抢占。
  2. 时间切片——在这种方法中,每个队列获得一定部分的 CPU 时间,并可以用它来调度自己的进程。例如,队列 1 占用 50% 的 CPU 时间,队列 2 占用 30%,队列 3 获得 20% 的 CPU 时间。

示例问题:
考虑下面多级队列调度下的四个进程的表。队列号表示进程的队列。

队列 1 的优先级大于队列 2。队列 1 使用循环(Time Quantum = 2),队列 2 使用 FCFS。

下面是问题的甘特图

开始时,两个队列都有进程,因此队列 1(P1,P2)中的进程首先以循环方式运行(因为优先级更高),并在 7 个单位后完成,然后队列 2(P3)中的进程开始运行(因为没有进程在队列 1) 中,但是当它运行时,P4 进入队列 1 并中断 P3 并开始运行 5 秒,并在其完成后 P3 占用 CPU 并完成其执行。

优点:

  • 进程被永久分配到队列中,因此具有调度开销低的优点。

缺点:

  • 如果某些更高优先级的队列永远不会变空,则某些进程可能会因 CPU 而饿死。
  • 它本质上是不灵活的。