複製鏈接
請複製以下鏈接發送給好友

虛擬內存

鎖定
虛擬內存計算機系統內存管理的一種技術。它使得應用程序認為它擁有連續的可用的內存(一個連續完整的地址空間),而實際上,它通常是被分隔成多個物理內存碎片,還有部分暫時存儲在外部磁盤存儲器上,在需要時進行數據交換。大多數操作系統都使用了虛擬內存,如Windows家族的“虛擬內存”;Linux的“交換空間”等。 [1] 
中文名
虛擬內存
外文名
Virtual Memory
別    名
虛擬存儲器
用    途
計算機系統內存管理

虛擬內存簡介

虛擬內存 虛擬內存
虛擬內存別稱虛擬存儲器(Virtual Memory)。電腦中所運行的程序均需經由內存執行,若執行的程序佔用內存很大或很多,則會導致內存消耗殆盡。為解決該問題,Windows中運用了虛擬內存技術,即勻出一部分硬盤空間來充當內存使用。當內存耗盡時,電腦就會自動調用硬盤來充當內存,以緩解內存的緊張。若計算機運行程序或操作所需的隨機存儲器(RAM)不足時,則 Windows 會用虛擬存儲器進行補償。它將計算機的RAM和硬盤上的臨時空間組合。當RAM運行速率緩慢時,它便將數據從RAM移動到稱為“分頁文件”的空間中。將數據移入分頁文件可釋放RAM,以便完成工作。 一般而言,計算機的RAM容量越大,程序運行得越快。若計算機的速率由於RAM可用空間匱乏而減緩,則可嘗試通過增加虛擬內存來進行補償。但是,計算機從RAM讀取數據的速率要比從硬盤讀取數據的速率快,因而擴增RAM容量(可加內存條)是最佳選擇。 [2] 
虛擬內存是Windows 為作為內存使用的一部分硬盤空間。虛擬內存在硬盤上其實就是為一個碩大無比的文件,文件名是PageFile.Sys,通常狀態下是看不到的。必須關閉資源管理器對系統文件的保護功能才能看到這個文件。虛擬內存有時候也被稱為是“頁面文件”就是從這個文件的文件名中來的。 [2] 
內存在計算機中的作用很大,電腦中所有運行的程序都需要經過內存來執行,如果執行的程序很大或很多,就會導致內存消耗殆盡。為了解決這個問題,WINDOWS運用了虛擬內存技術,即拿出一部分硬盤空間來充當內存使用,這部分空間即稱為虛擬內存,虛擬內存在硬盤上的存在形式就是 PAGEFILE.SYS這個頁面文件。 [2] 

虛擬內存工作原理

虛擬存儲器是由硬件和操作系統自動實現存儲信息調度和管理的。它的工作過程包括6個步驟: [3] 
中央處理器訪問主存的邏輯地址分解成組號a和組內地址b,並對組號a進行地址變換,即將邏輯組號a作為索引,查地址變換表,以確定該組信息是否存放在主存內。 [3] 
②如該組號已在主存內,則轉而執行④;如果該組號不在主存內,則檢查主存中是否有空閒區,如果沒有,便將某個暫時不用的組調出送往輔存,以便將這組信息調入主存。 [3] 
③從輔存讀出所要的組,並送到主存空閒區,然後將那個空閒的物理組號a和邏輯組號a登錄在地址變換表中。 [3] 
④從地址變換表讀出與邏輯組號a對應的物理組號a。 [3] 
⑤從物理組號a和組內字節地址b得到物理地址。 [3] 
⑥根據物理地址從主存中存取必要的信息。 [3] 

虛擬內存調度方式

調度方式有分頁式、段式、段頁式3種。頁式調度是將邏輯和物理地址空間都分成固定大小的頁。主存按頁順序編號,而每個獨立編址的程序空間有自己的頁號順序,通過調度輔存中程序的各頁可以離散裝入主存中不同的頁面位置,並可據表一一對應檢索。頁式調度的優點是頁內零頭小,頁表對程序員來説是透明的,地址變換快,調入操作簡單;缺點是各頁不是程序的獨立模塊,不便於實現程序和數據的保護。段式調度是按程序的邏輯結構劃分地址空間,段的長度是隨意的,並且允許伸長,它的優點是消除了內存零頭,易於實現存儲保護,便於程序動態裝配;缺點是調入操作複雜。將這兩種方法結合起來便構成段頁式調度。在段頁式調度中把物理空間分成頁,程序按模塊分段,每個段再分成與物理空間頁同樣小的頁面。段頁式調度綜合了段式和頁式的優點。其缺點是增加了硬件成本,軟件也較複雜。大型通用計算機系統多數採用段頁式調度。 [3] 

虛擬內存頁式調度

在頁式虛擬存儲系統中,虛擬空間被分成大小相等的頁,稱為邏輯頁或虛頁。主存空間也被分成同樣大小的頁,稱為物理頁或實頁。相應地,虛擬地址分為兩個字段:高位字段為虛頁號,低位字段為頁內地址。實存地址也分為兩個字段:高位字段為實頁號,低位字段為頁內地址。同時,頁的大小都取2的整數冪個字。 [4] 
通過頁表可以把虛擬地址轉換成物理地址。每個程序設置一張頁表,在頁表中,對應每一個虛頁號都有一個條目,條目內容至少包含該虛頁所在的主存頁面地址(實頁號),用它作為實存地址的高位字段;實頁號與虛擬地址的頁內地址相拼接,就產生完整的實存地址,據此訪問主存。 [4] 

虛擬內存段式調度

頁面是主存物理空間中劃分出來的等長的固定區域。分頁方式的優點是頁長固定,因而便於構造頁表、易於管理,且不存在外碎片。但分頁方式的缺點是頁長與程序的邏輯大小不相關。例如,某個時刻一個子程序可能有一部分在主存中,另一部分則在輔存中。這不利於編程時的獨立性,並給換入/換出處理、存儲保護和存儲共享等操作造成麻煩。 [4] 
另一種劃分可尋址的存儲空間的方法稱為分段。段是按照程序的自然分界劃分的、長度可以動態改變的區域。通常,程序員把子程序、操作數和常數等不同類型的數據劃分到不同的段中,並且每個程序可以有多個相同類型的段。 [4] 
在段式虛擬存儲系統中,虛擬地址由段號和段內地址組成,虛擬地址到實存地址的變換通過段表來實現。每個程序設置一個段表,段表的每一個表項對應一個段,每個表項至少包括三個字段:有效位(指明該段是否已經調入主存)、段起址(該段在實存中的首地址)和段長(記錄該段的實際長度)。 [4] 

虛擬內存段頁式調度

段頁式虛擬存儲器是段式虛擬存儲器和頁式虛擬存儲器的結合。 [4] 
首先,實存被等分成頁。在段頁式虛擬存儲器中,把程序按邏輯結構分段以後,再把每段按照實存的頁的大小分頁,程序按頁進行調入和調出操作,但它又可按段實現共享和保護。因此,它可以兼有頁式和段式系統的優點。它的缺點是在地址映像過程中需要多次查表,虛擬地址轉換成物理地址是通過一個段表和一組頁表來進行定位的。段表中的每個表目對應一個段,每個表目有一個指向該段的頁表的起始地址(頁號)及該段的控制保護信頁表指明該段各頁在主存中的位置以及是否已裝入、已修改等標誌。 [4] 

虛擬內存虛擬存儲地址變換

虛擬存儲器地址變換基本上有3種形虛擬存儲器工作過程式:全聯想變換、直接變換和組聯想變換。任何邏輯空間頁面能夠變換到物理空間任何頁面位置的方式稱為全聯想變換。每個邏輯空間頁面只能變換到物理空間一個特定頁面的方式稱為直接變換。組聯想變換是指各組之間是直接變換,而組內各頁間則是全聯想變換。替換規則用來確定替換主存中哪一部分,以便騰空部分主存,存放來自輔存要調入的那部分內容。常見的替換算法有4種。 [5] 
①隨機算法:用軟件或硬件隨機數產生器確定替換的頁面。 [5] 
②先進先出:先調入主存的頁面先替換。 [5] 
③近期最少使用算法(LRU,Least Recently Used):替換最長時間不用的頁面。 [5] 
④最優算法:替換最長時間以後才使用的頁面。這是理想化的算法,只能作為衡量其他各種算法優劣的標準。 [5] 
虛擬存儲器的效率是系統性能評價的重要內容,它與主存容量、頁面大小、命中率,程序局部性和替換算法等因素有關。 [5] 

虛擬內存虛擬內存的關鍵問題

(1)調度問題:決定哪些程序和數據應被調入主存。 [6] 
(2)地址映射問題:在訪問主存時把虛地址變為主存物理地址(這一過程稱為內地址變換);在訪問輔存時把虛地址變成輔存的物理地址(這一過程稱為外地址變換),以便換頁。此外還要解決主存分配、存儲保護與程序再定位等問題。 [6] 
(3)替換問題:決定哪些程序和數據應被調出主存。 [6] 
(4)更新問題:確保主存與輔存的一致性。 [6] 
在操作系統的控制下,硬件和系統軟件為用户解決了上述問題,從而使應用程序的編程大大簡化。 [6] 

虛擬內存虛擬內存設置

現在以 Windows系統為例來看看虛擬內存是如何設置的。 Windows系統使用內存虛擬技術,比較圓滿地解決了物理內存不足所引起的問題。在 Windows中,虛擬內存其實是一個容量很大的文件 pagefile. sys,稱之為頁面文件。頁面文件具有系統和隱藏屬性,正常情況是看不見的,只有在“文件夾選項”對話框中將“隱藏受保護的操作系統文件”和“不顯示隱藏的文件和文件夾”這兩項的鈎去掉後才能看見。 [7] 
在 Windows桌面上的“我的電腦”單擊鼠標右鍵,在菜單中點擊“屬性”,在高級選項卡中的性能一欄裏點擊設置,再在“性能選項”中選擇“高級”選項,就會在下面出現虛擬內存一欄。鼠標單擊“更改”按鈕,隨後就會打開“虛擬內存”設置對話框。 [7] 
Windows的虛擬內存設置頁面文件可以放置於系統中的聯機的任何一個硬盤驅動器上。這個虛擬內存的大小可以自定義,並且是動態變化的,需要設置初始大小和最大值;也可以選擇不用人工分配,由操作系統自動來管理;當然,還可以設置為無頁面文件,這樣系統就沒有虛擬內存了,系統的運行可能會因此受影響,所以,通常不要這樣設置。 [7] 

虛擬內存相關概念

虛擬內存實地址與虛地址

用户編制程序時使用的地址稱為虛地址或邏輯地址,其對應的存儲空間稱為虛存空間或邏輯地址空間;而計算機物理內存的訪問地址則稱為實地址或物理地址,其對應的存儲空間稱為物理存儲空間或主存空間。程序進行虛地址到實地址轉換的過程稱為程序的再定位。 [6] 

虛擬內存虛擬內存的訪問過程

虛存空間的用户程序按照虛地址編程並存放在輔存中。程序運行時,由地址變換機構依據當時分配給該程序的實地址空間把程序的一部分調入實存。每次訪存時,首先判斷該虛地址所對應的部分是否在實存中:如果是,則進行地址轉換並用實地址訪問主存;否則,按照某種算法將輔存中的部分程序調度進內存,再按同樣的方法訪問主存。 [6] 
由此可見,每個程序的虛地址空間可以遠大於實地址空間,也可以遠小於實地址空間。後一種情況通常出現在多用户或多任務系統中:實存空間較大,而單個任務並不需要很大的地址空間,較小的虛存空間則可以縮短指令中地址字段的長度。 [6] 
有了虛存的機制後,應用程序就可以透明地使用整個虛存空間。對應用程序而言,如果主存的命中率很高,虛存的訪問時間就接近於主存訪問時間,而虛存的大小僅僅依賴於輔存的大小。 [6] 

虛擬內存異構體系

從虛存的概念可以看出,主存-輔存的訪問機制與cache-主存的訪問機制是類似的。這是由cache存儲器、主存和輔存構成的三級存儲體系中的兩個層次。cache和主存之間以及主存和輔存之間分別有輔助硬件和輔助軟硬件負責地址變換與管理,以便各級存儲器能夠組成有機的三級存儲體系。cache和主存構成了系統的內存,而主存和輔存依靠輔助軟硬件的支持構成了虛擬存儲器。 [6] 
在三級存儲體系中,cache-主存和主存-輔存這兩個存儲層次有許多相同點: [6] 
(1)出發點相同:二者都是為了提高存儲系統的性能價格比而構造的分層存儲體系,都力圖使存儲系統的性能接近高速存儲器,而價格和容量接近低速存儲器。 [6] 
(2)原理相同:都是利用了程序運行時的局部性原理把最近常用的信息塊從相對慢速而大容量的存儲器調入相對高速而小容量的存儲器。 [6] 
但cache-主存和主存-輔存這兩個存儲層次也有許多不同之處: [6] 
(1)側重點不同:cache主要解決主存與CPU的速度差異問題;而就性能價格比的提高而言,虛存主要是解決存儲容量問題,另外還包括存儲管理、主存分配和存儲保護等方面。 [6] 
(2)數據通路不同:CPU與cache和主存之間均有直接訪問通路,cache不命中時可直接訪問主存;而虛存所依賴的輔存與CPU之間不存在直接的數據通路,當主存不命中時只能通過調頁解決,CPU最終還是要訪問主存。 [6] 
(3)透明性不同:cache的管理完全由硬件完成,對系統程序員和應用程序員均透明;而虛存管理由軟件(操作系統)和硬件共同完成,由於軟件的介入,虛存對實現存儲管理的系統程序員不透明,而只對應用程序員透明(段式和段頁式管理對應用程序員“半透明”)。 [6] 
(4)未命中時的損失不同:由於主存的存取時間是cache的存取時間的5~10倍,而主存的存取速度通常比輔存的存取速度快上千倍,故主存未命中時系統的性能損失要遠大於cache未命中時的損失。 [6] 
參考資料
  • 1.    劉顯榮主編;張元濤,吳雲君副主編;汪德彪,常繼彬,葉文,範蘇參編.微機原理與嵌入式接口技術:西安電子科技大學出版社,2016.08:第245頁
  • 2.    顏燁,劉嘉敏主編;毛盼娣,張麗霞,肖瀟等副主編.大學計算機基礎:重慶大學出版社,2013.09:第47頁
  • 3.    張朝蘭,常建麗主編.21世紀中等職業教育系列教材:北京郵電大學出版社,2007年03月第1版:第103頁
  • 4.    陳智勇主編.計算機組成原理:西安電子科技大學出版社,2009.02:第148頁
  • 5.    任天平主編;劉德平,蘇宇鋒,張瑞,白國長副主編.數字電子與微型計算機原理:中國鐵道出版社,2013.10:第117頁
  • 6.    吳曉非,王玉良,禹可編著.微機原理與接口技術:北京郵電大學出版社,2015.08:第208頁
  • 7.    陳少春著.計算機存儲技術與應用:電子科技大學出版社,2014.12:第111頁