Priority Scheduling

Introduction

每個 process 有一個 priority number,CPU 給優先級最高的 process。OS 通常數字越小 priority 越高

可以是 preemptivenonpreemptiveSJF 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 () 不同