虛擬內存(英語:Virtual memory)是計算機系統內存管理的一種技術。它使得應用程序認為它擁有連續可用的內存(一個連續完整的地址空間),而實際上物理內存通常被分隔成多個內存碎片,還有部分暫時存儲在外部磁盤存儲器上,在需要時進行數據交換。與沒有使用虛擬內存技術的系統相比,使用這種技術使得大型程序的編寫變得更容易,對真正的物理內存(例如RAM)的使用也更有效率。此外,虛擬內存技術可以使多個進程共享同一個運行庫,並通過分割不同進程的內存空間來提高系統的安全性。

要注意的是,虛擬內存不只是「用磁盤空間來擴展物理內存」的意思——這只是擴充內存級別以使其包含硬盤驅動器而已。把內存擴展到磁盤只是使用虛擬內存技術的一個結果,它的作用也可以通過覆蓋或者把處於不活動狀態的程序以及它們的數據全部交換到磁盤上等方式來實現。對虛擬內存的定義是基於對地址空間的重定義的,即把地址空間定義為「連續的虛擬內存地址」,以藉此「欺騙」程序,使它們以為自己正在使用一大塊的「連續」地址。

那些需要快速存取或者響應時間非常穩定的嵌入式系統,以及其他的具有特殊應用的計算機系統,可能會為了避免讓運算結果的可預測性降低,而選擇不使用虛擬內存。

用途與實現

編輯

虛擬內存技術是現代計算機系統結構中不可分割的一部分。現代所有用於一般應用的操作系統都對普通的應用程序使用虛擬內存技術,例如文字處理軟件,電子製表軟件,多媒體播放器等等。大部分架構通過CPU中獨立的硬件內存管理單元來輔助實現這一功能。部分仿真器虛擬機也能夠通過宿主系統中的硬件來提高性能。[1]老一些的操作系統,如DOS和1980年代的Windows[2],或者那些1960年代的大型機,一般都沒有虛擬內存的功能——但是Atlas英語Atlas_(computer)B5000英語Burroughs_large_systems#B5000蘋果公司Lisa都是很值得注意的例外。

Intel 80286開始,X86指令集通過保護模式引入了虛擬內存技術,但是由於其使用的存儲器分段技術對大內存段的支持不佳,後續的80386在分段技術框架下支持了內存分頁技術。

Windows操作系統的虛擬內存

編輯

對於32位進程,其邏輯內存空間為4G。Windows API提供了一套函數操縱進程的虛擬內存:

  • VirtualAlloc(PVOID開始地址,SIZE_T大小,DWORD內存類型,DWORD保護屬性)。 內存類型有MEM_RESERVE(保留)、MEM_RELEASE(釋放)和MEM_COMMIT(提交)。保留是指占用一塊邏輯地址空間,但未實際分配物理內存;提交是實際分配物理內存。MEM_RESET用於把內存清零。 保護屬性為: PAGE_NOACCESS、PAGE_READONLY、PAGE_READWRITE、PAGE_EXECUTE、PAGE_EXECUTE_READ、PAGE_EXECUTE_READWRITE。
  • VirtualProtect(PVOID基地址,SIZE_T大小,DWORD新保護屬性,DWORD舊保護屬性)。更改保護屬性。
  • VirtualFree(PVOID基地址,SIZE_T大小,DWORD內存類型)。頁面釋放。內存類型是MEM_DECOMMIT或者MEM_RELEASE
  • VirtualLock
  • VirtualUnlock
  • VirtualQuery

參見

編輯

參考資料

編輯
  1. ^ AMD-V™ Nested Paging (PDF). AMD. [28 April 2015]. (原始內容 (PDF)存檔於2022-03-21). 
  2. ^ Windows Version History. Microsoft. 2005-07-19 [2008-12-03]. (原始內容存檔於2015-02-26).