虛擬記憶體與需求分頁

工作集(working set)

想像一位技師在工作中、放在車旁托盤上的那一小疊工具——不是整箱工具,只是這次特定維修此刻需要的那幾把扳手和套筒。隨著工作改變,托盤上的那一疊也跟著改變,但在任何時刻它都既小又具體。一個行程的工作集就是那個托盤:行程在最近這段過去裡實際用過的那組頁,而這是對它此刻需要留在手邊之頁的良好猜測。

具體來說,工作集是在一個窗內定義的:挑一個窗大小,比方說最近的 delta 次記憶體參考,工作集就是在那個窗內被觸碰過的相異頁所成的集合。隨著程式執行,這個集合在時間上向前滑動,納入程式新觸碰的頁、捨棄它已停止使用的頁。它的大小——工作集大小——衡量行程要舒適執行、不致不斷發生錯誤所真正需要的頁框數量。由於區域性,工作集通常遠小於程式的整個位址空間,而且只會逐漸變化,除非在程式切換到新階段(稱為區域性變遷)的急遽轉折時,例如從載入資料轉為處理資料。

為什麼重要:工作集是從區域性通往「該給一個行程多少記憶體」這個實務問題、再由此通往輾轉現象的橋樑。經驗法則既簡單又有力:若每個執行中的行程都能把它的工作集留在 RAM 常駐,錯誤就維持罕見、系統順暢執行;但若所有行程工作集的總和超過了可用頁框,就會有某個行程被迫以少於其工作集所需的頁框執行,錯誤暴增,系統便輾轉——把幾乎所有時間都花在分頁而非運算上。作業系統可以用這一點來決定恰當的多元程式規劃程度:只在行程的工作集放得下時才允許它進入。誠實的提醒是:真正的工作集需要未來的資訊,因此真實系統只能近似它,例如靠長期取樣參考位元。

在最近 10,000 次參考中,某行程觸碰了頁 {2, 3, 5, 9}。它的工作集就是這 4 頁,因此它約需 4 個頁框才能不致輾轉地執行。當它稍後進入觸碰 {40, 41, 42} 的新階段,工作集就滑向新的那些頁。

至少給一個行程相當於其工作集大小的頁框,否則它會輾轉。

工作集是在最近過去的一個窗內定義的,但它的目的是預測不久的未來——這只因為區域性才行得通。確切的集合在不見未來的情況下無法得知,因此真實作業系統只能估計它,而窗大小 delta 必須謹慎挑選。

又称
working-set model工作集合工作集模型