物理內(nèi)存和虛擬內(nèi)存的區(qū)別
物理內(nèi)存
- 1.插在板子上的內(nèi)存是多大就是多大了
- 2.在cpu概念中物理內(nèi)存就是cpu的地址線可以直接進(jìn)行尋址的內(nèi)存空間大小铝噩。
例子:比如8086只有20根地址線篓像,那么它的尋址空間就是1MB处硬,我們就說(shuō)8086能支持1MB的物理內(nèi)存,及時(shí)我們安裝了128M的內(nèi)存條在板子上脆炎,我們也只能說(shuō)8086擁有1MB的物理內(nèi)存空間。同理我們現(xiàn)在大部分使用的是32位的機(jī)子,32位的386以上CPU就可以支持最大4GB的物理內(nèi)存空間了拖吼。
虛擬內(nèi)存
- 正在運(yùn)行的一個(gè)進(jìn)程,他所需的內(nèi)存是有可能大于內(nèi)存條容量之和的.
- 2.但是并不是所有數(shù)據(jù)都一起加到物理內(nèi)存的这吻,勢(shì)必有一部分?jǐn)?shù)據(jù)放入到其他介質(zhì)(磁盤(pán))吊档。當(dāng)進(jìn)程需要的時(shí)候,再通過(guò)調(diào)度將其
從磁盤(pán)撈取到物理內(nèi)存唾糯。 - 3.因此虛擬內(nèi)存可以理解為進(jìn)程所需的內(nèi)存空間總和怠硼,其中一部分可能不在我們物理內(nèi)存。
早期沒(méi)有虛擬內(nèi)存的時(shí)候出現(xiàn)的問(wèn)題:
1.現(xiàn)在有多個(gè)程序需要運(yùn)行移怯,但是內(nèi)存空間不足了香璃,就需要將其他程序暫時(shí)拷貝到硬盤(pán)當(dāng)中,然后將新的程序裝入內(nèi)存運(yùn)行.由于大量的數(shù)據(jù)裝入裝出舟误,內(nèi)存的使用效率會(huì)十分Low葡秒。
2.由于程序都是直接訪問(wèn)物理內(nèi)存的,所以一個(gè)進(jìn)程可以修改其他進(jìn)程的內(nèi)存數(shù)據(jù)嵌溢,甚至修改內(nèi)核地址空間中的數(shù)據(jù)眯牧。
3.因?yàn)閮?nèi)存地址是隨機(jī)分配的,所以程序運(yùn)行的地址也是不正確的赖草。
假設(shè)你的計(jì)算機(jī)是32位学少,那么它的地址總線是32位的,也就是它可以尋址00xFFFFFFFF(4G)的地址空間秧骑,但如果你的計(jì)算機(jī)只有256M的物理內(nèi)存0x0x0FFFFFFF(256M)版确,同時(shí)你的進(jìn)程產(chǎn)生了一個(gè)不在這256M地址空間中的地址,那么計(jì)算機(jī)該如何處理呢乎折?
- 1.計(jì)算機(jī)對(duì)虛擬內(nèi)存進(jìn)行分頁(yè)產(chǎn)生頁(yè)绒疗,對(duì)物理內(nèi)存分頁(yè)產(chǎn)生頁(yè)幀。
- 2.這里的頁(yè)和頁(yè)幀大小一樣骂澄,因此我們的頁(yè)個(gè)數(shù)一般大于頁(yè)幀數(shù)忌堂。
- 3.計(jì)算機(jī)上有一個(gè)頁(yè)表,類(lèi)似于map酗洒。是虛擬內(nèi)存頁(yè)和物理內(nèi)存幀號(hào)的映射(一對(duì)一)士修。
- 4.因?yàn)槭且粚?duì)一所以有些虛擬內(nèi)存頁(yè)無(wú)法再頁(yè)表上找到對(duì)應(yīng)的頁(yè)幀枷遂,這個(gè)時(shí)候如果需要物理內(nèi)存但是找不到頁(yè)幀,
只能調(diào)用操作系統(tǒng)進(jìn)行覆蓋最少使用的頁(yè)幀棋嘲,然后將頁(yè)幀上修改的數(shù)據(jù)刷入磁盤(pán)酒唉。然后把我們?cè)擁?yè)需要的內(nèi)容寫(xiě)入該頁(yè)幀然后修改頁(yè)表的映射。
image.png