天天看點

linux程序排程淺析

linux程序排程淺析

作業系統要實作多程序,程序排程必不可少。

有人說,程序排程是作業系統中最為重要的一個部分。我覺得這種說法說得太絕對了一點,就像很多人動辄就說"某某函數比某某函數效率高XX倍"一樣,脫離了實際環境,這些結論是比較片面的。

而程序排程究竟有多重要呢? 首先,我們需要明确一點:程序排程是對TASK_RUNNING狀态的程序進行排程(參見《linux程序狀态淺析》)。如果程序不可執行(正在睡眠或其他),那麼它跟程序排程沒多大關系。

是以,如果你的系統負載非常低,盼星星盼月亮才出現一個可執行狀态的程序。那麼程序排程也就不會太重要。哪個程序可執行,就讓它執行去,沒有什麼需要多考慮的。

反之,如果系統負載非常高,時時刻刻都有N多個程序處于可執行狀态,等待被排程運作。那麼程序排程程式為了協調這N個程序的執行,必定得做很多工作。協調得不好,系統的性能就會大打折扣。這個時候,程序排程就是非常重要的。

盡管我們平常接觸的很多計算機(如桌面系統、網絡伺服器、等)負載都比較低,但是linux作為一個通用作業系統,不能假設系統負載低,必須為應付高負載下的程序排程做精心的設計。

當然,這些設計對于低負載(且沒有什麼實時性要求)的環境,沒多大用。極端情況下,如果CPU的負載始終保持0或1(永遠都隻有一個程序或沒有程序需要在CPU上運作),那麼這些設計基本上都是徒勞的。