一、Virtual Memory(虛擬內存)是什么
虛擬內存是計算機系統(tǒng)內存管理的一種技術。它使得應用程序認為它擁有連續(xù)的可用的內存(一個連續(xù)完整的地址空間),而實際上,它通常是被分隔成多個物理內存碎片,還有部分暫時存儲在外部磁盤存儲器上,在需要時進行數(shù)據(jù)交換。大多數(shù)操作系統(tǒng)都使用了虛擬內存,如Windows家族的“虛擬內存”;Linux的“交換空間”等。
虛擬內存是Windows 為作為內存使用的一部分硬盤空間。虛擬內存在硬盤上其實就是為一個碩大無比的文件,文件名是PageFile.Sys,通常狀態(tài)下是看不到的。必須關閉資源管理器對系統(tǒng)文件的保護功能才能看到這個文件。虛擬內存有時候也被稱為是“頁面文件”就是從這個文件的文件名中來的。
內存在計算機中的作用很大,電腦中所有運行的程序都需要經(jīng)過內存來執(zhí)行,如果執(zhí)行的程序很大或很多,就會導致內存消耗殆盡。為了解決這個問題,WINDOWS運用了虛擬內存技術,即拿出一部分硬盤空間來充當內存使用,這部分空間即稱為虛擬內存,虛擬內存在硬盤上的存在形式就是 PAGEFILE.SYS這個頁面文件。
二、操作系統(tǒng)虛擬內存調度方式
1、頁式調度
頁式調度是將邏輯和物理地址空間都分成固定大小的頁。主存按頁順序編號,而每個獨立編址的程序空間有自己的頁號順序,通過調度輔存中程序的各頁可以離散裝入主存中不同的頁面位置,并可據(jù)表一一對應檢索。
在頁式虛擬存儲系統(tǒng)中,虛擬空間被分成大小相等的頁,稱為邏輯頁或虛頁。主存空間也被分成同樣大小的頁,稱為物理頁或實頁。相應地,虛擬地址分為兩個字段:高位字段為虛頁號,低位字段為頁內地址。實存地址也分為兩個字段:高位字段為實頁號,低位字段為頁內地址。同時,頁的大小都取2的整數(shù)冪個字。
通過頁表可以把虛擬地址轉換成物理地址。每個程序設置一張頁表,在頁表中,對應每一個虛頁號都有一個條目,條目內容至少包含該虛頁所在的主存頁面地址(實頁號),用它作為實存地址的高位字段;實頁號與虛擬地址的頁內地址相拼接,就產生完整的實存地址,據(jù)此訪問主存。
頁面是主存物理空間中劃分出來的等長的固定區(qū)域。分頁方式的優(yōu)點是頁長固定,因而便于構造頁表、易于管理,且不存在外碎片。但分頁方式的缺點是頁長與程序的邏輯大小不相關。例如,某個時刻一個子程序可能有一部分在主存中,另一部分則在輔存中。這不利于編程時的獨立性,并給換入/換出處理、存儲保護和存儲共享等操作造成麻煩。
2、段式調度
另一種劃分可尋址的存儲空間的方法稱為分段。段是按照程序的自然分界劃分的、長度可以動態(tài)改變的區(qū)域。通常,程序員把子程序、操作數(shù)和常數(shù)等不同類型的數(shù)據(jù)劃分到不同的段中,并且每個程序可以有多個相同類型的段。段式調度是按程序的邏輯結構劃分地址空間,段的長度是隨意的,并且允許伸長。
在段式虛擬存儲系統(tǒng)中,虛擬地址由段號和段內地址組成,虛擬地址到實存地址的變換通過段表來實現(xiàn)。每個程序設置一個段表,段表的每一個表項對應一個段,每個表項至少包括三個字段:有效位(指明該段是否已經(jīng)調入主存)、段起址(該段在實存中的首地址)和段長(記錄該段的實際長度)。
3、段頁式調度
段頁式虛擬存儲器是段式虛擬存儲器和頁式虛擬存儲器的結合。首先,實存被等分成頁。在段頁式虛擬存儲器中,把程序按邏輯結構分段以后,再把每段按照實存的頁的大小分頁,程序按頁進行調入和調出操作,但它又可按段實現(xiàn)共享和保護。因此,它可以兼有頁式和段式系統(tǒng)的優(yōu)點。它的缺點是在地址映像過程中需要多次查表,虛擬地址轉換成物理地址是通過一個段表和一組頁表來進行定位的。段表中的每個表目對應一個段,每個表目有一個指向該段的頁表的起始地址(頁號)及該段的控制保護信頁表指明該段各頁在主存中的位置以及是否已裝入、已修改等標志。
延伸閱讀1:虛擬存儲器特征
離散性,是指內存分配時采用離散分配的方式。若采用連續(xù)分配方式,需要將作業(yè)裝入到連續(xù)的內存區(qū)域,這樣需要連續(xù)地一次性申請一部分內存空間,無法實現(xiàn)虛擬存儲功能,只有采用離散分配方式,才能為它申請內存空間,以避免浪費內存空間。多次性,多次性是指一個作業(yè)被分成多次調入內存運行。作業(yè)在運行時,只將當前運行的那部分程序和數(shù)據(jù)裝入內存,以后再陸續(xù)從外存將需要的部分調入內存。對換性,對換性是指允許在作業(yè)運行過程中換進換出。允許將暫時不用的程序和數(shù)據(jù)從內存調至外存的對換區(qū),以后需要時再從外存調入到內存。虛擬性,虛擬性是指能夠從邏輯上擴充內存容量,使用戶所看到的內存容量遠大于實際的內存容量。