虛擬存儲器是存儲管理中一個特別重要的概念,你要認真掌握虛存的定義和特征。此外,你還要知道為何要引入虛存、實現(xiàn)虛存技術(shù)的物質(zhì)基礎(chǔ)、虛存容量受到哪兩方面的限制。
虛擬存儲器的概念
?。?)引入虛擬存儲器的好處
?、儆脩艟幹瞥绦驎r不必考慮內(nèi)存容量的限制,只要按照實際問題的需要來確定合適的算法和數(shù)據(jù)結(jié)構(gòu)就可簡化程序設計的任務。
?、谟捎诿總€進程只有一部分裝入內(nèi)存,因而占用內(nèi)存空間較少,在一定容量的內(nèi)存中就可同時裝入更多的進程,也相應增加了CPU的利用率和系統(tǒng)的吞吐量。
為了給用戶(特別是大作業(yè)用戶)提供方便,操作系統(tǒng)應把各級存儲器統(tǒng)一管理起來。就是說,應該把一個程序當前正在使用的部分放在內(nèi)存中,而其余部分放在磁盤上,在這種情況下啟動進程執(zhí)行。操作系統(tǒng)根據(jù)程序執(zhí)行時的要求和內(nèi)存的實際使用情況,使用對換技術(shù)隨機地對每個程序進行換入/換出。
?。?)對換技術(shù)
對換技術(shù)也稱作交換技術(shù)。它的實現(xiàn)方式就類似于日常生活中幾個單位租用一個會議廳那樣,甲單位租用時間到了,就退出會議廳,由乙單位使用;乙單位到時后,也退出去,由丙單位使用,等等。如甲單位還需使用,就再租用,由管理者安排占用時間。
多道程序環(huán)境中也采用對換技術(shù)。此時,內(nèi)存中保留多個進程。當內(nèi)存空間不足以容納要求進入內(nèi)存的進程時,系統(tǒng)就把內(nèi)存中暫時不能運行的進程(包括程序和數(shù)據(jù))換出到外存上,騰出內(nèi)存空間,把具備運行條件的進程從外存換到內(nèi)存中。在UNIX/Linux系統(tǒng)中對內(nèi)存的管理就利用了這種多道程序的對換技術(shù)。
?。?)虛擬存儲器的概念
虛擬存儲器(VirtualMemory)是用戶能作為可編址內(nèi)存對待的虛擬存儲空間,它使用戶邏輯存儲器與物理存儲器分離,是操作系統(tǒng)給用戶提供的一個比真實內(nèi)存空間大得多的地址空間。就是說,虛擬存儲器并不是實際的內(nèi)存,它的大小比內(nèi)存空間大得多;用戶感覺所能使用的“內(nèi)存”非常大,這是操作系統(tǒng)對邏輯內(nèi)存的擴充。
實現(xiàn)虛擬存儲技術(shù)的物質(zhì)基礎(chǔ)是二級存儲器結(jié)構(gòu)和動態(tài)地址轉(zhuǎn)換機構(gòu)。經(jīng)過操作系統(tǒng)的改造,將內(nèi)存和外存有機地聯(lián)系在一起,在用戶面前呈現(xiàn)一個足以滿足編程需要的特大內(nèi)存空間。
虛擬存儲器實質(zhì)上是把用戶地址空間和實際的存儲空間區(qū)分開來,當作兩個不同的概念。動態(tài)地址轉(zhuǎn)換機構(gòu)在程序運行時把邏輯地址轉(zhuǎn)換成物理地址,以實現(xiàn)動態(tài)定位。
應注意,虛擬存儲器雖然給用戶提供了特大地址空間,用戶在編程時一般不必考慮可用空間有多大,但虛擬存儲器的容量不是無限大的。它主要受到兩方面的限制:
?、僦噶钪斜硎镜刂返淖珠L。機器指令中表示地址的二進制位數(shù)是有限的,如果地址單元以字節(jié)編址,且表示地址的字長是16位,則可以表示的地址空間最大是64KB。如果表示地址的字長是32位,則可以表示的地址空間最大是4GB。
?、谕獯娴娜萘?。從實現(xiàn)觀點來看,用戶的程序和數(shù)據(jù)都必須完整地保存在外存(如硬盤)中。然而,外存容量、傳送速度和使用頻率等方面都受到物理因素的限制。就是說,磁盤的容量有限,并非真正“無窮大”,其傳送速度也不是“無限快”,所以,虛擬空間不可能無限大。
虛擬存儲器的特征
虛擬存儲器的特征可以用16個字來概括:虛擬擴充、部分裝入、離散分配、多次對換。
對于虛擬存儲器這個基本概念應從以下4個方面進行理解,這些也是虛擬存儲器所具有的基本特征:
?、偬摂M擴充
虛擬存儲器不是擴大物理內(nèi)存空間,而是擴充邏輯內(nèi)存容量。就是說,用戶編程時所用到的地址空間可以遠大于實際內(nèi)存的容量。例如,實際內(nèi)存只有1MB,而用戶程序和數(shù)據(jù)所用的空間卻可以達到10MB或者更多。所以,用戶“感覺”內(nèi)存擴大了。
?、诓糠盅b入
每個進程不是全部一次性地裝入內(nèi)存,而是分成若干部分。當進程要執(zhí)行時,只需將當前運行需要用到的那部分程序和數(shù)據(jù)裝入內(nèi)存。以后在運行過程中用到其他部分時,再分別把那些部分從外存調(diào)入內(nèi)存。
?、垭x散分配
一個進程分成多個部分,它們沒有被全部裝入內(nèi)存。即使裝入內(nèi)存的那部分也不必占用連續(xù)的內(nèi)存空間。這樣,一個進程在內(nèi)存的部分可能散布在內(nèi)存的不同地方,彼此并不連續(xù)。這樣做,不僅可避免內(nèi)存空間的浪費,而且為進程動態(tài)調(diào)入內(nèi)存提供方便。
?、芏啻螌Q
在一個進程運行期間,它所需的全部程序和數(shù)據(jù)分成多次調(diào)入內(nèi)存。每次調(diào)入一部分,只解決當前需要,而在內(nèi)存的那些暫時不被使用的程序和數(shù)據(jù),可換出到外存的對換區(qū);甚至把暫時不能運行的進程在內(nèi)存的全部映像都換出到對換區(qū),以騰出盡量多的內(nèi)存空間供可運行的進程使用。被調(diào)出的程序和數(shù)據(jù)在需要時可以重新調(diào)入內(nèi)存中。
虛擬存儲器根據(jù)地址空間的結(jié)構(gòu)不同可以分為分頁虛擬存儲器和分段虛擬存儲器兩類。本課程只介紹分頁虛擬存儲器。
責任編輯人:CC
評論
查看更多