CPU 排程
老化(aging)
想像熟食櫃檯為了公平,每等一分鐘就偷偷給你一個稍微好一點的號碼——等得夠久,連卑微的訂單也會升到最前面。老化正是把這個把戲套用到優先權上:一個行程在就緒佇列中等得越久,它的有效優先權就逐漸被提高,於是沒有人會永遠等下去。
它的運作方式:排程器週期性地把每個等待中行程的優先權提升一點點,每隔一段時間提升一小幅。一個本來會被永久壓過的低優先權工作會慢慢爬升;等待夠久後,它被拉高的優先權終究超過新來者,它便終於拿到 CPU。它一旦執行,優先權可被重設回基準值。老化的速率是個調校旋鈕——太慢則飢餓幾乎沒紓解,太快則原本的優先權失去意義。
為什麼重要:老化是優先權式排程中對付飢餓的標準、簡單解法,而同樣的想法在作業系統各處——凡是固定優先權可能讓某人卡住的地方——都會重現。它把無上限的等待轉成有上限的等待——「你終究會執行」的保證——同時大部分時間又不丟棄優先權帶來的好處。它是個小機制,卻在讓優先權排程真正可用上扮演了過大的角色。
一個工作以優先權 10(低)開始。老化讓它每等 5 毫秒就把優先權加 1。等待夠久後它的數字爬到忙碌的優先權 2 工作流之上,於是它終於被排到——把它的等待設了上限,而不是讓它永遠餓死。
老化穩定地提升一個久等工作的優先權,直到它終究必須執行。
此處的老化(隨等待時間提升優先權)是針對飢餓的「排程」解法;別把它和分頁置換的老化演算法混淆,後者是用參考位元的完全不同機制。
另見