CPU 排程

最早截止期限優先排程(earliest-deadline-first)

/ EDF /

想像一個學生同時應付好幾份作業:聰明的做法是永遠先做最快到期的那份,且一旦出現更緊急的就立刻切換。最早截止期限優先(EDF)排程對即時任務做的正是這個策略——在每一刻,執行截止期限最近的就緒任務,並在每當有新任務抵達或截止期限變動時重新評估。

它與率單調的不同:EDF 動態地指派優先權。沒有固定的排名;此刻絕對截止期限最近的任務就是此刻優先權最高的,而這會隨截止期限逼近而時時刻刻改變。它是先佔式的——一個剛抵達、截止期限更近的任務會立刻擠掉正在執行的。EDF 的招牌性質是它對單一處理器而言是最佳的:若任何排程演算法能趕上某任務集的所有截止期限,EDF 也能,而且它能做到高達 100% 的 CPU 使用率(對截止期限等於週期的任務),勝過率單調約 69% 的上限。

為什麼重要與取捨:EDF 在仍趕上截止期限的同時把 CPU 榨到最多,這正是它對軟即時、以及某些硬即時系統有吸引力的原因。代價是誠實的:動態追蹤與重新排序截止期限比固定優先權有更多執行期開銷,而它在超載下的行為是危險的——若任務集一旦變得不可行,EDF 可能連鎖崩成一連串錯過的截止期限,而非優雅地失敗;相對地,固定優先權方案傾向先犧牲最低優先權的任務。超載下的可預測性,正是許多硬即時系統仍偏好率單調的原因。

在時刻 0,任務 X 的截止期限是 30、任務 Y 是 20。EDF 先跑 Y,因為 20 較近。若在時刻 10,任務 Z 抵達且截止期限是 15,EDF 先佔並改跑 Z,然後回到 Y、再到 X——永遠服務最近的截止期限。

EDF 永遠執行最近截止期限的任務、可達滿 CPU 使用率——但在超載下會不可預測地崩壞。

EDF 在理論上最佳、可達 100% 使用率,但僅當系統「未」超載時;一旦把它推過可行性,它可能連鎖錯過許多截止期限,不像固定優先權方案那樣較優雅地降級。

又稱
EDF最早期限優先排程