當CPU空閑時它都在做什么?
在 上篇文章中 我說了操作系統行為的基本原理是,在任何一個給定的時刻,在一個 CPU 上有且只有一個任務是活動的。但是,如果 CPU 無事可做的時候,又會是什么樣的呢?
事實證明,這種情況是非常普遍的,對于絕大多數的個人電腦來說,這確實是一種常態:大量的睡眠進程,它們都在等待某種情況下被喚醒,差不多在 100% 的 CPU 時間中,都處于虛構的“空閑任務”中。事實上,如果一個普通用戶的 CPU 處于持續的繁忙中,它可能意味著有一個錯誤、bug、或者運行了惡意軟件。
因為我們不能違反我們的原理,一些任務需要在一個 CPU 上激活。首先是因為,這是一個良好的設計:持續很長時間去遍歷內核,檢查是否有一個活動任務,這種特殊情況是不明智的做法。最好的設計是沒有任何例外的情況。無論何時,你寫一個 if 語句,Nyan Cat 就會喵喵喵。其次,我們需要使用空閑的 CPU 去做一些事情,讓它們充滿活力,你懂得,就是創建天網計劃唄。
因此,保持這種設計的連續性,并領先于那些邪惡計劃一步,操作系統開發者創建了一個空閑任務,當沒有其它任務可做時就調度它去運行。我們可以在 Linux 的 引導過程 中看到,這個空閑任務就是進程 0,它是由計算機打開電源時運行的第一個指令直接派生出來的。它在 rest_init 中初始化,在 initidlebootup_task 中初始化空閑調度類scheduling class。
簡而言之,Linux 支持像實時進程、普通用戶進程等等的不同調度類。當選擇一個進程變成活動任務時,這些類按優先級進行查詢。通過這種方式,核反應堆的控制代碼總是優先于 web 瀏覽器運行。盡管在通常情況下,這些類返回 NULL,意味著它們沒有合適的任務需要去運行 —— 它們總是處于睡眠狀態。但是空閑調度類,它是持續運行的,從不會失敗:它總是返回空閑任務。
責任編輯:任我行
-
碳中和戰略|趙英民副部長致辭全文
2020-10-19碳中和,碳排放,趙英民 -
兩部門:推廣不停電作業技術 減少停電時間和停電次數
2020-09-28獲得電力,供電可靠性,供電企業 -
國家發改委、國家能源局:推廣不停電作業技術 減少停電時間和停電次數
2020-09-28獲得電力,供電可靠性,供電企業
-
碳中和戰略|趙英民副部長致辭全文
2020-10-19碳中和,碳排放,趙英民 -
深度報告 | 基于分類監管與當量協同的碳市場框架設計方案
2020-07-21碳市場,碳排放,碳交易 -
碳市場讓重慶能源轉型與經濟發展并進
2020-07-21碳市場,碳排放,重慶
-
兩部門:推廣不停電作業技術 減少停電時間和停電次數
2020-09-28獲得電力,供電可靠性,供電企業 -
國家發改委、國家能源局:推廣不停電作業技術 減少停電時間和停電次數
2020-09-28獲得電力,供電可靠性,供電企業 -
2020年二季度福建省統調燃煤電廠節能減排信息披露
2020-07-21火電環保,燃煤電廠,超低排放
-
四川“專線供電”身陷違法困境
2019-12-16專線供電 -
我國能源替代規范法律問題研究(上)
2019-10-31能源替代規范法律 -
區域鏈結構對于數據中心有什么影響?這個影響是好是壞呢!