虛擬記憶體與記憶體映射

置換與置換空間

當實體 RAM 用滿、程式卻還需要更多時,作業系統會向磁碟借空間:它把最近沒用到的頁複製到磁碟上一塊保留區域,釋放它們佔用的頁框給別人用,並在那些頁日後再被碰觸時把它們帶回來。置換(swapping,又稱分頁到磁碟)就是這種在 RAM 與磁碟之間搬移頁的動作;那塊保留的磁碟區域就是置換空間(swap space,一個置換分割區或一個置換檔)。

逐步來說:當 RAM 吃緊時,作業系統挑一個短期內不太可能用到的犧牲頁(用存取位元與髒位元來猜),若它被修改過就把它寫進置換空間,並把它的分頁表項標成「不存在」,同時記住它現在在磁碟上的哪裡。那個頁框現在空出來了。日後若程式又碰那個虛擬位址,MMU 引發一次分頁錯誤;作業系統把該頁從置換空間讀回一個新頁框、修好表項、繼續執行。程式只感覺到一陣停頓——它的資料看來完好無損,已經悄悄繞了磁碟一圈。

這就是讓一台機器執行比其 RAM 還大的工作集的方法,但取捨非常物理:磁碟比 RAM 慢上好幾千倍,所以每一個必須回來的被置換頁,都是一次昂貴的主要分頁錯誤。少量置換能撫平尖峰;大量、持續的置換就是輾轉(thrashing),機器花在搬頁上的時間比運算還多,幾乎停擺。置換只有在真正熱門的資料仍裝得進 RAM 時,才能優雅地擴充容量。

開太多吃資源的應用程式,空閒 RAM 掉到接近零;作業系統開始把閒置的頁寫進置換空間。切回一個你晾在一旁許久的應用程式時,會卡頓一下——那陣停頓就是它的頁正按需從置換空間讀回來。

閒置的頁停放在磁碟上;再碰它們時得付出緩慢的讀回成本。

置換不是「更多 RAM」——它是在壓力下頂替 RAM 的、慢得多的磁碟。加置換能讓機器不至於死掉,卻無法讓它變快;若熱門工作集超過 RAM,結果是輾轉,而不是更快。

又称
paging to diskswappage file置換置換空間