223_调度算法的评价指标
# 2.2_3_调度算法的评价指标
各位同学大家好。在这个小节中我们会学习一系列用于评价一个调度算法好坏的一些评价指标,包括 CPU 利用率、系统吞吐量、周转时间、等待时间和响应时间。
在学习的过程中,大家要注意理解各个指标为什么这么设计,并且要会计算每一个指标。
# CPU 利用率
首先来看一下什么是 CPU 利用率,其实在早期的计算机当中,计算机的造价是很昂贵的,特别是 CPU 部件的造价占了很大一部分,它这个东西基本上就是用钱堆出来的一个很奢侈的东西,并且在现代的这些计算机当中,其实 CPU 也不便宜,所以因为 CPU 这么贵,那么人们就会希望让 CPU 尽可能多的为人们工作,所以就设计了一个叫做 CPU 利用率的这样一个指标。这个指标用来表示 CPU 处于忙碌的时间,占总时间的比例,那么利用率就可以用忙碌的时间比上总时间就可以算出利用率。
但是有的题目它不仅仅是会让我们算 CPU 利用率,还会让我们算某种 lO 设备的利用率,比如说如果一个计算机当中它只支持单道程序,然后有个作业刚开始的时候需要在 CPU 运行 5 秒,然后打印输出 5 秒之后再执行 5 秒,然后就结束,
那么在这个过程中 CPU 利用率先刚开始运行了 5 秒,然后之后又运行了 5 秒,总共运行了 10 秒,CPU 处于忙碌的时间是 10 秒,然后整个过程处理的时间是 5+5+5,也就是 15,那么就是 66.66%。
然后打印机的利用率的话,就是打印机处于忙碌的时间,也就是 5 秒在比上总时间,那么就是 33.33%。但是在真正的考研题目当中,通常会考察多道程序并发执行的情况,这种情况下大家可以用甘特图来辅助计算,这个地方先不展开,在课后习题会有遇到,并且也会有相应的讲解。
# 系统吞吐量
那么第二个评价的指标就是叫做系统吞吐量。那么对于计算机来说,肯定是希望用尽可能少的时间可以处理完尽可能多的作业,所以就设计了一个叫做系统吞吐量的指标,用来表示单位时间内完成了多少道作业,所以系统吞吐量可以用,总共完成了多少道作业,再除以总共花了多少时间就可以算的系统吞吐量。
比如说有个计算机处理完 10 道作业花了 100 秒,那么吞吐量就是 10÷100,那么就是 0.1 道每秒,也就是平均每秒可以完成 0.1 道作业,这就是单位时间内完成的作业的数量,这就是系统吞吐量。
# 周转时间
第三个指标是周转时间,对于计算机的用户来说,这个用户肯定是很关心自己的作业从提交到完成总共花了多少时间,一般来说这个时间当然是花的越少越好,所以周转时间就是用来反映这样一个所花费时间的指标,就是只从作业被提交给系统开始,到作业完成为止,这段时间到底有多长。
那么它总共包作业周转时间总共包括 4 个部分,就是作业在外存的后备队列上等待被作业调度的时间,然后进程在就绪队列上的时间,还有进程处于运行态的时间,还有进程处于阻塞态的时间。后面的这三项就是就绪态、运行态和阻塞态这三项在整个作业的处理过程当中是会发生多次的,整个过程中只会有一次作业调度,咱们在之前的小节当中也有介绍过。所以一个作业的周转时间,我们可以用作业的完成时间减掉作业被提交给系统的时间,这样就可以简单的计算出来。
另外对于操作系统来说,他肯定是会更关心整体系统的整体表现,所以他会更关心所有的作业周转时间的一个平均值,所以就有另外一个指标叫做平均周转时间,用各个作业的周转时间之和再除以再除以作业的数量。
那么我们再来思考一个这样的问题,对于各个用户提交的这些作业来说,有的作业它的运行时间是短的,有的作业运行时间是长的,所以说如果在周转时间相同的情况下,其实运行时间更长的那些作业,对于用户来说肯定感受会稍微更好一些。
举一个很直观的有味道的例子,比如说我们去排队等厕所,那么你本来只需要使用一分钟,但是你要排队排 10 分钟,总共整个周转过程你总共花了 11 分钟,这种感受肯定是很糟糕的,本来自己只需要用一会儿,但是又需要等待那么长的时间。不过对于另外一个人来说,他总共需要使用 10 分钟,但是他只需要等一分钟。所以另外这个人他的整个周转时间其实也是 11 分钟,只不过这 11 分钟当中只有一分钟是用来等待的,所以对于第二个人来说,这一分钟的等待其实对他来说感受没有那么糟糕。
所以这就是在周转时间相同的情况下,作业的实际运行时间长短不同所导致的对于用户的感受的这种区别。因此人们又提出了另外一个指标,叫做带权周转时间,就是指作业的周转时间,在比上作业实际运行的时间,因此可以看到对于周转时间相同的两个作业来说,如果哪个作业的实际运行时间更长,那么这个作业相应的被服务的时间所占的比例也就更多,那么带权的周转时间就会更小,用户满意度相应的也会更高,
而对于实际运行时间相同的两个作业来说,肯定是周转时间短的作业,对于用户来说他的满意度会更高,那么周转时间短的话,相应的带权周转时间也会更小,所以通过这个式子我们会发现带权周转时间它肯定是大于等于一的,因为周转时间包含了作业的实际运行时间,它肯定比实际运行时间要更大。那么带权周转时间和周转时间都是一样的,他们肯定都是越小,对于用户的体验来说就会越好。
相应的和平均周转时间一样,也会有一个所谓的平均带权周转时间,这个就是系统会比较关心的一个指标,把各个作业的带权周转时间给加合起来,最后再除以一个作业数。
那么这就是周转时间相关的 4 个指标。
# 等待时间
接下来我们再来看下 1 个指标叫等待时间,对于计算机的用户来说,肯定是希望自己的作业尽可能少的等待处理机,那么等待时间就是用来度量用户的作业等待处理机,被等待,被服务的时间之和到底是多少,等待越长肯定用户的满意度就越低。
那么我们先来看一下,当一个作业刚开始被提交的时候,它是被放到了外存中的作业后备队列当中,作业在后备队列当中需要等待被服务,也就是被作业调度。
当它被调度以后,这个作业就会放到内存当中,并且建立起相应的进程。当进程建立了之后,它会被 CPU 服务,也会被 lO 设备服务,当然也会有等待被服务的这样一些时间,一直到最后整个进程结束,然后把作业移出内存。
那么对于进程来说,一个进程的等待时间其实指的就是进程被建立起之后开始,开始累计他等待被服务的时间总和是多少,但是需要注意的是他在等待 IO 完成的期间,其实是正在被 IO 设备服务的,所以这种时间是不能算到等待时间里的。
另外对于作业来说,我们不仅要考虑它建立了相应的进程之后的这一系列的等待时间,我们还要加上它在外存的后备队列当中等待被调度的这一段时间。所以作业的等待时间和进程的等待时间计算起来是有一些不同的,稍微注意一下。
通过之后的课后习题大家会发现一个现象,一般来说一个作业它总共需要被 CPU 服务多久,被 IO 设备服务多久,这些总时间一般来说都是确定不变的,所以调度算法其实只会影响作业或者说进程的一等待时间,当然和之前的那些指标一样,等待时间也有一个对应的与它对应的指标叫做平均等待时间,把所有进程或者作业的等待时间做一个加和再除以作业的数量就可以了。
# 响应时间
最后我们再来讲一个叫做响应时间的指标。对于计算机用户来说,如果说他提交了一个请求,比如说就是在键盘里输入了一个调试命令,那么他肯定是希望尽早的被系统服务被回应他提出的请求,所以响应时间指的就是用户从提出请求到首次产生响应所用的时间,这就是响应时间。
# 小结
那么我们再来回顾一下小节,我们介绍了 5 种用来评价调度算法的指标,那么大家要理解各个指标为什么这么设计,并且还要会计算各个指标。
其中 CPU 利用率和系统吞吐量咱们举了一两个比较简单的例子,后面的其他的这些指标我们会在之后的对于算法的讲解当中在不断的进行实践,所以这个地方暂时没给出具体的例子。
这个小节当中比较容易忘记的是带权周转时间和平均带权周转时间这两个指标,大家需要结合咱们举的比较有味道的例子来理解这个指标为什么这么设计,只要理解了,其实记住它就不难了。