先决条件:
就绪队列中的进程可能会划分为不同的类, 其中每个类都有自己的调度需求。例如, 常见的除法是
前景(交互式)
处理和
背景(批次)
这两个类具有不同的调度需求。对于这种情况, 使用了多级队列调度。现在, 让我们看看它是如何工作的。
准备队列对于每个类别的进程, 都分为不同的队列。例如, 让我们采用三种不同类型的流程系统流程, 交互流程和批处理流程。这三个进程都有自己的队列。现在, 请看下图。
三种不同类型的进程都有自己的队列。每个队列都有其自己的调度算法。例如, 队列1和队列2使用循环赛而队列3可以使用FCFS安排那里的程序。
在队列之间进行调度:如果所有队列都有一些进程, 将会发生什么?哪个进程应该获取CPU?为了确定队列之间的调度, 是必要的。这样做有两种方法-
- 固定优先级抢占式调度方法–每个队列具有绝对优先级, 其优先级低于低优先级队列。让我们考虑以下优先顺序队列1>队列2>队列3根据此算法, 除非队列1和2为空, 否则批队列(队列3)中的任何进程都无法运行。如果任何批处理进程(队列3)正在运行, 并且任何系统(队列1)或交互式进程(队列2)进入就绪队列, 则该批处理进程将被抢占。
- 时间分片–在这种方法中, 每个队列占用一定的CPU时间, 并可以用来调度自己的进程。例如, 队列1占用了CPU时间的50%, 队列2占用了CPU时间的30%, 队列3占用了CPU时间的20%。
示例问题:
考虑以下在多级队列调度下的四个进程的表。队列号表示进程的队列。
队列1的优先级大于队列2。队列1使用循环(时间量子= 2), 队列2使用FCFS。
下面是甘特图问题的:
在开始时, 两个队列都有进程, 因此队列1(P1, P2)中的进程首先以循环方式运行(由于优先级较高), 并在7个单元后完成, 然后队列2(P3)中的进程开始运行(因为没有进程)在队列1中), 但在运行时, P4进入队列1, 中断P3, 并开始运行5秒钟, 完成后, P3占用CPU并完成其执行。
优点:
- 进程被永久分配给队列, 因此具有低调度开销的优点。
缺点:
- 如果某些优先级较高的队列从未变空, 则某些进程可能会饿死CPU。
- 它本质上是不灵活的。
如果发现任何不正确的地方, 或者想分享有关上述主题的更多信息, 请写评论。