虛擬記憶體與記憶體映射
分頁與頁框
轉譯不是逐個位元組進行的——那會需要一張有上億筆的地圖。取而代之,記憶體被切成大小相同的區塊。分頁(page)是虛擬定址空間中這樣一個固定大小的區塊;頁框(frame,或 page frame)則是實體 RAM 中一個同樣大小的區塊。整個定址空間被分頁鋪滿,實體記憶體被頁框鋪滿,而地圖只是說明哪一頁目前坐落在哪一框裡。
區塊大小就是分頁大小,在常見機器上幾乎一律是 4 KiB(4096 位元組),不過也存在 2 MiB 或 1 GiB 的「巨型分頁(huge page)」。因為分頁與頁框大小相同,任何一頁都能放進任何一個空閒頁框,就像把同樣大小的盒子塞進同樣大小的層架格子。這是後面一切的單位:分頁表做「頁對框」的對映、分頁錯誤一次帶進一頁、權限是按頁設定、寫入時複製複製一頁、置換把整頁搬到磁碟。頁內偏移量(4 KiB 分頁是最低 12 個位元)在虛擬與實體位址裡完全相同。
選擇分頁大小是一種取捨,值得理解。較大的分頁代表較少的表項與較少的 TLB 未命中,但當程式只需要一頁的一小撮時會浪費更多記憶體(內部碎片)——一筆 5 位元組的配置卻迫使整整 4 KiB 一頁常駐,仍然「用掉」4096 位元組的 RAM。較小的分頁浪費較少,但需要較大的表。4 KiB 是長期以來的折衷。
在 4 KiB 分頁下,虛擬位址 0x5000 到 0x5fff 全都屬於同一頁(分頁號碼 5)。若那一頁被放進實體頁框 9,這些位元組就實體地住在 0x9000 到 0x9fff,順序相同。
一頁(4096 位元組)整塊對映進一個頁框。
「分頁」在虛擬世界,「頁框」在實體世界——它們大小相同,卻不是同一個東西,這兩個詞不可互換,儘管大家常用得馬虎。配置一個位元組,一旦那頁常駐,仍會釘住整整一頁的 RAM。
又称
另见