我對(duì)于虛擬地址空間和虛擬內(nèi)存的理解:32位的CPU中,一個(gè)進(jìn)程都有個(gè)4G的虛擬地址空間;虛擬內(nèi)存是存在于硬盤(pán)上的頁(yè)交換文件。 前段時(shí)間聽(tīng)了一個(gè)報(bào)告,報(bào)告人竟然一再?gòu)?qiáng)調(diào)說(shuō)MMU管理的是虛擬內(nèi)存,個(gè)人認(rèn)為MMU管理的應(yīng)該是進(jìn)程的虛擬地址空間吧? 回來(lái)查了下《WINODWS核心編程》,發(fā)現(xiàn)第五版的中文版本中對(duì)這兩個(gè)概念說(shuō)的也不清楚,如P362頁(yè):磁盤(pán)上的文件一般被稱為頁(yè)交換文件,其中包含虛擬內(nèi)存。難道頁(yè)交換文件不是等價(jià)于虛擬內(nèi)存嗎?
歡迎大家討論,最后能得出個(gè)一致的結(jié)論。 | | ? | | ? |
|
回復(fù)次數(shù):38 |
?
?
?
| #1樓 得分:0回復(fù)于:2009-06-19 11:10:30
就沒(méi)哥哥給我回答個(gè),是不是太EASY,呵呵 | | ? |
|
精華推薦:一個(gè)跟線程同步類似的問(wèn)題,請(qǐng)各位幫幫看看出錯(cuò)原因 |
?
?
- microyzy
- (分也許不少,但別誤會(huì)俺是高手)
-
- 等 級(jí):
-
| #2樓 得分:4回復(fù)于:2009-06-19 11:42:36
硬盤(pán)上的文件是虛擬內(nèi)存交換到磁盤(pán)的結(jié)果,虛擬內(nèi)存就是你的程序能訪問(wèn)到的那些內(nèi)存,這是相對(duì)于真正的內(nèi)存物理地址而言,這是我的理解。我覺(jué)得,windows核心已經(jīng)解釋得足夠清晰了,如果認(rèn)為模糊,那么多讀幾次,另外補(bǔ)下基礎(chǔ)知識(shí),其實(shí),有幾個(gè)人完全清楚捏-_- | | ? |
|
精華推薦:三流大學(xué)在校一年級(jí)學(xué)生(碩士),畢業(yè)想找C/C++方面工作,薪水在6000元/月以上,請(qǐng)有經(jīng)驗(yàn)的高手指點(diǎn),我在學(xué)校應(yīng)該從哪些方向?qū)W習(xí)哪些方面的知識(shí)? |
?
?
| #3樓 得分:4回復(fù)于:2009-06-19 12:30:18
第一個(gè)問(wèn)題: ? 虛擬內(nèi)存是一個(gè)4G的地址空間,是一個(gè)空間,有部分對(duì)應(yīng)實(shí)在的代碼和數(shù)據(jù),還有很多是空的地址,不對(duì)應(yīng)實(shí)際的代碼和數(shù)據(jù)。 第一個(gè)疑點(diǎn): ? MMU管理的確實(shí)是虛擬內(nèi)存,它是CPU的一個(gè)物理部件。 第二個(gè)問(wèn)題: ? 虛擬內(nèi)存對(duì)應(yīng)實(shí)在的代碼和數(shù)據(jù)存在兩個(gè)地方,一個(gè)是按頁(yè)存入物理內(nèi)存(以下簡(jiǎn)稱內(nèi)存),另一個(gè)是按頁(yè)存入硬盤(pán)。在硬盤(pán)上的部分是以文件形式存在,目的是為了換入換出內(nèi)存,所以叫頁(yè)交換文件。 ? 說(shuō)明白點(diǎn):頁(yè)交換文件不是虛擬內(nèi)存(白馬非馬),是其中的一種存在形式,另一種形式是內(nèi)存(黑馬也是馬)。 問(wèn)題擴(kuò)充: ? 舉例,可執(zhí)行文件運(yùn)行時(shí)要先裝載,但并沒(méi)有把所有代碼和數(shù)據(jù)從硬盤(pán)復(fù)制到內(nèi)存(內(nèi)存和硬盤(pán)中各有部分,并且以頁(yè)形式存在,一般頁(yè)有4KB大小),當(dāng)程序執(zhí)行到某個(gè)代碼或數(shù)據(jù)時(shí),如果內(nèi)存中沒(méi)有,那么CPU就產(chǎn)生一個(gè)異常(因?yàn)镃PU只能直接存取在內(nèi)存中的代碼和數(shù)據(jù),不能直接訪問(wèn)硬盤(pán)中的),然后通過(guò)MMU控制把對(duì)應(yīng)的代碼或數(shù)據(jù)的頁(yè)從硬盤(pán)調(diào)入內(nèi)存,再回到產(chǎn)生異常的指令,重新執(zhí)行(當(dāng)然代碼或數(shù)據(jù)已經(jīng)在內(nèi)存,這次不產(chǎn)生異常了)。 問(wèn)題溯源: ? 那為什么不全部調(diào)入內(nèi)存? ? 因?yàn)橐谖业?2M的物理內(nèi)存的586電腦中執(zhí)行大于32M的程序(比如WIN2000)。 ? 還有一個(gè)好處,可以把物理內(nèi)存中長(zhǎng)時(shí)間沒(méi)用到的數(shù)據(jù)和代碼頁(yè)移出到硬盤(pán),騰出內(nèi)存空間我再開(kāi)始運(yùn)行另一個(gè)新的程序。 ? 還有一個(gè)好處,....虛擬內(nèi)存的用處很多。 | | ? |
|
精華推薦:MFC實(shí)現(xiàn)模擬線程同步(司機(jī)與售票員)(附有源碼) |
?
?
- sandyandy
- (songwenchao)
-
- 等 級(jí):
-
| #4樓 得分:0回復(fù)于:2009-06-19 12:35:45
虛擬內(nèi)存就是用頁(yè)面文件來(lái)充當(dāng)內(nèi)存使用. 某種意義上是一致的,但不是絕對(duì)相等的 | | ? |
|
精華推薦:谷歌瀏覽器優(yōu)化綠色版,大家都來(lái)用用提提建議啊 |
?
?
| #5樓 得分:0回復(fù)于:2009-06-19 12:37:36
“還有一個(gè)好處,可以把物理內(nèi)存中長(zhǎng)時(shí)間沒(méi)用到的數(shù)據(jù)和代碼頁(yè)移換出到硬盤(pán)中的頁(yè)交換文件,騰出內(nèi)存空間我再開(kāi)始運(yùn)行另一個(gè)新的程序。”
這樣改一下更好理解。 | | ? |
|
精華推薦:感受微軟外包項(xiàng)目(一) |
?
?
| #6樓 得分:4回復(fù)于:2009-06-19 12:50:09
虛擬內(nèi)存是一個(gè)Windows內(nèi)存管理的概括 非要說(shuō)是由什么組成的:物理內(nèi)存、頁(yè)文件和映射文件都是虛擬內(nèi)存機(jī)制的一部分
說(shuō)虛擬內(nèi)存就是頁(yè)文件并不正確,映射文件的部分后援存儲(chǔ)器都是直接對(duì)應(yīng)磁盤(pán)文件的,而不是頁(yè)文件 | | ? |
|
|
?
?
| #7樓 得分:0回復(fù)于:2009-06-19 13:41:53
非常感謝以上各位的回答,談?wù)勛约旱目捶ā?br />microyzy:虛擬內(nèi)存就是你的程序能訪問(wèn)到的那些內(nèi)存,我認(rèn)為這句話是不確切的。程序的進(jìn)程地址空間的用戶區(qū)所有映射的內(nèi)存,我的程序應(yīng)該都能訪問(wèn),包括實(shí)際的物理內(nèi)存。 tumen:虛擬內(nèi)存是一個(gè)4GB的地址空間,-----。我認(rèn)為虛擬內(nèi)存理論上是最大值是4GB的地址空間(32位尋址),但實(shí)際上虛擬內(nèi)存僅僅是進(jìn)程地址中映射到頁(yè)交換文件中的那部分。 wocow3:說(shuō)虛擬內(nèi)存就是頁(yè)文件并不正確,映射文件的部分后援存儲(chǔ)器都是直接對(duì)應(yīng)磁盤(pán)文件的,而不是頁(yè)文件。文件映射部分絕對(duì)不是虛擬內(nèi)存機(jī)制。
綜合以上各位的回答,有幾個(gè)相互混淆的概念: 1、進(jìn)程地址空間和虛擬內(nèi)存應(yīng)該不是同一概念,在tumen的敘述中我覺(jué)得存在將兩者等價(jià)的嫌疑; 2、虛擬內(nèi)存和實(shí)際的物理內(nèi)存絕對(duì)不是一個(gè)誰(shuí)包含于誰(shuí)的概念。在tumen、wocow3的敘述中都有將物理內(nèi)存劃入到是虛擬內(nèi)存機(jī)制的一部分之嫌疑。我覺(jué)得虛擬內(nèi)存應(yīng)該是相對(duì)于物理內(nèi)存而言的。
目前我的理解: 每個(gè)進(jìn)程都有個(gè)4G的進(jìn)程虛擬地址空間,虛擬地址空間和實(shí)際的物理存儲(chǔ)介質(zhì)(包括物理內(nèi)存、硬盤(pán)等)具有映射關(guān)系,而映射到頁(yè)交換文件的那部分即為虛擬內(nèi)存。
請(qǐng)大家批評(píng)修正。 | | ? |
|
|
?
?
| #8樓 得分:0回復(fù)于:2009-06-19 14:04:12
引用 4 樓 sandyandy 的回復(fù): 虛擬內(nèi)存就是用頁(yè)面文件來(lái)充當(dāng)內(nèi)存使用.
某種意義上是一致的,但不是絕對(duì)相等的 某種意義上是一致的?哪種意義上是一致的? 但不是絕對(duì)相等的?什么時(shí)候體現(xiàn)出區(qū)別? 還請(qǐng)sandyandy兄詳細(xì)指教。 | | ? |
|
|
?
?
| #9樓 得分:0回復(fù)于:2009-06-19 14:18:41
代碼和數(shù)據(jù)要放到內(nèi)存中才能跑 虛擬內(nèi)存就是一種機(jī)制,讓有限的物理內(nèi)存運(yùn)行更大更多的程序。 當(dāng)物理內(nèi)存中不夠時(shí),需要將內(nèi)存的頁(yè)換出或是丟棄。 那么對(duì)于映射文件,直接在內(nèi)存中清除就可以了,而不是換出到頁(yè)文件保存。 | | ? |
|
|
?
?
- justin_bo
- (justin_bo)
-
- 等 級(jí):
-
| #10樓 得分:0回復(fù)于:2009-06-19 14:29:29
攪胡了~~ 虛擬內(nèi)存空間就是操作系統(tǒng)讓你覺(jué)得你能使用的內(nèi)存空間吧。 | | ? |
|
|
?
?
| #11樓 得分:0回復(fù)于:2009-06-19 14:39:33
引用 9 樓 wocow3 的回復(fù): 代碼和數(shù)據(jù)要放到內(nèi)存中才能跑
虛擬內(nèi)存就是一種機(jī)制,讓有限的物理內(nèi)存運(yùn)行更大更多的程序。 當(dāng)物理內(nèi)存中不夠時(shí),需要將內(nèi)存的頁(yè)換出或是丟棄。
那么對(duì)于映射文件,直接在內(nèi)存中清除就可以了,而不是換出到頁(yè)文件保存。 如果說(shuō)虛擬內(nèi)存是一種機(jī)制的話,我同意,但是,虛擬內(nèi)存機(jī)制和文件映射的機(jī)制明顯不是一樣的。 虛擬內(nèi)存機(jī)制應(yīng)該只是內(nèi)存管理機(jī)制中的一種。 虛擬內(nèi)存機(jī)制是在給進(jìn)程地址空間劃撥實(shí)際物理存儲(chǔ)器時(shí),用的是頁(yè)交換文件。不知這樣wocow3兄是否同意? | | ? |
|
|
?
?
| #12樓 得分:0回復(fù)于:2009-06-19 16:04:14
虛擬內(nèi)存機(jī)制是在給進(jìn)程地址空間劃撥實(shí)際物理存儲(chǔ)器時(shí),用的是頁(yè)交換文件。 ------------------- 當(dāng)然不全是,可執(zhí)行程序的代碼段多是直接映射內(nèi)存的。在劃撥實(shí)際物理存儲(chǔ)器不用頁(yè)交換文件 | | ? |
|
|
?
?
| #13樓 得分:0回復(fù)于:2009-06-19 16:10:00
每個(gè)進(jìn)程都有獨(dú)立的虛擬內(nèi)存 | | ? |
|
|
?
?
| #14樓 得分:0回復(fù)于:2009-06-19 16:45:20
引用 12 樓 wocow3 的回復(fù): 虛擬內(nèi)存機(jī)制是在給進(jìn)程地址空間劃撥實(shí)際物理存儲(chǔ)器時(shí),用的是頁(yè)交換文件。 -------------------
當(dāng)然不全是,可執(zhí)行程序的代碼段多是直接映射內(nèi)存的。在劃撥實(shí)際物理存儲(chǔ)器不用頁(yè)交換文件 可執(zhí)行程序的代碼段是用的直接映射,劃撥存儲(chǔ)器時(shí)也是不用頁(yè)交換文件.但是這種方式就不是 虛擬內(nèi)存機(jī)制,而是文件映射. | | ? |
|
|
?
?
| #15樓 得分:0回復(fù)于:2009-06-19 20:16:34
搞深了。如果不怕不明白,我就往深處說(shuō)說(shuō)。
? 虛擬內(nèi)存世上本不存在,在8086,或者說(shuō)80186(不要說(shuō)沒(méi)聽(tīng)過(guò),后來(lái)多用于單片機(jī)了)以前,程序?qū)?nèi)存的訪問(wèn),不管是代碼地址還是數(shù)據(jù)地址,都是直來(lái)直去,是幾號(hào)單元就去幾號(hào)內(nèi)存單元找,當(dāng)然,最復(fù)雜的也就算 段地址×16+偏移地址了。 ? 從286開(kāi)始引入虛擬內(nèi)存,當(dāng)然,我們現(xiàn)在很少見(jiàn)到針對(duì)286虛擬內(nèi)存的程序。 ? 經(jīng)過(guò)完善,386時(shí)虛擬內(nèi)存全面登場(chǎng),“虛擬內(nèi)存”加上“32位數(shù)據(jù)和地址”兩大特性成為劃時(shí)代的經(jīng)典CPU,這也是現(xiàn)在很多操作系統(tǒng)文件中殘留i386、386、32等字樣的歷史原因。 ? 386的一大突破就是設(shè)計(jì)了一個(gè)功能強(qiáng)大(相對(duì)286)可以使用虛擬內(nèi)存地址尋址的MMU(內(nèi)存管理單元),把物理內(nèi)存(簡(jiǎn)稱內(nèi)存)劃分成一頁(yè)一頁(yè)來(lái)管理,一頁(yè)內(nèi)存大小是固定的(一般是4KB并按4KB地址對(duì)齊),把每頁(yè)的首地址按順序排成一個(gè)數(shù)組放在內(nèi)存,稱為頁(yè)表,頁(yè)表的大小也是固定的,再把頁(yè)表的首地址排成數(shù)組放在內(nèi)存,稱為頁(yè)目錄表,再把頁(yè)目錄表的首地址用一個(gè)專用CPU寄存器保存。 ? 程序代碼通過(guò)MMU進(jìn)行虛擬內(nèi)存尋址時(shí),先取出專用寄存器中保存的頁(yè)目錄表首地址,再用32位虛擬地址的高20位作為索引來(lái)一層一層的查目錄表查頁(yè)表找到物理內(nèi)存頁(yè)的首地址,用虛擬地址低12位(對(duì)于4kb頁(yè))做頁(yè)內(nèi)偏移來(lái)找到指定單元。
如果非要說(shuō)的再明白一點(diǎn),那么:虛擬內(nèi)存就是程序代碼不能直接訪問(wèn)物理內(nèi)存的一種間接訪問(wèn)物理內(nèi)存的機(jī)制。或者說(shuō)是把程序中的地址值x和物理內(nèi)存單元地址值y用y=f(x)的方式架開(kāi)分隔。
每個(gè)進(jìn)程都有自己的一套獨(dú)立的頁(yè)表和頁(yè)目錄(在進(jìn)程創(chuàng)建時(shí)建立),CPU切換進(jìn)程時(shí),只要把下一個(gè)進(jìn)程的頁(yè)目錄表的首地址寫(xiě)入專用寄存器,就開(kāi)始尋址該進(jìn)程的代碼和數(shù)據(jù)了(頁(yè)目錄表的首地址是領(lǐng)導(dǎo),領(lǐng)導(dǎo)換了,下面的頁(yè)目錄和頁(yè)表這些小頭目也變成了另一套班子了)。
對(duì)于一個(gè)進(jìn)程來(lái)說(shuō),它能見(jiàn)到和使用的一切內(nèi)存地址都是虛擬內(nèi)存地址(不管訪問(wèn)最終目標(biāo)的是在內(nèi)存中,還是硬盤(pán)上),物理內(nèi)存地址也就只有操作系統(tǒng)偶爾私自在背后把玩把玩,什么時(shí)候都不要認(rèn)為你的程序中的地址是物理內(nèi)存地址,它會(huì)去直接訪問(wèn)物理內(nèi)存地址。(除非你是在做操作系統(tǒng))
在物理內(nèi)存中只有一套操作系統(tǒng)的代碼,把所有操作系統(tǒng)代碼頁(yè)的頁(yè)首地址在每個(gè)進(jìn)程的頁(yè)表和頁(yè)目錄表中都抄一份,那么每個(gè)進(jìn)程就可以共享同一個(gè)操作系統(tǒng)的代碼了。
虛擬內(nèi)存地址通常絕不等于物理內(nèi)存地址,隔了十萬(wàn)八千里,風(fēng)牛馬不相及。
當(dāng)然,頁(yè)表和頁(yè)目錄中有很多不對(duì)應(yīng)物理內(nèi)存頁(yè)的空項(xiàng),這些空項(xiàng)要么是程序沒(méi)用到那么多的內(nèi)存,要么該頁(yè)放在了硬盤(pán)上,這些信息在頁(yè)表項(xiàng)和頁(yè)目錄表項(xiàng)的指定位上有標(biāo)記指示,當(dāng)MMU查到這些頁(yè)表項(xiàng)或頁(yè)目錄表項(xiàng)時(shí),會(huì)根據(jù)標(biāo)記確定是出錯(cuò)(因?yàn)樵L問(wèn)了程序使用范圍外的虛擬內(nèi)存地址)或者調(diào)入硬盤(pán)中對(duì)應(yīng)的映射頁(yè)到內(nèi)在存并登記頁(yè)表和頁(yè)目錄更改對(duì)應(yīng)項(xiàng)的標(biāo)記。
同樣,即使沒(méi)有映射到硬盤(pán)上一個(gè)字節(jié),你的程序全部裝載到物理內(nèi)存,進(jìn)程使用的還是虛擬內(nèi)存地址,因?yàn)樘摂M內(nèi)存和是否使用硬盤(pán)沒(méi)有必然關(guān)系,說(shuō)的直白一點(diǎn),即使一臺(tái)沒(méi)有硬盤(pán)的電腦,它也能使用虛擬內(nèi)存。
系統(tǒng)并不機(jī)械地建立一個(gè)從00000000h到0ffffffffh的4GB虛擬內(nèi)存映射的頁(yè)表和頁(yè)目錄,只對(duì)那些隔三插王的使用了的虛擬地址才建立對(duì)應(yīng)的頁(yè)表和頁(yè)目錄,否則的話,小小的內(nèi)存全被一個(gè)個(gè)進(jìn)程的頁(yè)表和頁(yè)目錄填滿了。
這些基本原理明白后就可以清醒了。 | | ? |
|
|
?
?
| #16樓 得分:0回復(fù)于:2009-06-19 20:22:50
在WindowXP上編程,就是在使用虛擬內(nèi)存。 | | ? |
|
|
?
?
| #17樓 得分:0回復(fù)于:2009-06-20 09:37:34
引用 16 樓 tumen 的回復(fù): 在WindowXP上編程,就是在使用虛擬內(nèi)存。 tumen: ? 您好! 感謝你給出的很多原理性的解釋,通俗易懂,讓我學(xué)到了 很多東西.但是,我始終認(rèn)為你把進(jìn)程的虛擬地址空間和虛擬 內(nèi)存的概念搞混淆了,呵呵,也許我太犟,不過(guò)純粹是學(xué)術(shù)討論, 還請(qǐng)不吝賜教. | | ? |
|
|
?
?
- ok1234567
- (ok1234567)
-
- 等 級(jí):
-
| #18樓 得分:3回復(fù)于:2009-06-20 11:12:57
我覺(jué)得,虛擬內(nèi)存與虛擬內(nèi)存管理技術(shù)是不同的概念
虛擬內(nèi)存是與物理內(nèi)存對(duì)應(yīng)的一個(gè)概念,指的是有假包換的假內(nèi)存,也就是用硬盤(pán)充當(dāng)(冒充)的內(nèi)存
至于虛擬內(nèi)存管理技術(shù),進(jìn)程空間那是另外一套符號(hào)體系:) | | ? |
|
|
?
?
| #19樓 得分:0回復(fù)于:2009-06-20 12:04:06
引用 18 樓 ok1234567 的回復(fù): 我覺(jué)得,虛擬內(nèi)存與虛擬內(nèi)存管理技術(shù)是不同的概念
虛擬內(nèi)存是與物理內(nèi)存對(duì)應(yīng)的一個(gè)概念,指的是有假包換的假內(nèi)存,也就是用硬盤(pán)充當(dāng)(冒充)的內(nèi)存
至于虛擬內(nèi)存管理技術(shù),進(jìn)程空間那是另外一套符號(hào)體系:) 感謝OK1234567的回復(fù),我非常贊同你的解釋.也就是說(shuō),虛擬內(nèi)存和虛擬內(nèi)存管理技術(shù)、進(jìn)程地址 空間是不同的概念。并且虛擬內(nèi)存就是硬盤(pán)充當(dāng)?shù)哪遣糠謨?nèi)存,即是頁(yè)交換文件的一部分。希望大家能得 出個(gè)統(tǒng)一的認(rèn)識(shí),求同存異。 | | ? |
|
|
?
?
| #20樓 得分:0回復(fù)于:2009-06-20 13:49:03
我理解:進(jìn)程地址是一個(gè)程序的運(yùn)行空間,程序的運(yùn)行需要在內(nèi)存中進(jìn)行,虛擬內(nèi)存技術(shù)實(shí)現(xiàn)了進(jìn)程地址到內(nèi)存地址的映射。 | | ? |
|
|
?
?
- cnzdgs
- (滿天星\n技術(shù)問(wèn)題請(qǐng)勿私聊)
-
- 等 級(jí):
2 更多勛章 | #21樓 得分:3回復(fù)于:2009-06-20 21:04:57
虛擬地址空間包括已分配和未分配的空間,已分配的就是虛擬內(nèi)存,虛擬內(nèi)存的儲(chǔ)存單元可能是物理內(nèi)存,也可能是磁盤(pán)文件。 | | ? |
|
|
?
?
| #22樓 得分:2回復(fù)于:2009-06-21 01:24:59
記得以前的286,386 CPU內(nèi)存是分開(kāi)的,一個(gè)是代碼段,另外一個(gè)數(shù)據(jù)段,后來(lái)到MMX 就改了,好像說(shuō)用線性內(nèi)存管理, 我覺(jué)得tumen兄,講的是CPU對(duì)內(nèi)存尋址技術(shù)(虛擬內(nèi)存管理技術(shù))好像是單片機(jī)8031+RAM 而所謂"虛擬內(nèi)存"是在Win系統(tǒng)下建立,有相應(yīng)多的硬件I/O支持,有不經(jīng)CPU的大流量數(shù)據(jù)塊傳輸(DMA),有硬盤(pán)..等等!
隨便說(shuō)說(shuō)而已,錯(cuò)了多多包涵!
| | ? |
|
|
?
?
| #23樓 得分:0回復(fù)于:2009-06-21 14:23:29
我在樓主的帖子上耗費(fèi)的時(shí)間已有5個(gè)小時(shí),(不要認(rèn)為僅僅是打幾十個(gè)字的時(shí)間,我要針對(duì)問(wèn)題去長(zhǎng)時(shí)間思考和組織語(yǔ)言,目的是用簡(jiǎn)單的語(yǔ)言說(shuō)明白,我從不喜歡從GOOGLE的搜索結(jié)果中粘貼,我認(rèn)為我知道的我一定能說(shuō)明白),但我認(rèn)為這點(diǎn)時(shí)間還是值得。很大的原因在于我不想讓曾經(jīng)困惑我很久的問(wèn)題讓后來(lái)者再踏上同一條曲折的彎路。
引用 7 樓 jcsnwpu 的回復(fù): 非常感謝以上各位的回答,談?wù)勛约旱目捶ā?
microyzy:虛擬內(nèi)存就是你的程序能訪問(wèn)到的那些內(nèi)存,我認(rèn)為這句話是不確切的。程序的進(jìn)程地址空間的用戶區(qū)所有映射的內(nèi)存,我的程序應(yīng)該都能訪問(wèn),包括實(shí)際的物理內(nèi)存。
tumen:虛擬內(nèi)存是一個(gè)4GB的地址空間,-----。我認(rèn)為虛擬內(nèi)存理論上是最大值是4GB的地址空間(32位尋址),但實(shí)際上虛擬內(nèi)存僅僅是進(jìn)程地址中映射到頁(yè)交換文件中的那部分。
wocow3:說(shuō)虛擬內(nèi)存就是頁(yè)文件并不正確,映射文件的部分后援存儲(chǔ)器都是直接對(duì)應(yīng)磁盤(pán)文件的,而不是頁(yè)文件。文件映射部分絕對(duì)不是虛擬內(nèi)存機(jī)制。
綜合以上各位的回答,有幾個(gè)相互混淆的概念: 1、進(jìn)程地址空間和虛擬內(nèi)存應(yīng)該不是同一概念,在tumen的敘述中我覺(jué)得存在將兩者等價(jià)的嫌疑;
2、虛擬內(nèi)存和實(shí)際的物理內(nèi)存絕對(duì)不是一個(gè)誰(shuí)包含于誰(shuí)的概念。在tumen、wocow3的敘述中都有將物理內(nèi)存劃入到是虛擬內(nèi)存機(jī)制的一部分之嫌疑。我覺(jué)得虛擬內(nèi)存應(yīng)該是相對(duì)于物理內(nèi)存而言的。
目前我的理解:
每個(gè)進(jìn)程都有個(gè)4G的進(jìn)程虛擬地址空間,虛擬地址空間和實(shí)際的物理存儲(chǔ)介質(zhì)(包括物理內(nèi)存、硬盤(pán)等)具有映射關(guān)系,而映射到頁(yè)交換文件的那部分即為虛擬內(nèi)存。
請(qǐng)大家批評(píng)修正。 ? 對(duì)于以上問(wèn)題和疑惑我認(rèn)為我已經(jīng)說(shuō)明白了,但又為什么不能讓人明白,我只好模擬通常學(xué)東西的方法,上GOOGLE搜了一下“虛擬內(nèi)存”,我明白了,我也想起了我以前走的彎路。 ? 又是微軟,又是WINDOWS,還是微軟,還是WINDOWS。 ? 再說(shuō)兩段,能明白就明白吧。 ??? ? 1.如果是網(wǎng)管,或者經(jīng)常修機(jī)裝系統(tǒng),能把虛擬內(nèi)存理解成你設(shè)置在硬盤(pán)的C盤(pán)或D盤(pán)或E盤(pán)等邏輯盤(pán)上一個(gè)多達(dá)幾百M(fèi)B或幾個(gè)GB的交換文件,沒(méi)錯(cuò),按照微軟或者WINDOWS的定義沒(méi)錯(cuò),你是合格的,勝任自己的工作。 ? 2.如果是編程,特別是中低層相關(guān)的系統(tǒng)編程(相對(duì)于網(wǎng)頁(yè)、PHOTOSHOP\3DMAX等),按MS的定義你必將走上和我曾經(jīng)一樣的充滿困惑和疑慮的彎路。
? 建議兩條路可走:A.抱緊MS的教條,繼續(xù)疑惑別人的一些觀點(diǎn)并一直疑惑下去,成為程序生涯中一個(gè)不愿面對(duì)的死胡同。B.讓MS的教條去死吧,去接受一個(gè)真正的、開(kāi)放意義上的虛擬內(nèi)存,讓自己對(duì)電腦軟硬件的認(rèn)識(shí)有一個(gè)更高視野。低眉信首,疑云隨風(fēng)散。
? 也許我的效率低了,近兩個(gè)小時(shí),但我還是希望都能明白。 | | ? |
|
|
?
?
- codewarrior
- (會(huì)思考的草)
-
- 等 級(jí):
-
| #24樓 得分:0回復(fù)于:2009-06-21 22:55:38
真是無(wú)語(yǔ)了,刨根問(wèn)底是好的,但是不能像孔乙己那樣追究茴香豆茴字的寫(xiě)法,那就變成了掉書(shū)袋了,毫無(wú)意義。 | | ? |
|
|
?
?
| #25樓 得分:0回復(fù)于:2009-06-22 00:35:48
其實(shí)“虛擬內(nèi)存”是宏觀概念!就好像兩父子,父親(CPU有虛擬的技術(shù)),到兒子(系統(tǒng))繼承了該技術(shù),再發(fā)揚(yáng)光大應(yīng)用到硬盤(pán)上!只不過(guò)一些人講他父親的屬性,一些講兒子的屬性,一些講他家族的屬性! 大家都有道理!! | | ? |
|
|
?
?
| #26樓 得分:0回復(fù)于:2009-06-22 08:38:41
引用 24 樓 codewarrior 的回復(fù): 真是無(wú)語(yǔ)了,刨根問(wèn)底是好的,但是不能像孔乙己那樣追究茴香豆茴字的寫(xiě)法,那就變成了掉書(shū)袋了,毫無(wú)意義。
感謝您的回復(fù).其實(shí)虛擬內(nèi)存對(duì)WINDOWS編程人員來(lái)是說(shuō),是相當(dāng)重要的一個(gè)概念.也許有很多人像我這樣 地在困惑,也許是我的領(lǐng)悟能力太差,但絕不是孔乙己的茴香豆,謝謝. | | ? |
|
|
?
?
| #27樓 得分:0回復(fù)于:2009-06-22 08:59:12
感謝大家,感謝microyzy,tumen,wocow3,ok1234567,cnzdgs,zufei. 討論是必要的,爭(zhēng)議也是將認(rèn)識(shí)和技術(shù)升華的一種的動(dòng)力.或許最終沒(méi)有得出一個(gè) 統(tǒng)一的結(jié)論,但是我還是從這個(gè)帖子中受益良多. 最后尤其要感謝tuemn,在這個(gè)帖子上花費(fèi)了很多寶貴的時(shí)間,甚至讓我一度不能贊成 他的觀念,但腦子里卻認(rèn)為他應(yīng)該是對(duì)的,自己盡量朝他的方向去想.但遺憾的是,他最終 未能說(shuō)服我,也許他的觀點(diǎn)是對(duì)的.最后,也想給tumen一點(diǎn)建議:你說(shuō)的很多,也很詳細(xì), 從原理上講也是對(duì)的,但更多的是缺少回答問(wèn)題的針對(duì)性,比如我一再和你強(qiáng)調(diào)的進(jìn)程地址 空間和你說(shuō)的虛擬內(nèi)存到底是什么區(qū)別等,你從未正面回答這些問(wèn)題. 最后,謝謝大家.祝大家工作順利,月月加薪! |
|
轉(zhuǎn)載于:https://www.cnblogs.com/dirichlet/archive/2011/03/17/1987182.html
總結(jié)
以上是生活随笔為你收集整理的地址空间和虚拟内存(转载)http://topic.csdn.net/u/20090619/10/4c62a13b-536b-4b0a-af09-2271c6a104e1.html...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。