虛擬記憶體
此條目可參照英語維基百科相應條目來擴充。 (2020年7月28日) |
虛擬記憶體(英語:Virtual memory)是電腦系統主記憶體管理的一種技術。它使得應用程式認為它擁有連續可用的主記憶體(一個連續完整的位址空間),而實際上實體記憶體通常被分隔成多個主記憶體碎片,還有部分暫時儲存在外部磁碟記憶體上,在需要時進行資料交換。與沒有使用虛擬記憶體技術的系統相比,使用這種技術使得大型程式的編寫變得更容易,對真正的實體記憶體(例如RAM)的使用也更有效率。此外,虛擬記憶體技術可以使多個行程共享同一個執行庫,並通過分割不同行程的主記憶體空間來提高系統的安全性。
要注意的是,虛擬記憶體不只是「用磁碟空間來擴充實體記憶體」的意思——這只是擴充主記憶體級別以使其包含硬碟機而已。把主記憶體擴充到磁碟只是使用虛擬記憶體技術的一個結果,它的作用也可以通過覆蓋或者把處於不活動狀態的程式以及它們的資料全部交換到磁碟上等方式來實現。對虛擬記憶體的定義是基於對位址空間的重定義的,即把位址空間定義為「連續的虛擬記憶體位址」,以藉此「欺騙」程式,使它們以為自己正在使用一大塊的「連續」位址。
那些需要快速存取或者回應時間非常穩定的嵌入式系統,以及其他的具有特殊應用的電腦系統,可能會為了避免讓運算結果的可預測性降低,而選擇不使用虛擬記憶體。
用途與實現
[編輯]虛擬記憶體技術是現代電腦系統結構中不可分割的一部分。現代所有用於一般應用的作業系統都對普通的應用程式使用虛擬記憶體技術,例如文書處理軟體,電子製表軟體,多媒體播放器等等。大部分架構通過CPU中獨立的硬體主記憶體管理單元來輔助實現這一功能。部分仿真器和虛擬機器也能夠通過宿主系統中的硬體來提高效能。[1]老一些的作業系統,如DOS和1980年代的Windows[2],或者那些1960年代的大型電腦,一般都沒有虛擬記憶體的功能——但是Atlas,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
參見
[編輯]參考資料
[編輯]- ^ AMD-V™ Nested Paging (PDF). AMD. [28 April 2015]. (原始內容 (PDF)存檔於2022-03-21).
- ^ Windows Version History. Microsoft. 2005-07-19 [2008-12-03]. (原始內容存檔於2015-02-26).