进程调度算法有哪些类型,哪些算法会导致饥饿?
进程调度器根据特定的调度算法将不同的进程分配给CPU。
进程调度算法的类型
不同类型的进程调度算法如下-
FCFS
顾名思义,作业按照先到先得的原则执行。这是一种基于先进先出的先进先出的简单算法。它是抢占式和非抢占式,根据其平均等待时间,其性能很差。
SJF
它也被称为最短的第一个作业或接下来的最短作业。它是一种抢占式和非抢占式算法,易于在批处理系统中实现,最能减少等待时间。
循环赛
它是一种抢占式调度算法,其中每个进程都有一个称为量子的固定时间来执行。在这段时间内,允许一个进程执行一个量程,然后抢占,然后执行另一个进程。通过这种方式,进程之间存在上下文切换以保存这些被抢占进程的状态。
优先调度
它是一种在批处理系统中工作的非抢占式算法,在这种算法中,每个进程都有一个优先级,优先级最高的进程首先执行,其他进程根据优先级执行,这可能导致这些进程饥饿。
最短剩余时间
该算法基于SJF,是该算法的先发制人版本,剩余时间最短的进程执行。换句话说,最接近完成的进程首先被执行,并且它可能被抢占到具有更短执行时间的新就绪作业。
多级队列调度
在这种调度中,多个队列有自己的调度算法,并由具有相同特征的进程维护。为此,将优先级分配给要执行的作业的每个队列。
以上所有算法可以是抢占式或非抢占式。这意味着在抢占式进程中,如果高优先级进程进入就绪队列,则调度程序可以抢占低优先级正在运行的进程。而在非抢占式中,一旦进程进入运行状态,它就不能被抢占。
导致饥饿的算法
现在在SJF中,如果出现更长的进程,那么他们必须等待更长的时间,因此这会遭受饥饿。在循环中,不会出现饥饿的情况,因为每个进程都有执行的配额或固定的执行时间。
在优先级调度中,具有低优先级的较长进程保持等待,因此优先级调度经历饥饿,因为只有高优先级进程快速执行而低优先级进程仍在等待。
在FCFS中,无论是较长过程还是较短过程,都不会出现饥饿的情况。最终,每个进程都无需等待即可执行,先到先得。