置換空間/交換空間(swap space)
想像一間小畫室,畫架上一次只放得下幾幅畫布,而走廊盡頭有個大儲藏室放其餘的一切。當你需要一幅在儲藏室裡的畫布,就去取來;當需要用畫架而全都滿了,就搬一幅回儲藏室。那間儲藏室就是置換空間:作業系統用來存放目前 RAM 裝不下之行程記憶體頁的磁碟區域,準備在它們再次被參考時帶回來。
具體來說,置換空間(也叫後備儲存)是磁碟或 SSD 上劃出的一塊區域,用來存放不在實體 RAM 常駐之記憶體頁的內容。它就是虛擬記憶體所倚賴的那個「別處」。它上面主要有兩種頁。匿名頁——行程的堆積與堆疊,背後沒有檔案——在被趕走時必須寫到置換空間,因為沒有別的地方可放。檔案支撐頁——可執行檔的程式碼,或記憶體映射檔案——通常不需要置換:原本的檔案裡已經有一份乾淨的副本,所以作業系統大可直接丟棄該頁框,稍後再從檔案重新載入。置換空間可以是專用分割區,也可以是一般檔案;作業系統會追蹤每個被換出的頁存放在哪裡,以便在下一次錯誤時找到它。
為什麼重要:置換空間正是把「記憶體比 RAM 大」這個錯覺實際兌現的東西——沒有後備儲存,就沒有地方放裝不下的頁,系統也就只能容納 RAM 容得下的量。它也在記憶體壓力下扮演安全閥,讓系統靠著把閒置的頁推出去而熬過暫時的尖峰。誠實的提醒是:置換在磁碟上,所以大量置換很慢,而一個被迫不斷置換的系統就是在輾轉,感覺像是機器當掉了。置換不是「額外的快速記憶體」——它是一個緩慢的溢位區,正因為在工作集放得下時很少被碰到,才有用。
在記憶體壓力下,作業系統挑出一個閒置的 4 KB 堆積頁(匿名、髒),把它寫到置換分割區,並釋放它的頁框給一個更急迫的頁。稍後,當擁有者又觸碰那個堆積頁時,一次分頁錯誤就把它從置換空間讀回來。
匿名頁去置換空間;乾淨的檔案支撐頁可以直接丟棄。
並非每個被趕走的頁都會被寫到置換空間。一個乾淨的、檔案支撐的頁(未修改的程式碼,或未寫過的映射頁)可以免費丟棄、再從它的檔案重新載入——只有髒頁或匿名頁才必須真的被寫出,這正是為什麼修改位元能省下這麼多磁碟流量。