linux调度器概观

时间:2021-04-10 14:36:12

由来

想问问你,想找个什么样的对象?假如有一大波妹子,让你在其中选一个做女朋友,你会怎么选?这种情况对于理工科的男生是不存在的,听到那些外国语大学的男生们说看到学校里俩男生一起去吃饭都不正常,我就愤怒了要。好了还是假如,你会选个什么样的,白富美,然后气质再好一点,最好会什么乐器,会唱歌,然后身材在好一点,这样的,不知道你满意了吗?如果有,就要了吧。一开始选择的时候,我们可能会把每个妹子都看一遍,然后再做决定选哪个交往,还一边向小伙伴们炫耀一下,慢慢的妹子多了感觉有点吃不消了,把每个妹子看一遍,可能就够谈一次恋爱的时间了,所以决定把她们分一下等级,身高160以下,就不考虑了,不白的也不考虑了,然后就从最白最高里面选一个;突然想到了国民老公王思聪,他该怎么选女朋友,最白最高里面都不计其数了,怎么再细分啊?

当然都是想象,我等屌丝怎么遇到一波妹子,但是CPU会啊。

CPU这货真的会啊,一大波进程都跑过来,跟它说,i want you,这辈子缺爱的小伙伴,下辈子可以考虑去投胎做个CPU,一开始CPU也是把一波进程都看一遍,看谁的优先级搞就选择哪一个,这是第一代O(n)。

      然而进程越来越多,看一遍的时间,都够把几个进程处理完了,所以就分出了140等级(0最高,139最低),把有跑来要运行的进程都挂在这些0到139的队列里,然后就可以从0的队列里找,如果0没有就1队列里找,这是第二代O(1),这个算法的是Ingo Molnar写的,请记住这个牛人的名字,因为在不久的将来,你会再次看到这个人的名字。

也许在我们凡人看来,这样的选择方法已经很好了,但是却有一个致命的缺点,就是没把副校长跟校长分开来,进程多了以后,可能有200个,校长级本来都是0级的了,CPU就从0级了选了个来的早的,一不小心让副校长先运行,这样是不合适的,所以这个缺点就是分的粒度不够,进程多了以后就不好用了。于是这位牛人Ingo Molnar,把前面辛辛苦苦写的算法,推倒了写出了一种全新的算法,解决了这个粒度不够的问题。一直用到现在linux4.0.1。这种放弃原有的所拥有的一切,而重新构造一种新的世界。这种勇气是我们应该学习的。

总结一下:

第一代O(n),从第一个找到最后一个看哪个优先级高;

第二代O(1),把优先级分成一百四十个等级,然后从最高的开始找,然而,进程多了以后,粒度不够细,把副教授跟正教授分到了一块;

第三代O(LgN),很牛,引入虚拟运行时间的概念,经本人刚刚查证,从Linux2.6.23(kernel/sched.c)到Linux4.0.1(linux-4.0.1\kernel\sched\fair.c)也就是现在都在用。

插入几个小的知识点:

goto通常被老师告诉说,一般情况不要使用,甚至有的书里都不对这个做介绍了,但在调度器里,内核使用goto语句,可以生成最优的汇编代码。


下期准备把第三代剖析下。

参考资料:

和朋友吹牛B的一些想法

Linux 调度器发展简述http://www.ibm.com/developerworks/cn/linux/l-cn-scheduler/

深入linux内核架构

深入理解linux内核