操作系统学习笔记之处理器调度

处理器调度问题的核心问题有“保证资源利用率“(最重要的也就是CPU利用率)、公平性和平衡性。对于不同类型的调度,批处理、分时系统、实时系统,具体的调度方法和策略有一些不同。
评价调度的好坏有几个概念:
(1)周转时间:从作业(进程)到达开始计时,直到作业被完成的时间;
(2)平均周转时间:就是所有作业的周转时间的算术平均值
(3)带权周转时间:周转时间比上实际在CPU上运行的时间
(4)平均带权周转时间:就是带权周转时间的算术平均值

关于进程调度有一个核心问题就是:是否抢占。因此,调度算法也被划分为两类:抢占式调度非抢占式调度。非抢占式调度就是说,一旦这个进程获得了处理器资源,除非运行完成或者阻塞或者出现不能运行的情况,将一直运行下去,直到运行完成。抢占式调度的意思是调度程序可能会暂时中断某个进程转向另外一个进程。

a)先来先服务(first come first served)

最朴素的调度算法,按照进程实际到达的时间,也就是说考虑的是进程的等待时间。通常以一个队列模型

b)短作业优先(shortest job first)

短作业优先算法考虑到的是通常情况下,短作业(进程)占比较大。如果长作业先执行,会导致后面的短作业的总体等待时间过长,也就是平均周转时间都会更长,假如有不同的人等待不同的作业,那样短作业用户都会去等待这个长作业先执行完才能轮到自己的短作业。按照短作业优先算法,作业(进程)时间越短,进程优先级越高,也就越先执行。这种方式能够有效降低平均周转时间和平均带权周转时间,但是容易导致进程饥饿现象(一个长作业在等待过程中不断有短作业加入),同时很多时候对作业(进程)的执行时间长度也无法准确估计。

c)优先级调度(priority schdeuling)

对于每个作业(进程)赋予优先级,优先级高的先执行。优先级调度有抢占式也有非抢占式的,对于非抢占来说,进程需要一直执行完再根据优先级选择下一个进程进行调度;而抢占式的调度,一旦出现优先级更高的,则立即切换至优先级更高的进程。同时,优先级也分静态优先级和动态优先级。高响应比就使用了动态优先级来调整。除了根据响应比确定动态优先级,有些时候可能也会使用IO来确定动态优先级。

d)高响应比优先(highest response ratio next)

高响应比引入了动态优先级的概念。在有新的进程加入就绪队列,就会重新计算一边动态优先级,优先级越高的先执行。优先级按照公式(要求服务时间+等待时间/要求服务时间)计算。很显然,等待时间越长,优先级越高,必然会先执行;要求服务时间越短,优先级也越高。这样就糅合了FCFS和SJF的共同优点。问题在于动态计算本身还是有一定开销的,实际上落在作业(进程)上的CPU时间会略微减小。

e)轮转调度(round-robin)

轮转调度算法将CPU时间划成一个一个的时间片(quantum),进程按照先来后到的顺序排成就绪队列,每次时间片从队列中取一个进程,执行一个时间片的长度。如果时间片内进程结束了,就通知调度器选择下一个进程,否则,将该进程排到队尾,从队首选择下一个进程。轮转调度算法最大的问题在于,进程上下文切换(context switch)需要较大的开销,对于时间片过短,那么切换开销就会很大;但是时间片过长,又很难应付分时系统要求的交互性,并且有些时候可能时间片还未运行完就会被阻塞。

f)多级队列(multiple queues)

多级队列为了解决轮转调度中的时间片既不能太长也不能太短的问题。它根据优先级设置不同的队列,每一级队列的运行时间片不尽相同,通常是,越低优先级的队列运行时间片越长。当一个进程到达时,先进入最高优先级的队列,运行不完,塞入次级队列,以此类推。同级的队列按照FCFS调度,而不同级队列按照队列的优先权进行调度,也就是说,当低优先级队列的进程未运行完,但是有新的进程进入(必然放在最高优先级队列中),这样就将该进程放在这个低级优先级的队列末尾,转而执行新的进程。这种调度方式结合了FCFS,RR,和优先级调度,保证了分时系统的高响应、短进程的快速周转,长作业也不会饿死。

g)彩票调度(lottery scheduling)

彩票调度大体上就是随机抽取进程进行调度。对于优先级较高的进程,多给几张“彩票”,这样“中奖”(被分配CPU进入执行状态)的概率就大一些。彩票调度的一大好处在于,相合作的进程可以互相交换彩票,比如进程A要等待进程B的结果才能继续,A即使获得调度程序分配了CPU资源也会马上进入阻塞状态,并无意义。因此这时候A就可以把它的CPU调度机会扔给B,B的获得的CPU时间的概率就会更大一些,等到B执行完还给A以后,同样也可以把其CPU调度机会返还给A。这时协作进程的效率会大大提高。另外的比如流处理服务器需要播放不同帧率的视频,可以按照帧率(要处理的量)分配彩票,这样他们被调度得到的CPU资源近似等于他们所需要的比例,也不会造成太多的浪费和不均等。

关于调度的公平性

1)保证调度

保证调度不保证优先级高的进行,而是尽量每个进程获得的CPU时间近似均等。在大多数情况,进程所需要的时间尽可能均等分配,因此常用的保证调度算法通过计算 “某一实际执行时间/所有进程执行时间均值” 这个比率,进行调整。调度程序选择比率最小的进程给其分配CPU资源,直到达到超过 最接近这个进程的进程的比率,近似确保占用的CPU时间相同。

2)公平分享调度

分时系统中不同用户运行的进程数量不一样,仅仅对进程平等是不够的,这样会导致用户得到的CPU资源不公平。对于这个问题需要保证用户获得的CPU时间相同,或者遵循一定比例,就要区分开不同用户的进程,进行调度。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值