程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 不可剝奪型內核與可剝奪型內核概述

不可剝奪型內核與可剝奪型內核概述

編輯:關於C語言
 

不可剝奪型內核

不可剝奪型內核要求每個任務自我放棄CPU的所有權。不可剝奪型調度法也稱作合作型多任務,各個任務彼此合作共享一個CPU。異步事件還是由中斷服務來處理。中斷服務可以使一個高優先級的任務由掛起狀態變為就緒狀態。但中斷服務以後控制權還是回到原來被中斷了的那個任務,直到該任務主動放棄CPU的使用權時,那個高優先級的任務才能獲得CPU的使用權。

不可剝奪型內核的一個優點是響應中斷快。在討論中斷響應時會進一步涉及這個問題。在任務級,不可剝奪型內核允許使用不可重入函數。函數的可重入性以後會討論。每個任務都可以調用非可重入性函數,而不必擔心其它任務可能正在使用該函數,從而造成數據的破壞。因為每個任務要運行到完成時才釋放CPU的控制權。當然該不可重入型函數本身不得有放棄CPU控制權的企圖。

使用不可剝奪型內核時,任務級響應時間比前後台系統快得多。此時的任務級響應時間取決於最長的任務執行時間。

不可剝奪型內核的另一個優點是,幾乎不需要使用信號量保護共享數據。運行著的任務占有CPU,而不必擔心被別的任務搶占。但這也不是絕對的,在某種情況下,信號量還是用得著的。處理共享I/O設備時仍需要使用互斥型信號量。例如,在打印機的使用上,仍需要滿足互斥條件。下圖示意不可剝奪型內核的運行情況,任務在運行過程之中,中斷來了,如果此時中斷是開著的,CPU由中斷向量進入中斷服務子程序,中斷服務子程序做事件處理,使一個有更高級的任務進入就緒態。中斷服務完成以後,中斷返回指令, 使CPU回到原來被中斷的任務,接著執行該任務的代碼直到該任務完成,調用一個內核服務函數以釋放CPU控制權,由內核將控制權交給那個優先級更高的、並已進入就緒態的任務,這個優先級更高的任務才開始處理中斷服務程序標識的事件。

不可剝奪型內核

不可剝奪型內核

不可剝奪型內核的最大缺陷在於其響應時間。高優先級的任務已經進入就緒態,但還不能運行,要等,也許要等很長時間,直到當前運行著的任務釋放CPU。與前後系統一樣,

不可剝奪型內核的任務級響應時間是不確定的,不知道什麼時候最高優先級的任務才能拿到CPU的控制權,完全取決於應用程序什麼時候釋放CPU。

總之,不可剝奪型內核允許每個任務運行,直到該任務自願放棄CPU的控制權。中斷可以打入運行著的任務。中斷服務完成以後將CPU控制權還給被中斷了的任務。任務級響應時間要大大好於前後系統,但仍是不可知的,商業軟件幾乎沒有不可剝奪型內核。

 

可剝奪型內核

當系統響應時間很重要時,要使用可剝奪型內核。因此,μC/OS-Ⅱ以及絕大多數商業上銷售的實時內核都是可剝奪型內核。最高優先級的任務一旦就緒,總能得到CPU的控制權。當一個運行著的任務使一個比它優先級高的任務進入了就緒態,當前任務的CPU使用權就被剝奪了,或者說被掛起了,那個高優先級的任務立刻得到了CPU的控制權。如果是中斷服務子程序使一個高優先級的任務進入就緒態,中斷完成時,中斷了的任務被掛起,優先級高的那個任務開始運行。如下圖所示。

可剝奪型內核

可剝奪型內核

使用可剝奪型內核,最高優先級的任務什麼時候可以執行,可以得到CPU的控制權是可知的。使用可剝奪型內核使得任務級響應時間得以最優化。

使用可剝奪型內核時,應用程序不應直接使用不可重入型函數。調用不可重入型函數時,要滿足互斥條件,這一點可以用互斥型信號量來實現。如果調用不可重入型函數時,低優先級的任務CPU的使用權被高優先級任務剝奪,不可重入型函數中的數據有可能被破壞。綜上所述,可剝奪型內核總是讓就緒態的高優先級的任務先運行,中斷服務程序可以搶占CPU,到中斷服務完成時,內核讓此時優先級最高的任務運行(不一定是那個被中斷了的任務)。任務級系統響應時間得到了最優化,且是可知的。μC/OS-Ⅱ屬於可剝奪型內核。

 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved