linux核心代碼研究——進程調度總結

來源:互聯網
上載者:User

進程分為I/O消耗型和處理器消耗型,I/O消耗型一般指和使用者互動性大的進程,不會持續佔用CPU但是一段時間內不能阻塞,保持暢通。處理器消耗型進程在獲得CPU時,利用率會高達100%,可以阻塞,不用保持可運行態。

linux進程的狀態可分為五種狀態,狀態記錄於進程描述符中的state域的標誌,

TASK_RUNNING 進程可執行,或者在執行或者在活動隊列中等待。

TASK_INTERRUPTIBLE 進程被阻塞,等待某些條件的達成,一旦條件達成,核心就會把進程狀態設定為TASK_RUNNING,處於此狀態的進程也會因為接收到訊號而被提前喚醒並投入使用

TASK_UNINTERRUPTIBLE 此狀態的進程不會接收訊號,其他特徵與TASK_INTERRUPTIBLE相同

TASK_ZOMBLE 僵死,進程已經結束,但是父進程調用釋放該進程的系統調用,為了父進程能感知到該進程的存在,進程描述符保留,此時的狀態就是僵死狀態

TASK_STOPPED  停止,進程停止執行,進程沒有投入運行也不能投入運行

進程的狀態由描述符中的state域儲存,另一個重要的資訊就是進程的優先順序,普通優先順序和即時優先順序,顧名思義,即時優先順序要比普通優先順序高,而linux中是優先順序數值越小,優先順序越高,即時優先順序的數值範圍為0-99,而普通優先順序範圍是100-140,我們主要關注普通優先順序。

普通優先順序由nice值來表示範圍-20到19,共40個數字,與剛才提到的100-140一一對應。nice值預設是0,nice數值越小優先順序越高,同時nice值還影響時間片長短,nice值越低時間片越長。其實優先順序和時間片長短是有關係的,像一些互動性很強需要及時響應使用者操作的進程優先順序必定很高,同時也必須獲得較長的時間片來保證處於可運行狀態。nice值越大也就代表著這個進程可運行並且可搶佔。

時間片被用完的進程由活動隊列放入到期隊列,直到活動隊列所有的進程時間片都用完,此時再重新計算時間片,這時候需要考量的因素有該進程是I/O消耗型還是處理器消耗型等因素,linux採取的方法是活動放入到期隊列之前為每個進程計算好下一次的時間片,然後當活動隊列為空白時,到期隊列變為活動隊列,原來的活動隊列再變為到期隊列,正是這樣一個樸素的思想保證重新計算時間片的複雜度為O(1).

時間片的概念是保證進程在此時間片內在活動隊列,而並不是在此期間一直享有CPU,某進程可能會因為條件不滿足而讓出CPU或者被其他優先順序較高的進程搶佔。

說到優先順序,linux系統是如何快速感知到活動隊列中的進程優先順序呢?

位元影像,linux每個活動隊列中包含兩個優先順序數組,一個活躍的一個到期的,優先順序數組包含優先順序位元影像,剛才提到約有140個優先順序數,位元影像包含160位,為每一個優先順序分配一位,開始所有的位置零,當某個優先順序進程準備執行時,相應的位就會被置一。每個優先順序還對應一個層級鏈表,此鏈表裡包含所有該層級的進程。在活動優先順序找到被置一的位,然後找到層級鏈表中的進程,此進程被調度執行。這樣做的好處是不用迴圈所有進程,因此系統進程數對該方法無影響,它所用的時間是恒定的。

上面說到關於進程調度的功能都是由schedule()方法觸發的。

下面說到的睡眠由schedule()來完成的,有些進程是因為條件不滿足需要進入睡眠狀態,如果一旦設定為休眠狀態,有可能無休止的休眠下去,所以現在的代碼使用的遞迴,就是在判斷條件不滿足並且未接收到喚醒訊號後再次調用schedule()函數,保證進程的狀態根據實際情況及時更新。喚醒操作由wake_up()進行,如果被喚醒的進程比當前正在執行的進程優先順序高,還要設定need_resched標誌。通常哪段代碼促使條件達成,就要負責隨後調用wake_up()函數。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.