天天看點

搶占式和非搶占式核心

非搶占式核心

非搶占式核心:高優先級的程序不能中止正在核心中運作的低優先級的程序而搶占CPU運作。程序一旦處于核心态(例如使用者程序執行系統調用),則除非程序自願放棄CPU,否則該程序将一直運作下去,直至完成或退出核心

中斷服務可以使一個高優先級的任務由挂起狀态變為就緒狀态。但中斷服務以後控制權還是回到原來被中斷了的那個任務,直到該任務主動放棄CPU的使用權時,那個高優先級的任務才能獲得CPU的使用權。非搶占式核心如下圖所示。

搶占式和非搶占式核心

非搶占式核心的優點有:

中斷響應快(與搶占式核心比較);

允許使用不可重入函數;

幾乎不需要使用信号量保護共享資料。運作的任務占有CPU,不必擔心被别的任務搶占。這不是絕對的,在列印機的使用上,仍需要滿足互斥條件。

非搶占式核心的缺點有:

任務響應時間慢。高優先級的任務已經進入就緒态,但還不能運作,要等到目前運作着的任務釋放CPU。

非搶占式核心的任務級響應時間是不确定的,不知道什麼時候最高優先級的任務才能拿到CPU的控制權,完全取決于應用程式什麼時候釋放CPU。

可搶占式核心

核心搶占(可搶占式核心):即當程序位于核心空間時,有一個更高優先級的任務出現時,如果目前核心允許搶占,則可以将目前任務挂起,執行優先級更高的程序。

如果是中斷服務子程式使一個高優先級的任務進入就緒态,中斷完成時,中斷了的任務被挂起,優先級高的那個任務開始運作。搶占式核心如下圖所示。

搶占式和非搶占式核心

搶占式核心的優點有:

使用搶占式核心,最高優先級的任務什麼時候可以執行,可以得到CPU的使用權是可知的。使用搶占式核心使得任務級響應時間得以最優化。

參考文章

  1. ​​Linux核心态搶占機制分析​​

繼續閱讀