虛擬記憶體與需求分頁

需求分頁的有效存取時間(effective access time)

想像你大部分的電話都瞬間接通,但每一千通裡有一通會把你丟進漫長的等候隊伍。你每通電話的平均等待時間並不是那個瞬間時間——而是大部分時候的瞬間時間,再加上一小段那可怕的等候時間。若等候極其漫長,即使千分之一也能毀掉你的平均值。需求分頁的有效存取時間就是這同一種加權平均,套用到記憶體上:一次記憶體參考平均要花的時間,把快速的常見情況(頁在 RAM 裡)與罕見而緩慢的情況(一次分頁錯誤)混合在一起。

具體來說,設 ma 為正常的記憶體存取時間、p 為分頁錯誤率。有效存取時間是一個加權平均:EAT = (1 - p) x ma + p x(頁錯誤服務時間)。第一項涵蓋常見情況,此時頁是常駐的,存取只花 ma。第二項涵蓋一次錯誤,其服務時間由一次磁碟讀取主導,因此遠大於 ma——往往大約差十萬倍。由於那次錯誤的成本如此巨大,整個公式對 p 極其敏感:錯誤率的小幅上升會造成 EAT 的大幅上升。(更精細的版本會把錯誤成本拆成有空閒頁框的快速情況,與必須先把髒犧牲頁寫出的較慢情況。)

為什麼重要:這條公式把模糊的擔憂「分頁很慢」變成一個精確、可預測的數字,並確切說明了為什麼分頁錯誤率必須維持得低得驚人。它是虛擬記憶體中每一項設計決策的量化骨幹:給一個行程多少頁框、採用哪種分頁置換策略、是否要預先分頁。它也傳達了整個主題最核心的誠實訊息:虛擬記憶體只有在錯誤罕見時才便宜;一旦讓 p 悄悄爬升,平均記憶體存取就可能慢上好幾個數量級,而這正是系統開始輾轉(thrashing)時所發生的事。

在 ma = 200 奈秒、錯誤服務時間為 8 毫秒的情況下,錯誤率 p = 十萬分之一(0.00001)給出 EAT = (1 - 0.00001) x 200 + 0.00001 x 8,000,000 = 約 200 + 80 = 280 奈秒——僅僅十萬次存取一次錯誤就帶來 40% 的變慢。

即使十萬次存取才一次錯誤,也能讓平均記憶體存取慢上 40%。

EAT 是平均值,而非對任何單次存取的保證。一次命中 RAM 的參考很快;一次發生錯誤的參考則慢上數百萬倍。這條公式告訴你長期的混合結果,而那正是決定系統是好用還是卡頓的關鍵。

又称
EAT有效存取時間平均存取時間