排程演算法的評估 (Algorithm Evaluation)
本系列文章內容參考自經典教材 Operating System Concepts, 10th Edition (Silberschatz, Galvin, Gagne)。本文對應章節:Section 5.8 Algorithm Evaluation。
前言:為什麼需要評估方法?
在前幾節介紹了許多排程演算法(FCFS、SJF、RR、Priority、Multilevel Queue 等),每種都有不同特 性。面對一個真實的系統,該怎麼選?
問題的核心在於:不同的評估標準(Criteria)會導致不同的最佳選擇。例如:
- 目標是最大化 CPU 利用率(CPU Utilization)且回應時間不超過 1 秒,和
- 目標是最大化 Throughput 且 Turnaround Time 與總執行時間成線性正比,
這兩個目標可能指向完全不同的演算法。因此,選擇演算法的第一步是先定義評估標準,再對所有候選演算法進行評估。
本節介紹四種評估方法,從最簡單到最精確排列如下:
四種方法各有取捨,越往右越貼近真實環境,但所需的時間與資源成本也越高。以下依序介紹。
5.8.1 確定性建模 (Deterministic Modeling)
什麼是確定性建模?
確定性建模(Deterministic Modeling)屬於分析評估(Analytic Evaluation)的一種,也是最簡單的一類。其核心思路是:給定一個固定的、事先知道的工作負載(Predetermined Workload),計算每種演算法在這個工作負載下的效能數值,再加以比較。
這個方法的前提很強烈:所有 Process 的 CPU Burst Time 必須事先完全已知。這在現實中通常不成立,但在理論分析和教學場景中非常有用。
範例演算
以下是一個經典的教科書範例。假設系統中有 5 個 Process,全部在時間 0 到達,CPU Burst Time 分別如下:
| Process | Burst Time (ms) |
|---|---|
| P1 | 10 |
| P2 | 29 |
| P3 | 3 |
| P4 | 7 |
| P5 | 12 |
考慮三種排程演算法:FCFS、SJF(Non-preemptive)、RR(quantum = 10 ms)。哪一種平均等待時間(Average Waiting Time)最短?
下圖呈現三種演算法的甘特圖(Gantt Chart)與計算結果:
各演算法的計算過程:
FCFS(按到達順序:P1, P2, P3, P4, P5):
- 等待時間:P1=0, P2=10, P3=39, P4=42, P5=49
- 平均等待時間:(0 + 10 + 39 + 42 + 49) / 5 = 28 ms
SJF(按 Burst Time 由短到長:P3, P4, P1, P5, P2):
- 等待時間:P1=10, P2=32, P3=0, P4=3, P5=20
- 平均等待時間:(10 + 32 + 0 + 3 + 20) / 5 = 13 ms
RR(quantum = 10 ms,執行順序:P1, P2, P3, P4, P5, P2, P5, P2):
- 等待時間:P1=0, P2=32, P3=20, P4=23, P5=40
- 平均等待時間:(0 + 32 + 20 + 23 + 40) / 5 = 23 ms
RR 的等待時間定義與 FCFS/SJF 相同:Process 在 Ready Queue 中乾等、沒有使用 CPU 的總時間。由於 RR 會多次搶占,一個 Process 可能分成好幾段才跑完,每次被搶占後重新排隊等待的時間都要累加進去。
以 P2(Burst = 29ms)為例,逐段追蹤如下:
| 時間區間 | P2 的狀態 | 等待累計 |
|---|---|---|
| t=0 → 10 | 在 Queue 等 P1 跑完 | +10ms |
| t=10 → 20 | 執行(第 1 個量子) | — |
| t=20 → 40 | 在 Queue 等 P3、P4、P5 各跑一輪 | +20ms |
| t=40 → 50 | 執行(第 2 個量子) | — |
| t=50 → 52 | 在 Queue 等 P5 跑完剩餘 2ms | +2ms |
| t=52 → 61 | 執行(第 3 段,9ms,完成) | — |
P2 總等待時間:10 + 20 + 2 = 32ms
在這個工作負載下,SJF 的平均等待時間不到 FCFS 的一半,RR 居中。從數學上可以證明,當所有 Process 在時間 0 同時到達時,SJF 永遠是平均等待時間最短的演算法。