专注Java教育14年 全国咨询/投诉热线:400-8080-105
动力节点LOGO图
始于2009,口口相传的Java黄埔军校
首页 hot资讯 常见的3种进程调度算法

常见的3种进程调度算法

更新时间:2020-11-26 17:43:10 来源:动力节点 浏览1847次

在系统中,用户进程数一般都多于处理机数,这将导致它们互相争夺处理机。另外,系统进程也同样需要使用处理机。这就要求进程调度程序按一定的策略,动态地把处理机分配给处于就绪队列中的某一个进程,以使之执行。本文我们就来介绍这些进行动态分配的进程调度算法

 

一、先来先服务和短作业(进程)优先调度算法

 

1.先来先服务调度算法

    按照作业提交或进程变为就绪状态的先后次序,分派CPU;

  当前作业或进程占用CPU,直到执行完或阻塞,才出让CPU(非抢占方式)。

  在作业或进程唤醒后(如I/O完成),并不立即恢复执行,通常等到当前作业或进程出让CPU。

    适用场景:

  比较有利于长作业,而不利于短作业。因为长作业会长时间占据处理机。

有利于CPU繁忙的作业,而不利于I/O繁忙的作业。

 

2.短作业(进程)优先调度算法

短作业(进程)优先调度算法SJ(P)F,是指对短作业或短进程优先调度的算法。它们可以分别用于作业调度和进程调度。短作业优先(SJF)的调度算法是从后备队列中选择一个或若干个估计运行时间最短的作业,将它们调入内存运行。而短进程优先(SPF)调度算法则是从就绪队列中选出一个估计运行时间最短的进程,将处理机分配给它,使它立即执行并一直执行到完成,或发生某事件而被阻塞放弃处理机时再重新调度。主要的不足之处是长作业的运行得不到保证

 

二、高优先权优先调度算法

 

1.优先权调度算法的类型

为了照顾紧迫型作业,使之在进入系统后便获得优先处理,引入了最高优先权优先(FPF)调度算法。此算法常被用于批处理系统中,作为作业调度算法,也作为多种操作中的进程调度算法,还可用于实时系统中。当把该算法用于作业调度时,系统将从后备队列中选择若干个优先权最高的作业装入内存。当用于进程调度时,该算法是把处理机分配给就绪队列中优先权最高的进程。

 

2.高响应比优先调度算法

在批处理系统中,短作业优先算法是一种比较好的算法,其主要的不足之处是长作业的运行得不到保证。如果我们能为每个作业引入前面所述的动态优先权,并使作业的优先级随着等待时间的增加而以速率a 提高,则长作业在等待一定的时间后,必然有机会分配到处理机。

三、基于时间片的轮转调度算法

 

1.轮转调度算法

在分时系统中,最简单最常用的是时间片的轮转调度算法,该算法采用了非常公平的处理机分配方式,即让就绪队列上的每个进程仅运行一个时间片。

系统将所有就绪进程按FCFS策略排成就绪队列。系统每隔一段时间产生一次间断,去激活进程调度程序进行调度,把CPU分配给队首进程,并令其执行一个时间片

若一个时间片还未用完,进程便已完成就立即激活调度程序,将他从就绪队列中删除。

若一个时间片用完,计时器中断处理程序被激活,调度程序将它送往就绪队列末尾。

 

2.多级反馈队列调度算法

前面介绍的各种用作进程调度的算法都有一定的局限性。如短进程优先的调度算法,仅照顾了短进程而忽略了长进程,而且如果并未指明进程的长度,则短进程优先和基于进程长度的抢占式调度算法都将无法使用。而多级反馈队列调度算法则不必事先知道各种进程所需的执行时间,而且还可以满足各种类型进程的需要,因而它是目前被公认的一种较好的进程调度算法。

 

进程调度任务的本质实际上就是保存当前进程的处理机的现场信息,然后按照算法选取进程,再把处理器分配给进程。知道了进程调度任务的本质我们理解起进程调度算法也就事半功倍了。我们也可以参考本站的Java多线程教程中关于多进程调度算法的讲解,加深我们对多进程调度算法的理解。


提交申请后,顾问老师会电话与您沟通安排学习

免费课程推荐 >>
技术文档推荐 >>