眾所周知,RTOS與其他OS的區別在于:
任務的(最遲)完成時間(Deadline)是可確定預知的。
但是一直不清楚這個機制是怎么實作的。
希望擁有大神解答一下。
uj5u.com熱心網友回復:
我覺得你說的不準確,不能說任務的完成時間,只能說任務的切換時間是可確定的。在多任務環境下,任務啟動后,一般是只有阻塞和運行的區分,完成了豈不是任務退出了。多任務環境下,硬實時作業系統可以確保最高優先級的任務在預期時間內得到CPU控制權,但如果軟體本身設計不合理,那么是不可能正常執行的。舉個例子:
時間片為10ms,只用了2個優先級,高、低優先級各有5個任務,高優先級可以搶占低優先級,同等優先級之間輪轉。如果每個高優先級任務沒有交出CPU的時間(比如呼叫個sleep或阻塞等待信號量之類的函式),那么這5個高優先級將會每個使用10ms輪流運行一次,然后再運行第二次,……,低優先級永遠得不到機會運行。在這個例子里沒有完成的概念,只有切換時機是確定的。
一般要的可確定是指,比如硬體中斷發生時,從任何一個任務或低優先級中斷切到高優先級中斷的時間是可確定的,這樣就能保證實時回應,所以系統設計是關鍵!
uj5u.com熱心網友回復:
哇,謝謝,有了一些理解了??????uj5u.com熱心網友回復:
我閱讀過rtthread的原始碼,rt的話每個執行緒會記錄一個tick這個tick的單位是 1個系統的心跳,一般這個心跳就是一個硬體定時器中斷(一般設定為10ms),每次觸發中斷會+1并啟動調度器。調度器會判斷執行緒是否到達了你設定的最大時間,如果到達了超時時間,調度器會尋找優先級較高且已經是準備態的執行緒,并運行它。轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/78611.html
標籤:驅動開發/核心開發
