Priority Scheduling
Introduction
每個 process 有一個 priority number,CPU 給優先級最高的 process。OS 通常數字越小 priority 越高
可以是 preemptive 或 nonpreemptive。SJF scheduling 本質上就是 priority scheduling,只是 priority = burst time 的倒數
Problem & Solution
Problem: Starvation
低優先級的 process 如果一直有高優先級的 process 插隊,可能永遠等不到 CPU
Solution: Aging
解法是隨著等待時間增加,逐漸提高 process 的 priority,確保最終一定會被排到
Variations
1. Priority + Round-Robin
如果有多個相同 priority 的 process 怎麼辦,我們可以用 Round-Robin Scheduling 的方式輪流跑同一個 priority 的 processes 然後等這些 process 都跑完
2. Multilevel Queue Scheduling
每個 priority 有獨立的 queue,scheduler 永遠先服務最高 priority 的 queue,那個 queue 空了才往下
實際上通常按 process 類型分層:
Real-Time Processes ← 最高優先
System Processes
Interactive Processes
Batch Processes ← 最低優先
缺點:process 被固定在某個 queue 無法上下移動可能會 starvation
3. Multilevel Feedback Queue Scheduling
改進版:process 可以在 queue 之間移動
For example,
Q0(RR, q=8) → 新 process 都從這裡進
Q1(RR, q=16) → Q0 跑不完就降到這裡
Q2(FCFS) → Q1 還跑不完再降到這裡
短工作在 Q0 就跑完離開;長工作被逐層降級,q 越來越大,最終在 Q2 用 FCFS 慢慢跑完。
這樣自動把 process 依行為分類:不需要事先知道 burst time,讓行為本身決定它該待哪層
不同層的 time quantum () 不同