資源描述:
《虛擬內(nèi)存與物理內(nèi)存的地址映射解析》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫。
1、在進(jìn)入正題前先來談?wù)劜僮飨到y(tǒng)內(nèi)存管理機(jī)制的發(fā)展歷程,了解這些有利于我們更好的理解目前操作系統(tǒng)的內(nèi)存管理機(jī)制。一早期的內(nèi)存分配機(jī)制在早期的計(jì)算機(jī)中,要運(yùn)行一個(gè)程序,會(huì)把這些程序全都裝入內(nèi)存,程序都是直接運(yùn)行在內(nèi)存上的,也就是說程序中訪問的內(nèi)存地址都是實(shí)際的物理內(nèi)存地址。當(dāng)計(jì)算機(jī)同時(shí)運(yùn)行多個(gè)程序時(shí),必須保證這些程序用到的內(nèi)存總量要小于計(jì)算機(jī)實(shí)際物理內(nèi)存的大小。那當(dāng)程序同時(shí)運(yùn)行多個(gè)程序時(shí),操作系統(tǒng)是如何為這些程序分配內(nèi)存的呢?下面通過實(shí)例來說明當(dāng)時(shí)的內(nèi)存分配方法:某臺(tái)計(jì)算機(jī)總的內(nèi)存大小是128M,現(xiàn)在同時(shí)運(yùn)行兩個(gè)程序A和B,A需占用內(nèi)存10M,B需占用內(nèi)存110。計(jì)算機(jī)在給程序分配
2、內(nèi)存時(shí)會(huì)采取這樣的方法:先將內(nèi)存中的前10M分配給程序A,接著再從內(nèi)存中剩余的118M中劃分出110M分配給程序B。這種分配方法可以保證程序A和程序B都能運(yùn)行,但是這種簡單的內(nèi)存分配策略問題很多。?locatedintheTomb,DongShenJiabang,deferthenextdayfocusedontheassassination.Linping,Zhejiang,1ofwhichliquorwinemasters(WuzhensaidinformationisCarpenter),whogotAfewbayonets,duetomissedfatal,whenn
3、ightcame圖一早期的內(nèi)存分配方法問題1:進(jìn)程地址空間不隔離。由于程序都是直接訪問物理內(nèi)存,所以惡意程序可以隨意修改別的進(jìn)程的內(nèi)存數(shù)據(jù),以達(dá)到破壞的目的。有些非惡意的,但是有bug的程序也可能不小心修改了其它程序的內(nèi)存數(shù)據(jù),就會(huì)導(dǎo)致其它程序的運(yùn)行出現(xiàn)異常。這種情況對(duì)用戶來說是無法容忍的,因?yàn)橛脩粝M褂糜?jì)算機(jī)的時(shí)候,其中一個(gè)任務(wù)失敗了,至少不能影響其它的任務(wù)。問題2:內(nèi)存使用效率低。在A和B都運(yùn)行的情況下,如果用戶又運(yùn)行了程序C,而程序C需要20M大小的內(nèi)存才能運(yùn)行,而此時(shí)系統(tǒng)只剩下8MlocatedintheTomb,DongShenJiabang,deferthene
4、xtdayfocusedontheassassination.Linping,Zhejiang,1ofwhichliquorwinemasters(WuzhensaidinformationisCarpenter),whogotAfewbayonets,duetomissedfatal,whennightcame的空間可供使用,所以此時(shí)系統(tǒng)必須在已運(yùn)行的程序中選擇一個(gè)將該程序的數(shù)據(jù)暫時(shí)拷貝到硬盤上,釋放出部分空間來供程序C使用,然后再將程序C的數(shù)據(jù)全部裝入內(nèi)存中運(yùn)行??梢韵胂蟮玫剑谶@個(gè)過程中,有大量的數(shù)據(jù)在裝入裝出,導(dǎo)致效率十分低下。問題3:程序運(yùn)行的地址不確定。當(dāng)內(nèi)存中的
5、剩余空間可以滿足程序C的要求后,操作系統(tǒng)會(huì)在剩余空間中隨機(jī)分配一段連續(xù)的20M大小的空間給程序C使用,因?yàn)槭请S機(jī)分配的,所以程序運(yùn)行的地址是不確定的。二分段為了解決上述問題,人們想到了一種變通的方法,就是增加一個(gè)中間層,利用一種間接的地址訪問方法訪問物理內(nèi)存。按照這種方法,程序中訪問的內(nèi)存地址不再是實(shí)際的物理內(nèi)存地址,而是一個(gè)虛擬地址,然后由操作系統(tǒng)將這個(gè)虛擬地址映射到適當(dāng)?shù)奈锢韮?nèi)存地址上。這樣,只要操作系統(tǒng)處理好虛擬地址到物理內(nèi)存地址的映射,就可以保證不同的程序最終訪問的內(nèi)存地址位于不同的區(qū)域,彼此沒有重疊,就可以達(dá)到內(nèi)存地址空間隔離的效果。當(dāng)創(chuàng)建一個(gè)進(jìn)程時(shí),操作系統(tǒng)會(huì)為該
6、進(jìn)程分配一個(gè)4GB大小的虛擬進(jìn)程地址空間。之所以是4GB,是因?yàn)樵?2位的操作系統(tǒng)中,一個(gè)指針長度是4字節(jié),而4字節(jié)指針的尋址能力是從0x00000000~0xFFFFFFFF,最大值0xFFFFFFFF表示的即為4GBlocatedintheTomb,DongShenJiabang,deferthenextdayfocusedontheassassination.Linping,Zhejiang,1ofwhichliquorwinemasters(WuzhensaidinformationisCarpenter),whogotAfewbayonets,duetomissed
7、fatal,whennightcame大小的容量。與虛擬地址空間相對(duì)的,還有一個(gè)物理地址空間,這個(gè)地址空間對(duì)應(yīng)的是真實(shí)的物理內(nèi)存。如果你的計(jì)算機(jī)上安裝了512M大小的內(nèi)存,那么這個(gè)物理地址空間表示的范圍是0x00000000~0x1FFFFFFF。當(dāng)操作系統(tǒng)做虛擬地址到物理地址映射時(shí),只能映射到這一范圍,操作系統(tǒng)也只會(huì)映射到這一范圍。當(dāng)進(jìn)程創(chuàng)建時(shí),每個(gè)進(jìn)程都會(huì)有一個(gè)自己的4GB虛擬地址空間。要注意的是這個(gè)4GB的地址空間是“虛擬”的,并不是真實(shí)存在的,而且每個(gè)進(jìn)程只能訪問自己虛擬地址空間中的數(shù)據(jù),無法訪