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