當前位置:編程學習大全網 - 編程語言 - 內存和虛擬內存各自的作用是什麽?

內存和虛擬內存各自的作用是什麽?

分類: 電腦/網絡

解析:

1、應用中的概念。

物理內存,在應用中,自然是顧名思義,物理上,真實的插在板子上的內存是多大就是多大了。看機器配置的時候,看的就是這個物理內存。

虛擬內存,這個概念就要稍微了解壹下CPU了,^_^,只是稍微,畢竟我們現在談的是應用中的概念。我們應該知道,對於壹般的32位CPU,有32根地址線,那麽它的尋址空間就是4GB。也就是說,如果沒有其他的限制,我們的主板上最大可以安裝4GB的物理內存。哈哈,壹般的機器是不會裝那麽多物理內存的,大把的銀子啊,性價比可合不上。程序員可不管這個,我們對CPU編程,不能壹臺機器根據妳物理內存的大小我編壹個程序吧?那也太原始社會了吧。所以程序員都是直接使用的4GB的奢侈的進程空間(或許,不應該用奢侈這麽短視的詞。曾幾何時,128M的物理內存也是我們不可想象的呢?)。這怎麽辦?總不能不用那些程序了吧。好吧,這個問題交給OS去解決吧。這樣,OS就提出了壹個虛擬內存的概念。就是進程、用戶、不必考慮實際上物理內存的限制,而直接對4GB的進程空間進行尋址。如果所尋址的數據實際上不在物理內存中,那就從“虛擬內存”中來獲取。這個虛擬內存可以是壹個專門文件格式的磁盤分區(比如linux下的swap分區),也可以是硬盤上的某個足夠大的文件(比如win下的那個i386文件,好像是這個名字)。物理內存中長期不用的數據,也可以轉移到虛擬內存中。這樣的交換由OS來控制,用戶看起來就好像物理內存大了壹樣。有了虛擬內存的概念,我們就可以自由的使用4GB的進程空間了。但是,前提是妳的硬盤由足夠的空間,而且妳舍得劃分出(4GB-物理內存)大的虛擬內存空間來。^_^。壹般情況下,虛擬內存的大小,各個OS也進行了限制(比如linux的swap分區的大小,win下也可以調整虛擬內存文件的大小和位置)。所以,我們程序所能使用的存儲空間大小就是:物理內存+虛擬內存。

2、CPU中的概念。

物理內存,CPU的地址線可以直接進行尋址的內存空間大小。比如8086只有20根地址線,那它的尋址空間就是1MB。我們就說8086能支持1MB的物理內存。即使我們安裝了128M的內存條在板子上,我們也只能說8086擁有1MB的物理內存空間。同理32位的386以上CPU,就可以支持最大4GB的物理內存空間了。

虛擬內存,這便是壹個和CPU的尋址方式有關的壹個概念了。x86體系結構中,為了更好的管理內存空間,采用分段的方式來對內存進行尋址。比如8086就用兩個字節的段基地址和兩個字節的偏移地址來尋址整個可以尋址的內存空間,即:0000:0000方式(具體怎麽計算出實際的地址,參見各種匯編教材)。這樣,對整個1MB的物理內存空間尋址是沒有問題了。可是,用這種方式,最大可以尋址到10FFEF這個地址。這超出了20根地址線的地址的FFEF大小的空間,就可以說是8086的虛擬內存了,所以可以說8086的虛擬內存地址空間可以達到10FFEF。^_^,具體怎麽使用和看待這段內存,還取決於A20線的選通與否了,這是另外的話題了。同樣的道理,386以上的CPU,由於在保護模式下使用了GDT和LDT,將段的定義放到了內存中,從而可以使用16位的段地址和32位的偏移地址。這樣算來,386以上的CPU的虛擬內存地址空間就可以達到64TB了。真是大的驚人,看來,這麽大的地址空間,壹時還不能被軟件的發展淘汰。

3、零碎的叫法。

零碎的叫法常常來自與相對感覺深奧詼澀的虛擬內存概念。物理的東西,人們大多不去碰它,畢竟是實實在在存在的。而虛擬內存就經常有別冒名頂替的。“壹個進程有4個GB的虛擬內存”這樣的說法屢見不鮮,其實,這是混淆了4GB的進程地址空間和虛擬內存這兩個概念。也算令壹種解釋吧,畢竟那4個GB也是見不著影的,也是虛擬的。

  • 上一篇:個人組建wifi基站運營違法嗎?會不會被查?
  • 下一篇:汽車電路要學多久
  • copyright 2024編程學習大全網