什麼是虛擬記憶體?
虛擬記憶體是邏輯記憶體從物理記憶體中劃分出來的一部分。當只有有限的物理記憶體可用時,這種劃分可以為程式設計師提供更大的虛擬記憶體。
虛擬記憶體可以給程式設計師一種錯覺,即他們擁有非常大的記憶體,即使計算機只有較小的主記憶體。它使程式設計更容易,因為程式設計師不再需要擔心可用的多個物理記憶體。
虛擬記憶體的工作方式類似,但在記憶體層次結構中向上提升了一級。記憶體管理單元(MMU) 在物理記憶體和某些次級儲存裝置(通常是磁碟)之間傳輸資料。此儲存區域可以定義為交換磁碟或交換檔案,具體取決於其執行情況。從物理記憶體檢索資料比從交換磁碟訪問資料快得多。
實現虛擬記憶體的兩種主要方法如下:
- 分頁
分頁是一種記憶體管理技術,其中分配的是小的固定長度的頁,而不是動態分配技術中單個大的可變長度的連續塊。在分頁系統中,每個程序都被分成幾個固定大小的“塊”,稱為頁,通常為 4k 位元組。記憶體空間也分成相同大小的塊,稱為頁框。
分頁的優點
分頁的優點如下:
在分頁中,不需要外部碎片。
在分頁中,相同大小的頁和頁框之間的交換很清晰。
分頁是一種簡單的記憶體管理方法。
分頁的缺點
分頁的缺點如下:
在分頁中,可能存在內部碎片。
在分頁中,頁表佔用更多記憶體。
由於多級分頁,可能會出現記憶體引用開銷。
- 分段
根據使用者的角度,將記憶體劃分為稱為段的邏輯單元稱為分段。分段允許每個段獨立增長並共享。換句話說,分段是一種將記憶體劃分為稱為段的邏輯相關單元的技術。這意味著程式是由段的集合組成的。
與頁不同,段的大小可以不同。這要求 MMU 以與管理分頁記憶體略有不同的方式來管理分段記憶體。分段 MMU 包含一個段表來跟蹤駐留在記憶體中的段。
段可以從多個地址中的一個開始,並且可以是任何大小,每個段表條目都應包含起始地址和段大小。某些系統允許段從任何地址開始,而其他系統則限制起始地址。Intel X86 架構中就存在這樣一個限制,它要求段從地址的低四位為 6000 的地址開始。