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