操作系统调度算法简介

原创 2015年10月30日 15:52:05

操作系统调度算法

这几次课操作系统S老师讲了不少算法,感觉自己好混乱,自己总结一下理理思绪,也算是为期末做准备了。



低级调度算法的基本类型

在理解调度算法之前要先理解两个很重要的概念,有助于对算法的理解。

  • 剥夺方式:当一个进程正在处理器上执行时,系统可以根据规定的原则剥夺分配给它的处理器,而把处理器分配给其他进程使用。有两种常见的剥夺原则:高优先级剥夺原则时间片剥夺原则,前者高优先级进程或线程可以剥夺低优先级进程或线程运行,后者当运行进程时间用完后被剥夺处理器。
  • 非剥夺方式:一旦某个进程或线程开始执行后便不再出让处理器,除非该进程或线程运行结束或发生了某个事件不能继续执行。

两种策略一般组合使用:内核关键程序是非剥夺式的,用户进程是剥夺式的。


先来先服务算法(FCFS)

策略:按照作业进入系统的先后次序来挑选作业,先进入系统的作业优先被挑选。为非剥夺式调度算法。
效果:算法容易实现,效率不高,只顾及作业等候时间,没考虑作业要求服务时间的长短,不利于短作业而优待了长作业。有利于CPU繁忙型作业不利于I/O繁忙型作业。

Linux采用了先来先服务算法以及时间片轮转算法


最短作业优先算法(SJF:Shortest Job First)

策略:最短作业优先算法以进入系统的作业所要求的CPU时间为标准,总选取估计计算时间最短的作业投入运行。为非剥夺式调度算法。
性能:算法易于实现,效率不高,弱点是需要预先知道作业所需CPU时间,而这个时间只能靠估计,估计值很难精确,若估计过低,系统可能提前终止该作业;忽视了作业等待时间,会出现饥饿现象;由于缺少剥夺机制,对分时、实时处理很不理想。

SJF的平均作业周转时间比FCFS要小,所以它的调度性能比FCFS好。

实现SJF调度算法需要知道作业所需要的时间,否则调度就没有依据,要精确知道一个作业的运行时间是办不到的。


最短剩余时间优先算法(SRTF)

最短剩余时间优先SRTF算法把SJF算法改为剥夺式调度算法

当一个作业正在执行时,一个新作业进入就绪状态,如果新作业需要的CPU时间比当前正在执行的作业剩余下来还需的CPU时间短,SRTF强行赶走当前正在执行的作业。此算法不仅适用于作业调度,同样也适用于进程调度。


响应比最高者优先算法(HRRF)

FCFS、SJF算法的缺点:先来先服务算法FCFS与最短作业优先SJF算法都是片面的调度算法。FCFS只考虑作业等候时间而忽视了作业的计算时间,SJF算法只考虑用户估计的作业计算时间而忽略了作业等待时间。

响应比调度思想:响应比最高者优先(HRRF)算法是介乎这两者之间的折中算法,既考虑作业等待时间,又考虑作业的运行时间,既照顾短作业又不使长作业的等待时间过长,改善了调度性能。

缺点:每次计算各道作业的响应比会有一定的时间开销,性能比SJF略差。

响应比定义:作业进入系统后的等待时间与处理时间之和称作该作业的响应时间,作业的响应时间除以作业处理时间称作响应比,即:

  • 响应比 = 1+已等待时间/作业处理时间

作业处理时间由用户给出,是一个常量。

响应比的计算时机:每当调度一个作业运行时,都要计算后备作业队列中每个作业的响应比,选择响应比最高者投入运行。

响应比最高优先(HRRF)算法效果:

  • 短作业容易得到较高的响应比
  • 长作业等待时间足够长后,也将获得足够高的响应比
  • 饥饿现象不会发生


优先级调度算法

算法思想:根据确定的优先级来选取进程/线程,每次总是选择就绪队列中优先级最高者运行。是变相的FCFS。

剥夺和非剥夺优先级调度:如果就绪队列中出现优先级更高的进程/线程,则可立即调度该进程运行(剥夺式调度)或者待当前运行进程结束或者出现等待事件主动让出处理器后,调度该高优先级进程投入运行(非剥夺式调度)。

规定用户进程/线程优先级的方法:

  • 一种是由用户自己提出优先级,称为外部指定法,优先级越高,费用越高。
  • 另一种是由系统综合考虑有关因素来确定用户进程/线程的优先级,称为内部指定法

优先级通常用0~4095的整数表示,该整数成为优先数。UNIX/Linux规定优先数越小,优先级越高,有些系统规定相反。

进程/线程优先级的确定方法

  • 静态方法:静态优先级在进程/线程创建时确定(外部指定或内部指定),此后不再改变。会产生饥饿现象,低优先级进程/线程被无限期推迟执行。
  • 动态方法:动态优先级随时间而变,其基本原则是:
    • 正在运行的进程/线程随着占有CPU时间的增加优先级逐渐降低。
    • 就绪队列中等待CPU的进程/线程随着等待的时间的增加优先级逐渐提高。


轮转调度算法

算法思想:轮转法调度也称为时间片调度,其做法是:调度程序每次把CPU分配给就绪队列首进程/线程使用一个时间间隔(时间片),就绪队列中的每个进程/线程轮流地运行一个时间片。当这个时间片耗尽时,强迫当前进程/线程让出处理器,让它排列到就绪队列的尾部,等候下一轮调度。

实现原理:需要使用一个间隔时钟。当一个进程开始运行时,就将时间片的值置入间隔时钟内,当发生间隔时钟中断时,终端处理程序就通知处理器调度进行处理器的切换工作。为剥夺式调度。

算法效果:其可防止那些很少使用外围设备的进程过长的占用处理器而使得要使用外围设备的那些进程没有机会去启动外围设备。


多级反馈队列调度(反馈循环队列或多队列策略)

算法思想:是将就绪进程分为两级或多级,系统相应建立两个或多个就绪进程队列,较高优先级的队列一般分配给较短的时间片。

处理器调度每次先从高级就绪队列中选取可占有处理器的进程,只有在选不到时,才从较低级的就绪进程队列中选取。

同一队列中的进程按先来先服务原则排队。

效果:性能较好,能满足各类用户的需要。

  • 对分时交互式作业:通常可在最高优先级队列规定的一个时间片内完成,响应时间快。
  • 对于长批处理型作业:可以从高到低在各优先级队列中运行一个时间片直到在某个级别队列中执行完毕或者在最后一个队列中经过若干个时间片执行完毕,绝不会发生长批处理型作业长期得不到调度的情况。

不足:会存在饥饿问题。当新进程不断到来,进入较高优先级队列,CPU忙于运行高优先级队列中的进程,低优先级队列中的进程将长时间得不到调度,产生饥饿现象。


彩票调度算法

基本思想:为进程发放针对各种资源(如CPU时间)的彩票。调度程序随机选择一张彩票,持有该彩票的进程获得系统资源。

进程都是平等的,有相同的运行机会。如果某些进程需要更多的机会,可被给予更多彩票,增加其终将机会。


实际操作系统中使用的算法:

  • 先来先服务算法
  • 轮转法
  • 优先级调度算法
版权声明:本文为博主原创文章,未经博主允许不得转载。

彩票调度算法权重分配

彩票调度算法,每个待运行的进程分配一张彩票,每次需要调度的时候,随机抽取一张已分配的彩票,中奖的进程获得CPU。 如果是优先级高的进程,应该保证被抽取的几率更大,所以需要提高高优先级进程的中奖率:...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

操作系统---OS的进程调度算法

在多进程、多线程并发的环境里,从概念上看,有多个进程或者多个线程在同时执行,具体到单个CPU级别,实际上任何时刻只能有一个进程或者线程处于执行状态;因此OS需要决定哪个进程执行,哪些进程等待,也就是进...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

学习笔记--多道程序的CPU调度算法

(1)何时调度: ① 在创建一个新进程时,需要决定是运行子进程还是父进程 ② 在一个进程退出时,必须做出调度决策 ③ 当一个进程阻塞在I/O和信号量上或者由于其他原因阻塞时,必须选择一个进程。 ...
  • zdplife
  • zdplife
  • 2015年09月16日 16:51
  • 1149

操作系统的进程调度算法

调度性能的衡量面向用户周转时间短周转时间,指作业从提交系统开始,直到作业完成为止的时间间隔。周转时间细分包括: 作业在外存后备队列中的等待时间 作业调入内存后创建的相应进程在就绪队列中的等待时间 进程...

计算机操作系统之调度算法

在多道程序环境中,内存中存在多个进程,数目往往多于处理机数目。这就要要求系统按照某种算法动态的将处理机分配给在就绪队列中等待的进程。     分配处理机的任务是由处理机调度程序完成的。处理机调度性能的...

操作系统进程调度算法图解(FCFS、轮转、SPN、SRT、HRRN、反馈)

FCFS: 先来先服务,也可以称为先进先出 轮转: 以一个周期性间隔产生时钟中断,此时当前正在运行的进程被置于就绪队列,基于FCFS选择下一个就绪进程             运行。 SPN:最短进程...

几个常用的操作系统进程调度算法

一、先来先服务和短作业(进程)优先调度算法 1.先来先服务调度算法 先来先服务(FCFS)调度算法是一种最简单的调度算法,该算法既可用于作业调度,也可用于进程调度。当在作业调度中采用该算法时,每次...

操作系统的常见进程调度算法

先来先服务 (FCFS,first come first served) 在所有调度算法中,最简单的是非抢占式的FCFS算法。 算法原理:进程按照它们请求CPU的顺序使用CPU.就像你...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:操作系统调度算法简介
举报原因:
原因补充:

(最多只允许输入30个字)