六月丁香五月婷婷,丁香五月婷婷网,欧美激情网站,日本护士xxxx,禁止18岁天天操夜夜操,18岁禁止1000免费,国产福利无码一区色费

學(xué)習(xí)啦>學(xué)習(xí)電腦>電腦知識大全>

物理內(nèi)存與虛擬內(nèi)存(虛擬地址)的區(qū)別有哪些

時(shí)間: 春健736 分享

  在存儲器里以字節(jié)為單位存儲信息,為正確地存放或取得信息,每一個(gè)字節(jié)單元給以一個(gè)唯一的存儲器地址,稱為物理地址(Physical Address),又叫實(shí)際地址或絕對地址?!。瑢W(xué)習(xí)啦小編為大家介紹一下物理內(nèi)存與虛擬內(nèi)存(虛擬地址)的區(qū)別,供大家參考!

  物理內(nèi)存與虛擬內(nèi)存(虛擬地址)的區(qū)別

  1、應(yīng)用中的概念。

  物理內(nèi)存,在應(yīng)用中,自然是顧名思義,物理上,真實(shí)的插在板子上的內(nèi)存是多大就是多大了。看機(jī)器配置的時(shí)候,看的就是這個(gè)物理內(nèi)存。

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

  2、CPU中的概念。

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

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

  3、零碎的叫法。

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

  虛擬內(nèi)存:

  虛擬內(nèi)存指在硬盤中開辟出的、用于輔助物理內(nèi)存交換數(shù)據(jù)的那部分空間,在WINDOWS中可以指定其大小,也可以讓W(xué)INDOWS自動(dòng)調(diào)節(jié)。

  進(jìn)入“控制面板/系統(tǒng)/高級/性能/設(shè)置/高級/虛擬內(nèi)存/更改”,來到虛擬內(nèi)存設(shè)置窗口,首先確定你的頁面文件在哪個(gè)驅(qū)動(dòng)器盤符,然后將別的盤符驅(qū)動(dòng)器的頁面文件全部禁用。建議你把它是設(shè)置到其他分區(qū)上,而不是默認(rèn)的系統(tǒng)所在的分區(qū),這樣可以提高頁面文件的讀寫速度,有利于系統(tǒng)的快速運(yùn)行。根據(jù)微軟的建議,頁面文件應(yīng)設(shè)為內(nèi)存容量的1.5倍,但如果你的內(nèi)存比較大,那它占用的空間也是很可觀的,所以,建議如果內(nèi)存容量在256MB以下,就設(shè)置為1.5倍,最大值和最小值一樣,如果在512MB以上,設(shè)置為內(nèi)存容量的一半完全可行。

  交換區(qū):

  一塊內(nèi)存區(qū)域或硬盤區(qū)域,用來處理數(shù)據(jù)交換.

  Windows內(nèi)存管理之虛擬地址到物理地址的映射

Win32通過一個(gè)兩層的表結(jié)構(gòu)來實(shí)現(xiàn)地址映射,因?yàn)槊總€(gè)進(jìn)程都擁有私有的4G的虛擬內(nèi)存空間,相應(yīng)的,每個(gè)進(jìn)程都有自己的層次表結(jié)構(gòu)來實(shí)現(xiàn)其地址映射。

  第一層稱為頁目錄,實(shí)際就是一個(gè)內(nèi)存頁,Win32的內(nèi)存頁有4KB大小,這個(gè)內(nèi)存頁以4個(gè)字節(jié)分為1024項(xiàng),每一項(xiàng)稱為“頁目錄項(xiàng)”(PDE);

  第二層稱為頁表,這一層共有1024個(gè)頁表,頁表結(jié)構(gòu)與頁目錄相似,每個(gè)頁表也都是一個(gè)內(nèi)存頁,這個(gè)內(nèi)存頁以4KB的大小被分為1024項(xiàng),頁表的每一項(xiàng)被稱為頁表項(xiàng)(PTE),易知共有1024×1024個(gè)頁表項(xiàng)。每一個(gè)頁表項(xiàng)對應(yīng)一個(gè)物理內(nèi)存中的某一個(gè)“內(nèi)存頁”,即共有1024×1024個(gè)物理內(nèi)存頁,每個(gè)物理內(nèi)存頁為4KB,這樣就可以索引到4G大小的虛擬物理內(nèi)存。

  如下圖所示(注下圖中的頁目錄項(xiàng)的大小應(yīng)該是4個(gè)字節(jié),而不是4kB):

  Win32提供了4GB大小的虛擬地址空間。因此每個(gè)虛擬地址都是一個(gè)32位的整數(shù)值,也就是我們平時(shí)所說的指針,即指針的大小為4B。它由三部分組成,如下圖:

  這三個(gè)部分的第一部分,即前10位為頁目錄下標(biāo),用來尋址頁目錄項(xiàng),頁目錄項(xiàng)剛好1024個(gè)。找到頁目錄項(xiàng)后,找對頁目錄項(xiàng)對應(yīng)的的頁表。第二部分則是用來在頁表內(nèi)尋址,用來找到頁表項(xiàng),共有1024個(gè)頁表項(xiàng),通過頁表項(xiàng)找到物理內(nèi)存頁。第三部分用來在物理內(nèi)存頁中找到對應(yīng)的字節(jié),一個(gè)頁的大小是4KB,12位剛好可以滿足尋址要求。

  具體的例子:

  假設(shè)一個(gè)線程正在訪問一個(gè)指針(Win32的指針指的就是虛擬地址)指向的數(shù)據(jù),此指針指為0x2A8E317F,下圖表示了這一個(gè)過程:

  0x2A8E317F的二進(jìn)制寫法為0010101010_0011100011_000101111111,為了方便我們把它分為三個(gè)部分。

  首先按照0010101010尋址,找到頁目錄項(xiàng)。因?yàn)橐粋€(gè)頁目錄項(xiàng)為4KB,那么先將0010101010左移兩位,001010101000(0x2A8),用此下標(biāo)找到頁目錄項(xiàng),然后根據(jù)此頁目錄項(xiàng)定位到下一層的某個(gè)頁表。

  然后按照0011100011尋址,在上一步找到頁表中尋找頁表項(xiàng)。尋址方法與上述方法類似。找到頁表項(xiàng)后,就可以找到對應(yīng)的物理內(nèi)存頁。

  最后按照000101111111尋址,尋找頁內(nèi)偏移。

  上面的假設(shè)的是此數(shù)據(jù)已在物理內(nèi)存中,其實(shí)判斷訪問的數(shù)據(jù)是否在內(nèi)存中也是在地址映射過程中完成的。Win32系統(tǒng)總是假設(shè)數(shù)據(jù)已在物理內(nèi)存中,并進(jìn)行地址映射。頁表項(xiàng)中有一位標(biāo)志位,用來標(biāo)識包含此數(shù)據(jù)的頁是否在物理內(nèi)存中,如果在的話,就直接做地址映射,否則,拋出缺頁中斷,此時(shí)頁表項(xiàng)也可標(biāo)識包含此數(shù)據(jù)的頁是否在調(diào)頁文件中(外存),如果不在則訪問違例,程序?qū)顺觯绻?,頁表?xiàng)會查出此數(shù)據(jù)頁在哪個(gè)調(diào)頁文件中,然后將此數(shù)據(jù)頁調(diào)入物理內(nèi)存,再繼續(xù)進(jìn)行地址映射。為了實(shí)現(xiàn)每個(gè)進(jìn)程擁有私有4G的虛擬地址空間,也就是說每個(gè)進(jìn)程都擁有自己的頁目錄和頁表結(jié)構(gòu),對不同進(jìn)程而言,即使是相同的指針(虛擬地址)被不同的進(jìn)程映射到的物理地址也是不同的,這也意味著在進(jìn)程之間傳遞指針是沒有意義的。

  看過“物理內(nèi)存與虛擬內(nèi)存(虛擬地址)的區(qū)別”的人還看了:

1.物理與虛擬內(nèi)存的區(qū)別

2.什么是物理內(nèi)存與虛擬內(nèi)存 各指什么

3.關(guān)于虛擬內(nèi)存和物理內(nèi)存

4.物理地址和虛擬地址

5.物理地址與虛擬地址映射

615237