短作業優先排程:從就緒佇列中選擇**預估執行時間(突發時間)最短**的行程/作業,分配 CPU 執行。
| 模式 | 特點 | 優點 | 缺點 |
|---|---|---|---|
| 非搶佔式 SJF | 行程一旦開始執行,跑完才放 CPU | 實作簡單、無上下文切換開銷 | 長作業可能飢餓;若短作業剛到達,需等待長作業結束 |
| 搶佔式 SJF (SRTF, Shortest Remaining Time First) | 新到達行程若剩餘時間 < 當前行程剩餘時間,搶佔 CPU | 平均等待時間最短(理論最優) | 頻繁切換開銷大;需準確預估剩餘時間;長作業嚴重飢餓 |
行程 到達時間 突發時間
P1 0 6
P2 1 4
P3 2 2
P4 3 3
執行順序:
t=0: P1 開始 (唯一就緒)
t=6: P1 結束,就緒佇列 {P2(4), P3(2), P4(3)} → 選 P3 (最短 2)
t=8: P3 結束,就緒 {P2(4), P4(3)} → 選 P4 (3)
t=11: P4 結束,執行 P2 (4)
t=15: 全結束
等待時間:P1=0, P2=10, P3=6, P4=8 → 平均 = 6.0
(若 FCFS:P1=0, P2=5, P3=8, P4=10 → 平均 = 5.75,此例 FCFS 較好,但 SJF 平均表現優於 FCFS)
τ(n+1) = α * T(n) + (1-α) * τ(n),α ∈ [0,1](典型 0.5),T(n) 為上次實際執行時間,τ(n) 為上次預估值。priority = base + wait_time * factor)。SJF 是**平均等待時間理論最優**的排程演算法(非搶佔式對所有到達時間相同時;搶佔式 SRTF 對任意到達時間)。實際部署需解決**執行時間預估、飢餓防護、搶佔開銷**三大工程問題,常以 MLFQ、CFS 等近似實現取代純 SJF。