操作系統(tǒng)一般分為搶占式內核和非搶占式內核,通常RTOS都是搶占式內核。你知道搶占式內核和非搶占式內核的區(qū)別嗎?
非搶占式內核
非搶占式內核要求每個任務(線程)都做一些事情來明確放棄對 CPU 的控制,為了保持多任務并發(fā)的錯覺,必須要有這一步操作。
非搶占式調度也稱為協(xié)作多任務,任務相互協(xié)作以共享 CPU,異步事件仍然由 ISR 處理。ISR 可以使更高優(yōu)先級的任務準備好運行,但 ISR 總是返回到被中斷的任務。
只有當當前任務放棄 CPU 時,新的更高優(yōu)先級任務才會獲得對 CPU 的控制。
非搶占式內核的優(yōu)點之一是中斷延遲更低,在任務級別,非搶占內核也可以使用不可重入函數(shù)。每個任務都可以使用不可重入函數(shù),而不必擔心被另一個任務破壞。這是因為每個任務都可以在放棄 CPU 之前運行到完成。但是,不應允許不可重入函數(shù)放棄對 CPU 的控制。
使用非搶占式內核的任務級響應可能比前臺/后臺系統(tǒng)低得多,因為任務級響應現(xiàn)在由最長任務的時間給出。
非搶占式內核的另一個優(yōu)點是較少需要通過使用信號量來保護共享數(shù)據(jù)。每個任務都擁有 CPU,你不必擔心任務會被搶占。當然,這不是絕對的,在某些情況下,仍應使用信號量。共享 I/O 設備可能仍需要使用互斥信號量;例如,任務可能仍需要對打印機的獨占訪問。
(1) 任務正在執(zhí)行但被中斷。
(2) 如果中斷被使能,CPU 向量(跳轉)到 ISR。
(3) ISR 處理事件并使更高優(yōu)先級的任務準備好運行。
(4) ISR完成后,執(zhí)行返回指令,CPU返回被中斷的任務。
(5) 任務代碼在中斷指令之后的指令處恢復。
(6) 當任務代碼完成時,它調用內核提供的服務,將 CPU 交給另一個任務。
(7) 內核看到更高優(yōu)先級的任務已經準備好運行,因此,內核執(zhí)行上下文切換,以便它可以運行(即執(zhí)行)更高優(yōu)先級的任務來處理由 ISR 發(fā)出信號的事件。
非搶占式內核最重要的缺點是響應性:已準備好運行的較高優(yōu)先級任務可能需要等待很長時間才能運行,因為當前任務應該及時放棄CPU使用權。
與前臺/后臺系統(tǒng)中的后臺執(zhí)行一樣,非搶占式內核中的任務級響應時間是不確定的;你永遠不知道最高優(yōu)先級的任務何時才能獲得 CPU 的控制權。這個操作由你的應用程序來決定怎么時候放棄對 CPU 的控制。
總而言之,非搶占式內核允許每個任務運行,直到它自愿放棄對 CPU 的控制。中斷搶占任務,ISR 完成后,ISR 返回到被中斷的任務。任務級響應比前臺/后臺系統(tǒng)要好得多,但仍然是不確定的,因此,很少有商業(yè)內核是非搶占式的。
搶占式內核
μC/OS-II、RTT等大多數(shù)實時內核都是搶占式的,準備運行的最高優(yōu)先級任務始終被賦予 CPU 控制權。
當一個任務使更高優(yōu)先級的任務準備好運行時,當前任務被搶占(掛起)并且更高優(yōu)先級的任務立即獲得 CPU 的控制權。
如果 ISR 使更高優(yōu)先級的任務準備就緒,當 ISR 完成時,被中斷的任務被掛起并恢復新的更高優(yōu)先級任務。
(1) 任務正在執(zhí)行但被中斷。
(2) 如果中斷被使能,CPU 向量(跳轉)到 ISR。
(3) ISR 處理事件并使更高優(yōu)先級的任務準備好運行。ISR 完成后,調用內核提供的服務(即調用內核提供的函數(shù))。
(4) & (5) 該函數(shù)知道一個更重要的任務已經準備好運行,因此內核將執(zhí)行上下文切換并執(zhí)行更重要的代碼而不是返回到被中斷的任務任務。當更重要的任務完成時,內核提供的另一個函數(shù)被調用,讓任務進入休眠狀態(tài),等待事件(即 ISR)發(fā)生。
(6) & (7) 然后內核“看到”需要執(zhí)行一個較低優(yōu)先級的任務,并完成另一個上下文切換以恢復被中斷任務的執(zhí)行。
使用搶占式內核,最高優(yōu)先級任務的執(zhí)行是確定性的; 你可以確定它何時可以控制 CPU。 因此,通過使用搶占式內核可以最大限度地減少任務級響應時間。
使用搶占式內核的應用程序代碼不應使用不可重入函數(shù),除非通過使用互斥信號量確保對這些函數(shù)的獨占訪問,因為低優(yōu)先級和高優(yōu)先級任務都可以使用公共函數(shù)。 如果較高優(yōu)先級的任務搶占正在使用該功能的較低優(yōu)先級的任務,則可能會發(fā)生數(shù)據(jù)損壞。
總而言之,搶占式內核始終執(zhí)行準備運行的最高優(yōu)先級任務。 中斷搶占任務,完成 ISR 后,內核將繼續(xù)執(zhí)行準備運行的最高優(yōu)先級任務(而不是被中斷的任務)。 任務級別的響應是最佳的和確定性的,當系統(tǒng)響應性很重要時,建議使用搶占式內核。
審核編輯:湯梓紅
-
內核
+關注
關注
3文章
1416瀏覽量
41432 -
cpu
+關注
關注
68文章
11080瀏覽量
217085 -
操作系統(tǒng)
+關注
關注
37文章
7152瀏覽量
125584 -
中斷
+關注
關注
5文章
905瀏覽量
42803 -
ISR
+關注
關注
0文章
38瀏覽量
14801
原文標題:操作系統(tǒng)中搶占式和非搶占式內核的區(qū)別
文章出處:【微信號:strongerHuang,微信公眾號:strongerHuang】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
評論