題 32位操作系統機器可以使用所有8GB RAM + 20GB頁面文件嗎?


我對32位操作系統的理解是,地址以32位表示,因此最多OS可以使用232 = 4G內存空間 - 我假設單位是字節,所以4GB。

這是否意味著如果任何具有32位操作系統(無論是Windows還是Unix)的計算機在硬盤上的RAM +頁面文件總數超過4GB,例如8GB RAM和20GB頁面文件,其內存將永遠不會“用完” “?

通過 “用完了” 我的意思是增加RAM或頁面文件對性能沒有幫助;當然,應用程序總是可以繼續從操作系統請求內存但是失敗。

同樣,如果此32位操作系統計算機具有2GB RAM和2GB頁面文件,則增加頁面文件大小將無助於提高性能。這是真的?


96
2017-12-13 12:59


起源


另外,如果您碰巧有超過4GB的RAM,而且只有32位操作系統,那麼您可以製作一個RAM磁盤。這是RAM中的硬盤驅動器,您可以使用未使用/未應用的RAM將其放入。 - Simon Verbeke
你不能。仍然必須通過操作系統創建ramdisk,如果操作系統無法使用內存,則無法在其中創建ramdisk。 (除非你的BIOS可以創建一個ramdisk,這是罕見的)。 - AVee
簡短的回答是“是”。雖然通常一個進程有一個32位的地址空間可供使用,但操作系統本身可以使用更多(通過像80年代那樣的銀行切換或者通過地址擴展技巧學校作為英特爾的PAE。同時,記住你運行的不僅僅是一次一個程序,可能由多個進程組成(Chrome將標籤放在不同的進程中)。操作系統本身將使用內存來緩存來自本地固定磁盤的數據,這樣您就可以更快地訪問數據用過的。 - rbanffy


答案:


我對32位操作系統的理解是,地址用32位表示,所以最多OS可以使用2 ^ 32 = 4GB的內存空間

最了不起的 處理 能夠 地址 是4GB。你可能會感到困惑 記憶 同 地址空間進程可以擁有比地址空間更多的內存。 那是 完全合法 和 在視頻處理和其他內存密集型應用程序中很常見。  一個進程可以分配幾十GB的內存,並隨意將它交換進出地址空間。只有2 GB可以進入 用戶 一次地址空間。

如果你家有一個四車車庫,你仍然可以擁有五十輛車。 你不能把它們都留在你的車庫裡。 你必須在其他地方有輔助存儲來存儲至少46個;您在車庫中保留哪些車以及您在街道停車場保留哪些車由您決定。

這是否意味著任何32位操作系統,無論是Windows還是unix,如果機器的硬盤上的RAM +頁面文件超過4GB,例如8GB RAM和20GB頁面文件,那麼“內存是否會耗盡”?

絕對不是這個意思。單個進程可以使用更多內存!再次 進程使用的內存量幾乎與進程使用的虛擬地址空間量無關。 就像您在車庫中保留的汽車數量與您擁有的汽車數量完全無關。

此外, 兩個進程可以共享非私有內存頁面。如果20個進程都加載了相同的DLL,則進程都共享該代碼的內存頁面。他們不分享 虛擬內存地址空間,他們分享 記憶

我的觀點,如果不清楚的話,那就是 你應該停止將內存和地址空間視為同一個東西,因為它們根本不是同一個東西。

如果這個32位操作系統機器有2GB RAM和2GB頁面文件,增加頁面文件大小將無助於性能。這是真的?

你有50輛汽車和一個四車車庫,街道上有100個停車場。您將停車場的面積增加到200個點。由於您現在擁有150個額外停車位而不是50個額外停車位,您的車是否變得更快?


145
2017-12-13 15:17



我覺得這個答案沒有解決手頭的問題,幾乎在某些方面具有欺騙性。 - Rig
@Rig:太棒了,我很高興聽到你的建設性批評。現在是你的機會 寫一個更好的答案 並向我們展示你認為不那麼具有欺騙性和相關性的答案。 - Eric Lippert
@BlueRaja:我懷疑你很困惑 物理內存 同 記憶。物理內存只是一種允許更快訪問內存的優化。正如處理器緩存是一種允許更快訪問內存的優化一樣。 記憶 用於所有意圖和目的 頁面文件中保留的空間。 頁面文件中的給定頁面是(1)映射到虛擬內存地址還是(2)從磁盤複製到物理內存與是否是它的問題無關 分配 或不。 - Eric Lippert
@BlueRaja:Raymond Chen關於這個主題的文章可能有所幫助。他展示瞭如何從頁面文件中分配4GB;那是 進程擁有的內存。這個過程不能 地址 當然,整個事情,但它可以解決 任何頁面 通過將頁面映射到未使用的VM頁面,使用它一段時間,然後丟棄它。 blogs.msdn.com/b/oldnewthing/archive/2004/08/10/211890.aspx - Eric Lippert
如果您明確聲明Windows(和其他操作系統)允許您“保留”內存而不實際擁有它在您的虛擬地址空間中,並且然後回答明顯的問題“那麼你如何”,這個答案會更清楚,Eric解決它嗎?“我認為答案就是“有一些頁面ID用於引用它以便將其分頁到虛擬地址空間,然後你可以在那裡解決它”,但我不知道,並且你的答案不說:) - Timwi


確實,CPU只能處理最大4Gb的RAM。但是,目前的CPU使用MMU(內存管理單元)將特定於進程的內存地址轉換為物理內存地址。

此MMU用於各種不同的技巧,從內存隔離(進程A無法操作進程B的內存)到內存共享(進程A可以訪問與進程B相同的物理內存區域,並且可以通過這種方式交換數據)。

雖然32位CPU每個進程僅支持4Gb內存,但它在使用時可以處理高達64Gb的RAM 物理地址擴展。這允許進程A使用第一個4Gb內存,而進程B使用下一個4Gb。總共使用了超過4Gb的物理內存, 但單個進程使用的內存總量仍然限制在4Gb

自內核版本2.3.23以及一些32位版本的Windows Server上支持PAE,但不支持32位Windows XP,Vista或7。

如果您的CPU不支持PAE,您將被限制為4GB的物理內存(或更少,具體取決於其他因素)。

請注意,無論CPU支持PAE,您的操作系統仍然可以將部分物理內存驅逐到磁盤(頁面文件)。這可確保您可以啟動多個使用超過4Gb的進程。 PAE唯一的影響是在運行進程A時是否可以將進程B的4Gb保留在物理內存中。


67
2017-12-13 13:02



它是否意味著如果它不支持,那麼我上面說的是正確的嗎?
Windows XP確實支持PAE(我認為從SP2開始),但是即使機器支持PAE,也會忽略超過4GB的RAM;看到 這裡。它用於基於硬件的數據執行保護 - NX / XD位僅在PAE頁表條目中可用,而不是“常規”頁表條目。 - Wyzard
芯片組也可以是支持/使用多少內存的限制因素,無論您選擇哪種操作系統或黑客。 - Moab
我補充說,32位Windows的消費者版本不支持> 4GB內存的原因是,發現大量硬件驅動器無法正常使用這麼多內存;而且當時> 4GB的ram在服務器/超高端工作站之外非常罕見,大多數維護驅動程序的公司都不願意花錢來更新只能用於0.1%客戶群的驅動程序。 - Dan Neely
@DanNeely 操作系統 不 有支持 對於記憶,它是有限的 由於許可問題。雖然我同意這是第三方黑客,但它僅適用於Windows的消費者變體。基於服務器的Windows發行版,從 Windows 2000,已經支持超過4GB的內存(參見第一個鏈接)。 - Breakthrough


特別講到32位Windows變種,自Windows 2003變種以來,他們已經支持超過4GB的RAM(你也可以得到一個 Windows 7的內核破解 允許你使用32位的所有RAM)。但是,正如您在問題的第一部分中所概述的那樣,這需要付出代價。

在32位操作系統中,指針(存儲器地址)的大小與CPU的字長相同,為32位,這允許(如您所述)2 ^ 32 = 4GB的存儲空間。 Windows還為應用程序採用“虛擬內存”方法,因此每個應用程序都有自己的內存空間。

由於每個指針只有32位寬, 每個申請即使系統可以支持超過4GB的RAM,它的指針也只能處理高達4GB的內存。據我所知,這是在32位操作系統中使用超過4GB RAM的唯一警告。總的來說,您可以使用超過4GB的RAM組合使用許多應用程序,但任何一個特定進程最多只能分配/訪問4GB。


回到你的問題,假設你有一個使用2GB RAM的程序。如果你有10個這個程序的實例,那就是20GB。所有8GB的RAM都將用完,另外還有12GB的頁面文件。所以,是的,在32位操作系統下,使用這個內存是可能的。

如果這台32位操作系統機器有2GB RAM和2GB頁面文件,則會增加   頁面文件大小無助於性能。這是真的?

增加頁面文件大小 通常沒有 提高性能(除非你的RAM和頁面文件被設置為絕對最小值,或者設置得如此之低,以至於你的計算機不斷捶打)。但是,它會阻止您的計算機耗盡(虛擬)內存。每當需要清除頁面文件的任何內容時,你就已經開始了 巨大 性能命中(因為硬盤比你的RAM慢幾個數量級)。


15
2017-12-13 13:18



在每個進程獲得的4GB地址空間中,實際上只有2GB可供程序使用;另外2GB保留供內核使用。該 / 3GB 啟動選項可以允許某些程序使用更多的RAM。 - Wyzard
@Breakthrough:“增加頁面文件大小永遠不會提高性能”我不認為這是真的。例如,如果存在更多交換,則OS可以更積極地交換未使用的程序數據,並且例如使用空閒RAM。磁盤緩存。在某些配置中,這可以產生更好的性能。關於為什麼頁面文件很重要,ServerFault有一個很好的答案,它觸及了這些問題: serverfault.com/questions/23621/... - sleske
小心一攬子陳述 “增加頁面文件大小永遠不會提高性能”,頁面文件太小,完全有可能導致比擁有更大的頁面文件更多的磁盤顛簸!查看答案和評論 這個問題。 - Mark Booth
@sleske好點,我把它更新為更“通常不是”類型的東西。雖然我同意它可能會對服務器產生巨大影響,但對於大多數人來說,我試圖解決的問題是,只要獲得更多RAM就會更好(因為當你進行分頁時,性能幾乎一樣慢因為它可以得到)。 - Breakthrough


當一個處理器被稱為32位時,這意味著它可以使用一條指令以32位數運行。這與其地址總線的寬度幾乎沒有關係,因為在英特爾架構上,該地址總線的寬度為36位 奔騰專業版 1995年發布。

著名的4GB限制來自大多數PC軟件使用的事實 平面記憶模型 其中每個字節的內存可以由指針尋址。由於指針應該適合要使用的寄存器,並且寄存器是32位寬,因此限制為4GB。


0
2018-06-17 13:33



這是不正確的,正如上面其他早期的答案所指出的那樣。 - ChrisInEdmonton
你能指出我錯的一個特殊事實嗎? - Dmitry Grigoryev
單個進程可以使用超過4 GB。具體來說,先前的答案指出“進程可以擁有比地址空間更多的內存”。 - ChrisInEdmonton
例如,見 blog.superuser.com/2011/04/23/... 現在,當然,您不能同時使用超過4 GB,但單個進程可以取消映射和重新映射內存,因此可以在一個進程中使用超過4 GB,只需要一些簿記。該博客文章特別針對Windows。我在32位Linux安裝上運行分配了大於4 GB內存的數據庫服務器。當然,這些天你只需要運行64位Linux。 - ChrisInEdmonton
好的,道歉。我沒想到有可能 mmap 額外的記憶。 - Dmitry Grigoryev