进程调度算法有哪些类型?哪些算法会导致饥饿现象?
进程调度程序根据特定的调度算法将不同的进程分配给CPU。
进程调度算法的类型
进程调度算法的不同类型如下:
先来先服务 (FCFS)
顾名思义,作业按照先来先服务的原则执行。这是一种基于FIFO(先进先出)的简单算法。它是抢占式和非抢占式的,其性能基于平均等待时间较差。
最短作业优先 (SJF)
它也被称为最短作业优先或下一个最短作业。这是一种抢占式和非抢占式算法,易于在批处理系统中实现,并且最擅长最小化等待时间。
轮询调度
这是一种抢占式调度算法,其中每个进程都被赋予一个固定的执行时间,称为时间片。在这个时间内,允许一个进程执行一个时间片,然后被抢占,然后执行其他进程。通过这种方式,进程之间会进行上下文切换以保存这些被抢占进程的状态。
优先级调度
这是一种非抢占式算法,在批处理系统中工作,其中每个进程都被赋予一个优先级,优先级最高的进程首先执行,其他进程则根据优先级执行,这可能会导致某些进程出现饥饿现象。
最短剩余时间优先
此算法基于SJF,是它的抢占式版本,剩余时间最短的进程首先执行。换句话说,最接近完成的进程首先执行,它可能会被一个具有更短执行时间的新的就绪作业抢占。
多级队列调度
在此调度中,多个队列具有自己的调度算法,并与具有相同特征的进程一起维护。为此,为要执行的作业分配给每个队列优先级。
以上所有算法都可以是抢占式或非抢占式的。这意味着在抢占式进程中,如果高优先级进程进入就绪队列,调度程序可以抢占低优先级正在运行的进程。而在非抢占式进程中,一旦进程进入运行状态,就不能被抢占。
导致饥饿的算法
现在在SJF中,如果出现较长的进程,则它们必须等待更长时间,因此这会遭受饥饿。在轮询调度中,由于每个进程都被赋予时间片或固定的执行时间,因此没有饥饿的可能性。
在优先级调度中,低优先级的较长进程保持等待状态,因此优先级调度会发生饥饿,因为只有高优先级进程快速执行,而低优先级进程仍然等待。
在FCFS中,无论是较长进程还是较短进程,都没有饥饿的可能性。最终,每个进程都会按照先来先服务的原则执行。