📅  最后修改于: 2023-12-03 15:23:43.433000             🧑  作者: Mango
多级队列调度和最短作业优先都是操作系统中常用的调度算法。它们的大致思想相似,都是基于优先级或长度的排序来进行进程调度。然而,在细节实现上,它们还是有一些不同的。
多级队列调度 (MLQ) 通常将就绪队列划分为多个队列,每个队列有不同的优先级。在多级队列调度中,新到达的进程总是进入最高优先级的队列,等待进程运行或被阻塞。运行的进程如果用尽了时间片或阻塞了,在队列中的优先级会降低一级,等待下一次调度。如果一个进程在低优先级队列中等待了很长时间,它的优先级也会逐渐提高,到达某个级别后,它将被移到高优先级队列中。
MLQ 的优点是允许更加公平地分配 CPU 时间到不同的进程之间。同时,它允许把不同类型的进程分组到不同的队列中,使得特定类型的进程能够更快地得到响应。例如,一些实时进程可以放在高优先级队列中,而后台进程可以被放在低优先级队列中。
最短作业优先 (SJF) 是一种根据进程执行时间来决定调度顺序的算法。在 SJF 中,所有就绪队列中所有进程都按照执行时间升序排列。当一个进程抵达并就绪时,它会马上开始执行直到完成。这种算法需要知道每个进程的预期执行时间。
SJF 的优点是可以最小化进程平均等待时间,因为它总是优先执行执行时间最短的进程。但是,实际上很难准确预估每个进程的执行时间,而且在一个就绪队列中,短进程会发生饥饿现象,即长作业会一直等待短作业的完成。因此,这种算法不太适用于实际的操作系统。
总的来说,MLQ 和 SJF 都是基于优先级或长度的排序来对进程进行调度。但是,它们的实现方式不同:
MLQ 和 SJF 都有优缺点。MLQ 更加灵活,允许不同的优先级队列,特定类型的进程更快地得到响应;SJF 可以最小化进程平均等待时间,但实际上也很难准确预估每个进程的执行时间。在实际操作系统中,通常采用多种不同的调度算法,结合使用,以达到最佳的执行效果。