
第六章
進階的行程管理
在第 5 章介紹過行程的抽象概念,以及探討了核心用於建立、控制以及銷毀行程的
介面之後。本章接著會介紹建構這些概念的方法,我們首先會探討 Linux 行程排班器
(process scheduler)以及它的排班演算法(scheduling algorithm),然後會介紹進階的
行程管理介面。這些系統呼叫可用於操作行程的排班行為,影響排班器的行為以便達成
應用程式或用戶所要求的目標。
行程的排班
行程排班器
(
process scheduler
)是核心的一個子系統,用於把處理器時間(processor
time)這個有限的資源分配給系統的各個行程。換言之,行程排班器(或簡稱排班器)
是核心的一個元件,用於選擇下一個所要運行的行程。除了決定哪些行程可以運行以及
何時運行,排班器還負責最大化處理器的使用率,並同時提供「多個行程並行且無間隙
地執行的」效果。
本章中,我們將會談到許多關於
可運行
(
runnable
)行程的事情。可運行行程就是未受
阻擋的行程;
受阻擋的行程
(
blocked process
)就是進入休眠狀態、等待核心完成 I/O
的行程。如果行程會跟用戶互動、或者會大量地讀寫檔案、或者會回應網路事件,它們
往往會浪費很多時間在等待資源變為可用,此期間它們處在無法運行的狀態。假定只有
一個可運行行程,那麼行程排班器的工作並不重要:執行該行程就是了!然而,當可運
行行程的數量超過處理器時,排班器便可以證明它存在的價值。此狀況下,顯然必定會
有些行程處在運行狀態,有些行程則處在等待狀態。決定哪些行程可以運行、何時運行 ...