CPU 排程(CPU scheduling)
想像一個忙碌的廚房料理台,只有一位廚師,卻同時來了十幾張訂單,每張都想搶廚師的雙手。任何一瞬間只能處理一張訂單,於是必須有人決定下一個輪到誰、做多久、以及當某張訂單得等烤箱時該怎麼辦。CPU 排程就是電腦裡的這個決策:通常只有一顆 CPU 核心(或少數幾顆),卻有許多行程與執行緒都想執行,作業系統必須不斷選出下一個要跑的對象。
它實際上是這樣運作的。作業系統把準備好可以執行的行程放進一個就緒佇列(ready queue)。當正在執行的行程無法再使用 CPU 時——因為它做完了、或它要求讀取磁碟而必須等待、或它的時間配量用完了——排程器(也就是政策)會從就緒行程中挑一個,分派器(也就是機制)便載入它先前儲存的狀態、跳進它的程式碼,把 CPU 交給它。這每秒會發生數千次,遠快於人能察覺,所以單一核心看起來才能同時跑你的瀏覽器、音樂與編輯器。
為什麼重要:排程政策默默地塑造了整台機器給人的感受。好的政策能讓 CPU 保持忙碌、把工作快速做完,同時又讓你打字不卡;差的政策則可能讓一個吃重的工作霸佔一切,其他人乾等。沒有單一最佳政策——互動應用要的快速反應,與批次工作要的高產出率,方向是相反的,所以每個真實作業系統都會挑一個針對其使用者調校過的折衷方案。
三個工作在同一刻抵達,各需 4 毫秒的 CPU。在一顆核心上它們無法同時跑;排程器以某種順序執行它們——例如先 A、再 B、再 C——於是 A 在第 4 毫秒完成、B 在第 8 毫秒、C 在第 12 毫秒。換個順序、或把它們交錯執行,每個工作的等待時間就會改變。
當只有一顆 CPU 卻有多個就緒工作時,作業系統唯一能動的把手就是順序與時機——這就是排程。
排程並不會讓任何單一工作跑得更快——不論怎麼排,CPU 做的事一樣多。它只改變順序與時機,而這正是影響等待與反應速度的關鍵。