CPU 排程
即時排程(real-time scheduling)
有些運算附帶一個碼錶:一個太晚決定的安全氣囊控制器,即使答案正確也算失敗;一個晚一瞬間解出影格的影片播放器,只是顯示一下小小的卡頓。即時排程講的是「趕上截止期限」,而不只是「終究做完」——它的目標是正確的時機,在錯的時間給出對的結果,可能和給出錯的結果一樣糟。
關鍵區分是硬即時與軟即時。在硬即時系統中,錯過一次截止期限就是失敗——煞車就是必須及時鬆開,沒有商量——所以排程器必須保證每個任務都在它的截止期限前完成,這通常需要事先知道任務的時序、且只接納一組可排程的任務。在軟即時系統中,截止期限很重要,但偶爾錯過是可容忍的、只是降低品質(掉一個音訊取樣、遲一格畫面)。即時排程通常使用與時序需求綁定的優先權,並要求又小又有上限的分派延遲,好讓一個剛就緒的緊急任務能即時先佔。
為什麼重要與一個陷阱:一般以公平為導向的排程器在這裡是錯的,因為公平不是目標——可預測性才是。經典的即時演算法包括率單調(依任務重複的頻率給固定優先權)與最早截止期限優先(依哪個截止期限最近給動態優先權)。這個場合裡惡名昭彰的危險是優先權反轉:一個高優先權任務被卡住,等一個低優先權任務持有的資源,這可能造成錯過截止期限;標準解法是優先權繼承,讓持有資源者暫時借用等待者的高優先權。
一架無人機的飛控必須每 5 毫秒讀一次陀螺儀並調整馬達、絕不能漏——那是硬即時;錯過一次截止期限可能讓它墜毀。它的音樂播放器也應準時解碼音訊,但偶爾遲到的取樣只是發出一聲喀噠——那是軟即時。
硬即時意味著錯過截止期限就是失敗;軟即時意味著它只是降低品質。
即時不等於快——它意味著可預測。一個慢但保證準時的系統是即時的;一個飛快卻最壞情況延遲不可預測的系統則不是。
另見