进程调度算法

最近在看《操作系统导论》这本书,里面介绍了几种进程调度算法,在此总结一下。

在开始介绍算法前,先介绍两个调度指标。

1. 周转时间

周转时间定义为任务完成时间减去任务到达时间。
在这里插入图片描述
2. 响应时间

相应时间定义为从任务到达系统到首次运行的时间。
在这里插入图片描述


首先对系统中运行的进程作如下假设:
1.每一个工作的运行时间相同。
2.所有工作同时到达。
3.一旦开始,每个工作保持运行直到完成。
4.所有工作只是占用CPU。
5.每个工作的运行时间已知。

  1. 先进先出(FIFO)

简单理解就是谁先到谁先执行(让我想到了数据结构的队列)。

例子:3个工作A、B、C在大致相同的时间到达系统(A比B早一点点,B比C早一点点),假设每个任务工作10s,则A先开始运行,10s时,A运行完,B开始运行,20s时,B运行完,C开始运行,30s时,C运行完。则平均周转时间为:(10+20+30)/3 =20。

现在思考下,假设A需要运行100s,B、C还是10s。则周转时间为:(100+110+120)/3 =110。这就好比你去超市仅仅买了一瓶水,在排队结账时,你前面那个人买了整整3大车东西,你这个焦急的心态。

  1. 最短任务优先(SJF)

在上面,我们发现了FIFO的一些问题,而SJF解决了这个问题。 它让最短的任务先运行,其次是次短,依次往下排。

例子:我们来看FIFO中最后那个问题(还是认为3个工作A、B、C在大致相同的时间到达系统),现在则是B先运行,其次是C,最后是A,则周转时间为:(10+20+120)/3=50,比FIFO有相当大的改善。

现在假设A比B早到10s(B、C到达时间差不多),那么根据SJF,A在0s时开始运行,B、C要等到A与运行完,即第100s开始执行,110s时,B运行完,B的周转时间为110-10=100,同理得C的周转时间为110。则平均周转时间为:(100+(110-10)+(120-10))/3=103.33。显然这不是我们希望看到的。

  1. 最短完成时间优先(STCF)

根据上面的讨论,我们可以想到,如果可以打断A的运行(让A暂停),先运行B、C,是不是相应时间会好点。这就是STCF, ,每当有新工作进入系统时,它就会确定剩余工作和新工作中,谁的时间最少,就先执行该工作。

例子:则上面那个问题,A在0s时开始执行,10s时,B、C进入系统,此时系统检测到A还剩90s,而B、C只需要10s,所以先执行B、C,故平均周转时间为:(120+10+20)/3=50,显著提高。

  1. 轮转(RR)

思考下,假设A、B、C到达系统时间大致相同,且工作时间为10s,则其平均响应时间为(0+10+20)/3=10。现在我们不让一个工作一直占用CPU一直到它完成,这就是RR。在一个时间片内,运行一个工作,然后切换到下一个工作。注意时间片的长度必须是时钟中断周期的倍数。

例子:现在我们假设一个时间片为1s,则A的响应时间为0s,B的响应时间为1s,C的响应时间为2s,则平均响应时间为(0+1+2)/3=1,显著提高。

上面问题你可能会想到,这样做平均周转时间会变大((28+29+30)/3)。没错,RR优化了响应时间,但其周转时间没有STCF好。

以周转时间为指标,则选STCF,以相应时间为指标,则选RR


  • 上述所有的讨论中,我们都没有考虑I/O的情况。现在假设有两项工作A、B,每项工作都需要50s的CPU,但是A每工作10s,就需要发出10s的I/O请求;B没有I/O请求。假设我们使用STCF,我们可以把A看成5个10s的相互独立的工作,即刚开始只有A1(10s)和B(50s)两个工作,则A1先执行,10s时,A1执行完,则B开始执行,20s时,A完成了I/O完成,即看成新来一个A2(10s)工作,则根据算法,B暂停,执行A2,依次往下推。

  • 上述讨论中,都基于开头的一个假设,我们知道每个工作的时间,但在现实中,操作系统对每个长度知道的很少,所以会有下面的算法。


多级反馈队列(MLFQ)

MLFQ中有许多优先级不同的队列,每个队列可以有很多任务,在同一队列中的任务优先级相同。MLFQ总是先执行优先级高的队列。在同一时刻,任何一个工作只能处于一个队列中。

MLFQ的规则(A、B为两个工作):

  1. 如果A的优先级大于B的优先级,则执行A,不执行B。
  2. 如果A、B优先级相同,则A、B轮转执行(RR)。
  3. 工作刚开始进入系统时,都放在最高优先级。
  4. 一旦工作用完了其在某一层中的时间配额,就降低其优先级。
  5. 经过一段时间S,就将系统中所有工作重新加入最高优先级队列。

彩票调度

假设现有A、B、C三个工作,则为他们都有一定数量的彩票。A的彩票号为0-99,B的为100-149,C的为150-199(注意,拥有彩票的个数占彩票总数的百分比,就是它占有资源的份额。如上,A占50%的CPU时间,B、C各占用25%)。现在随机生成一个数(范围为0-199),假设为66,则A执行。

彩票调度最精彩的地方在于其利用了随机性。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值