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

評(píng)論