天天看點

至今不敢寫一篇關于cfs的文章

linux核心在2.6.23種引入了一種完全公平的程序排程方式,就是cfs排程算法,該算法比起原來的O(1)算法來說确實簡便了不少,但是卻高效了很多,合理了很多。

我研究這個cfs算法已經快一年了,但是至今也不敢寫一篇關于它的文章,因為它太神聖了,太美妙了,像我這樣的文筆,我這樣糟糕的表達方式能做的僅僅是亵 渎cfs算法。cfs沒有用哪怕一種額外的補充算法,也沒有列舉很多額外的約定,隻是提供了一條,僅僅一條簡單的規則,引入了一個概念,虛拟時鐘的概念, 就可以把cfs表述的如此美妙,簡直令人叫絕,cfs中的無極變速思想更是讓人拍案,它徹底抛棄了時間片的概念,正是将排程決策引入一種更加靈活的方式, 實際上時間片是不合理的,無論何時保證公平才是合理的,有人會問,按照權值配置設定不同的時間片不也是很合理嗎?實際上每時每刻都讓每個程序感到公平你不覺得 更加合理嗎?時間片配置設定中,在目前時間片沒有完成之前,除了搶占是沒有辦法執行别的程序的,即使突然來了一位猛士,然而在cfs中,系統并不偏向在任何時 期的任何程序,即使該程序的時間片還沒有用完。cfs保證的是每時每刻的公平,cfs依據的是程序的執行時間,利用的是補償原理,cfs讓程序先超前運 行,然後補償别的程序,這樣很合理。另外cfs不用任何啟發算法,隻是一個虛拟時鐘就夠了,因為當程序睡眠的時候,其虛拟時鐘就不走了,這樣當然落後于别 的程序的虛拟時鐘,理應得到補償。

 本文轉自 dog250 51CTO部落格,原文連結:http://blog.51cto.com/dog250/1274302

繼續閱讀