操作系统调度算法简介

操作系统调度算法

这几次课操作系统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时间)的彩票。调度程序随机选择一张彩票,持有该彩票的进程获得系统资源。

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


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

  • 先来先服务算法
  • 轮转法
  • 优先级调度算法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值