本文將從高層次探討什么是虛擬內存、它存在的原因以及它是如何工作的。
在之前的文章中,我們討論了CPU 緩存的好處。緩存是由于內存訪問速度和 CPU 處理能力之間的差異而發明的。通過使用硬件緩存,最近從主內存加載的項目存儲在更小的內存中,更靠近 CPU,以便在需要時可以快速檢索它們。因此,緩存解決了速度問題。
但是容量呢?
在本文中,我們將了解什么是虛擬內存以及它如何幫助解決 CPU 容量問題。
內存層次結構
現代計算機系統可以同時運行數十個甚至數百個不同的應用程序。由于內存是一種有限資源,隨著越來越多的應用程序消耗它,性能可能會下降,甚至完全停止。這就是虛擬內存的用武之地。圖 1 顯示了一個內存層次結構,包括高速緩存、主內存和虛擬內存。
圖 1. 內存層次結構
如圖 1 所示,虛擬內存的存在是為了增加系統的內存容量。這是通過將磁盤驅動器的一部分作為“看起來”像主內存的專用內存塊分配給可能需要它的任何應用程序來完成的。
為了防止磁盤訪問降低速度性能,主內存充當虛擬內存的完全關聯緩存,存儲最近訪問的磁盤位置。因此,通過使用虛擬內存,主內存成為緩存層次結構中的另一層。
雖然細節超出了本文的范圍,但應該注意的是,虛擬內存是通過計算機操作系統和處理器的內存管理單元 (MMU) 之間的交互來管理和控制的。
緩存與分頁
回想一下,高速緩存將物理內存地址分解為多個字段。這樣做是為了識別存儲最近訪問的數據的緩存條目。對于完全關聯的緩存,這些字段是緩存標記和字節偏移。緩存條目由匹配的標簽和包含數據的緩存塊組成。
如果沒有找到匹配的標簽,這稱為緩存未命中。
圖 2. 緩存命名法
虛擬內存的工作方式類似,但使用虛擬地址的概念。
虛擬地址由虛擬頁號和頁偏移量組成。虛擬地址用于定位內存中稱為頁框的項,通常大小為 4kB。
頁框包含頁框號和實際數據,簡稱為頁。
頁偏移量用于訪問 4kB 頁內的單個字。如果虛擬地址不指向在物理內存中找到的位置,則會發生頁面錯誤,并且系統必須向磁盤驅動器發出請求的數據。當確實發生頁面錯誤時,磁盤上的頁面被移動到內存中的頁面框架。在主存和磁盤之間移動頁面稱為分頁(或交換)。
圖 3. 分頁命名法
由于使用虛擬內存來擴展系統內存的容量,因此需要一種既考慮磁盤上的位置又考慮主內存中的位置的尋址方案。這就是虛擬地址的用武之地。
虛擬地址跨越磁盤驅動器和主內存,導致虛擬地址多于物理內存地址。因此,在訪問頁面中的數據之前,系統必須確定該數據是駐留在物理內存還是虛擬內存中。這是通過地址轉換完成的。
圖 4. 虛擬地址映射到虛擬和物理內存
地址翻譯
如前所述,物理內存充當虛擬內存的完全關聯緩存。回想一下,完全關聯的緩存是具有多個條目的單個集合。每個條目都與緩存標記進行比較以進行匹配。由于頁面大小為 4kB,即使是小型虛擬內存系統也需要數千個比較器電路。為了解決這個問題,使用了頁表。
頁表
頁表是一種將虛擬頁號(虛擬地址的一部分)映射到頁框號的數據結構。
頁表包含每個虛擬地址的條目以及表示該頁面是否在物理內存中的有效位。如果頁表項有效,則將頁幀號與頁偏移量(虛擬地址的另一部分)結合起來構建物理內存地址,即所需數據在內存中的存儲位置。圖 5 說明了如何使用頁表將虛擬地址轉換為物理地址。
圖 5. 使用頁表進行地址轉換
重要的是要記住,頁框號代表頁面的存儲位置,而物理地址代表頁面中單個字的位置。如果頁表項的有效位未設置,則虛擬地址必須映射到存儲在磁盤上的頁。
頁表本身與用于定位的頁一起存儲在主存中。因此,使用頁表,讀取或寫入任何頁實際上需要兩次內存訪問。這似乎違反直覺,如果不是翻譯后備緩沖區或 TLB,它會導致很大的性能損失。
翻譯后備緩沖區
由于頁面大小為 4kB,因此頁面內的數據同時表現出時間和空間局部性。這使得頁表條目成為緩存的完美候選者。
轉換后備緩沖區或 TLB 是一個小型的完全關聯緩存,用于存儲最近訪問的頁表條目。通過緩存最近使用的頁表條目,系統可以放棄多次查找頁表,從而避免兩次訪問內存的問題。TLB 通常只包含幾百個條目,但它的命中率非常高(高達 99%)。
圖 6 顯示了一個具有四個條目的 TLB。
圖 6. 實現為全關聯緩存的簡化 TLB
結論
本文介紹了虛擬內存的概念。虛擬內存是用于擴展系統容量的內存系統的擴展。
虛擬內存還允許在應用程序或進程之間保護和隔離內存。它由計算機的操作系統和處理器的 MMU 控制和管理。虛擬內存通過分配一部分磁盤空間作為系統內存的一部分來工作。
作為內存層次結構的擴展,虛擬內存已成為計算機整體架構的基本組成部分。了解虛擬內存可以增強您在日益復雜的世界中對計算機的理解。
-
內存
+關注
關注
8文章
2998瀏覽量
73882 -
虛擬內存
+關注
關注
0文章
70瀏覽量
8052
發布評論請先 登錄
相關推薦
評論