无处不调度
Posted Zhou2021
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无处不调度相关的知识,希望对你有一定的参考价值。
现代的,平民的,组装的计算机,都能同时做很多事情。我的计算机可以一边播放着MP3,一边显示着文字和图片,一边维护着记事本,一边bt着。。。严格地说,在某一瞬间,一个CPU上只能运行一道程序。但在1秒内,她可以在若干个程序之间切换,使得迟钝的用户产生并行的错觉(多处理机才是真正的并行)。于是,当有多个进程都就绪时,CPU必须选择谁下一个运行。在操作系统中,调度程序使用调度算法来调度调度工作。。。
很多前辈已经为很多系统创造了很多有趣的调度算法。一些有趣的算法如下:
1) 先来先服务算法:进程按照她们请求CPU的顺序使用CPU。一个队列记录着就绪进程,每次运行在队首的进程,后来的进程加入队尾,正在运行的进程阻塞时也被移到队尾。算法原理简单,执行方便,在很多场景得到使用:如银行服务、上地铁公交、食堂吃饭、超市结账等。在一些复杂应用应用的不好:如年关买火车票,很多人提前N天去排队,以为在队首就能买到票,结果你我都知道了;年关的火车票属于稀缺资源,计算机的CPU更是稀缺资源,所以现代计算机一般不会采用这种算法的。
2) 最短作业优先:一般在同等重要的作业运行的时间能被精确预测是使用。原理上,使用最短作业优先算法能使每个作业的平均等待时间最低。此算法的一个要点是能预知每个作业的运行时间(类似还有最短剩余时间优先算法),但实际上运行时间不可预知的实例更多。想想看,下班时间,你在超市买了一瓶水,排队结帐,你与收银台之间是N多满载的购物车。。。此时,最短作业优先在哪儿呢?现在超市也提供了自助通道,方便买少量东西的顾客。
3) 轮转调度:理论上号称最古老、最简单、最公平且使用最广泛的算法。队列中每个进程都分配了一个时间片,若时间片结束前运行进程已阻塞或结束,CPU立即切换到队首进程;若时间片结束时运行进程还在运行,CPU强制切换到队首进程,原进程移到队尾,则等待下一轮的CPU切换。轮转算法的要点在于控制时间片的长度,CPU切换时间不是有效的进程运行时间。轮转算法还做了一个隐含的假设:所有的进程都是平等的。现实中,除了每人每天12个时辰,暂时没有发现其它。。。
4) 优先级调度:每个进程被赋予一个优先级,允许优先级最高的可运行进程先运行。为防止高优先级进程无休止地运行下去,调度程序会采用一些方法(如高优先级进程每次运行后降低优先级),来保证低优先级的进程得以运行。这个算法较为现实,少数高优先级的进程控制着大量的CPU时间和其他资源,只有在高优先级进程偶尔降低优先级,或低优先级进程被偶尔调高优先级时,低优先级进程才能避免饥饿现象。
5) 彩票调度:基本思想是向进程提供各种系统资源(如CPU时间)的彩票,一旦需要做出一项调度决策时,就随机抽出一张彩票,拥有该彩票的进程获得该资源。彩票调度的规则很清楚:拥有彩票的份额决定了得到资源的份额。现实中,你买彩票中了吗?我们只听说昔日一打工仔中了¥20M,但却始终不清楚买彩票的人数。类似的股票呢?大量散户连CPU是否存在不知道。
6) 公平分享调度:当考虑进程的所有者时,为每个用户而不是每个进程分配CPU时间,以避免使用上面算法时,用户甲的数十个进程与用户乙的一个进程所分配CPU时间的巨大差异。这和现实中是公平优先,兼顾效率。
7) 其他算法,鉴于简单的生活经验,没有太多的感触。呵呵,有兴趣请参考《现代操作系统》第2章。
现代的,平凡的,拥有神经元的用户,都能同时做很多事。某一时刻,我一边听着MP3,一边浏览着文字和图片,一边啃着半个苹果......,这和一台计算机有点类似。
现在的人,每天神经元CPU也运行这很多进程,大方向有工作、生活、学习、睡眠(也许应该对应进程休眠)。看起来,我们的调度算法具有以上所有算法的特征。但在这样的调度算法中,属于个人的神经元CPU是否被有效地利用?这是个问题。
如今的濒临崩溃的分布式系统环境中,少数人拥有多数资源,各种资源正被污染,各种进程不断涌入。。。这也是个问题。
作为低优先级进程,不可能等着高优先级进程主动降低优先级(毕竟这是可遇不可求,且仅是个别进程。UNIX系统中有一条命令nice,它允许用户为了照顾别人而自愿降低自己进程的优先级,但除了父母,其他人很少有人用过它);我们应该发挥神经元的特性,不断改进自身进程属性,向更高优先级调整,争取在资源未枯竭之前,访问多一些原始资源。
生命在于运动,进程在于运行。
以上是关于无处不调度的主要内容,如果未能解决你的问题,请参考以下文章