操作系统CPU调度问题讨论1

本文章主要是初步介绍操作系统CPU调度的问题以及涉及的基本算法。阅读的文章主要是operation system three easy pieces 的Scheduling Introduction部分。

 

首先,我们已经大概知道了运行中的进程中的底层的细节,那么现在我们就来到更加高层的角度,来看一看操作系统是怎么样来决定各个进程以怎样的顺序在我们的计算机上执行的。我们会先讲解一些比较简单的调度规则(scheduling policies).

1、在进行介绍这些算法之前,我们先对进程运行做一些假设来简化我们的问题,然后逐渐将这些假设去掉。假设如下:

(1)每个进程都运行相同的时间。

(2)所有进程在同一时刻到达。

(3)一旦进程开始,每个进程都持续运行直到完成任务。

(4)所有进程只涉及CPU运算(也就是不执I/O操作)。

(5)每个进程的运行时间是已知的。

虽然这些假设很多在实际情况下是不现实的,但是如果上来就考虑各个方面的问题的话,难免会让自己陷入困境。我们会在下面的介绍中逐渐去掉上面的各个假设,从而更加逼近真实的调度算法。

2、评价标准。在做了上述假设之后,我们需要做一些评价标准来对比不同的调度算法。有一个标准是周转时间(turnaround time)。它指一个工作完成的时刻减去它到达系统的时刻。

                                                                                    

                                                       

3、先进先出(FIFO)

最简单的算法就是先进先出算法。下面我们看一个例子:



 

上面的图中,A、B、C是三个进程,他们几乎同时到达系统。但是A稍微比B和C早一些,B稍微比C早一些。假设三个进程的执行之间都是10,然后开始执行。可以很容易的计算出这三个进程的平均周转时间为(10+20+30)/3=20.

现在我们去掉上面假设中的一条,使得每个进程的运行时间不再相等,那么这个时候FIFO算法的性能怎么样呢?看下面一个例子:



 

A进程执行100,B和C执行10,到来顺序不变,这是平均周转时间为(100+110+120)/3=110.很明显这种情况下这种算法的性能就收到了很大的影响,如果是B和C先于A到达的话,平均周转时间就是(10+20+120)/3=50.明显好于上一中算法。

4、最短时间优先

在上面的例子中,我们发现FIFO的性能在有些极端的情况下来看是非常糟糕的。于是就有人提出一种算法叫做最短时间优先。这种算法就对应我们上面的图示。

5、最短剩余优先

下面我们要讨论的一种算法叫做最短剩余优先(Shortest Time-to-Completion First).

现在我们来解除上面的另一个假设:所有进程同时到达。我们思考这样的问题,如果上面上面三个进程中A先到达了,然后在A运行的过程中B和C到达了,这时是继续执行A还是将CPU腾出来执行B和C呢?这时我们的最短时间剩余算法就上场了。看下面的图示:



 

在A执行的过程中,B和C到达了,但是B和C执行完需要的时间比A短,所以此时会运行B和C,然后再运行A,这种情况下的平均周转时间明显比下面这种情况好:



 

6、响应时间(Response Time)

现在我们考虑另外一个衡量算法性能方面的标准,叫做响应时间(Response Time)。这在交互式系统中是十分重要的。想想你在键盘上按下一个键,由于你的计算机在执行很多复杂的任务,然后再十分钟之后屏幕上显示出了你按下的那个键,是不是很让你崩溃。。。所以在交互式系统中这种衡量标准就显得十分重要了。

现在我们来定义一下响应时间:第一次被执行的时刻减去到达的时刻。


 

你可能会想,按照上面的算法的话,可能响应时间这各衡量标准并不好,如下图:


 

平均响应时间为(0+5+10)/3=5.

 

7、时间片(Round Robin)

为了解决这个问题,我们可以采取以下的算法,RR算法。想法是非常简单的。我们不再让一个进程从开始运行一直到它结束,而是给进程分配一个时间片。当一个进程运行完一个时间片之后,就将CPU切换给下一个进程。这样一直重复知道进程结束。这里提醒一下时间片的长度必须是时钟中断周期的整数倍。下面我们看一个例子来理解这种算法:


 

很明显,如果时间片越短,那么这种算法的响应时间性能就会越好。然而,我们必须考虑这样的事实:如果时间片太短的话,那么上下文切换所占的时间就是非常大的一种开销。CPU在切换进程的时候需要切换上下文,这需要时间。所以一个合理的时间片长度是非常重要的。在时间片程度和性能这两者之间存在着得失交换(trade-off).时间片越短,上下文切换所占的时间越长,但响应时间会变短。

现在我们考虑这种算法对我们的周转时间这个标准的影响。很明显,这种算法对于周转时间而言是非常糟糕的,因为这种算法相当于把一个进程运行时间“摊开了”。所以在这个角度而言,响应时间和周转时间也是一种trade-off。

 

总结:这篇文章我们讨论了最简单的调度算法。第一种是最优化周转时间的最短时间剩余算法,第二个是最优化响应时间的时间片。下一篇文章将会讨论多级反馈队列问题(multi-level feedback queue)

 

参考文献:operation system three easy pieces 7.Scheduling:Introduction

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值