有關32位作業系統記憶體4G位址空間的侷限

2021-04-26 19:29:47 字數 2548 閱讀 8049

一、4gb位址空間的侷限

首先我們還必須要先了解兩個概念&

其一是「物理記憶體」。大家常說的物理記憶體就是指安裝在主機板上的記憶體條,其實不然,在計算機的系統中,物理記憶體不僅包括裝在主機板上的記憶體條(ram),還應該包括主機板bios晶元的rom,顯示卡上的視訊記憶體(ram)和bios(rom),以及各種pci、pci-e裝置上的ram和rom。

其二是「位址空間」。位址空間就是對物理記憶體編碼(位址編碼)的範圍。" ~# r

所謂編碼就是對每乙個物理儲存單元(乙個位元組)分配乙個唯一的位址號碼,這個過程又叫做「編址」或者「位址對映」。這個過程就好像在日常生活中我們給每家每戶分配乙個位址門牌號。與編碼相對應的是「定址」過程——分配乙個位址號碼給乙個儲存單元的目的是為了便於找到它,完成資料的讀寫,這就是「定址」,因此位址空間有時候又被稱作「定址空間」。系統不僅要給主機板上的記憶體條編址,還要給上述的其它物理記憶體編址;它們都被編在同乙個位址空間內,編址後的物理記憶體就可以被系統資源使用或占用。% 

從pentium pro處理器開始,cpu的位址匯流排已經公升級到36位,定址能力達到64gb,按理說cpu支援4gb的記憶體是沒有問題的;因此,晶元組(北橋—mch)位址匯流排的數量就成了決定物理記憶體位址空間大小的決定性因素。在intel 945系列和945以前的晶元組,nforce 550系列和550以前的晶元組都只有32條位址線,為系統提供4gb的位址空間,即最高可以安裝4gb的記憶體條。

雖然可以安裝4gb記憶體條,但這4gb的記憶體空間不能全部紛配給記憶體,因為從4gb空間的頂端位址(ffff_ffffh)開始向下要有400mb-1gb的位址空間要分配給主機板上的其他物理記憶體。

而當系統安裝上4gb記憶體時,問題出現了。由於位於4gb下面的部分位址空間要優先分配給mmio,記憶體條上對應的這段區間就得不到編址,所以作業系統就不能使用。

嚴格意義上來說,即使安裝2gb記憶體時作業系統也不可能使用到全部的記憶體容量,諸如傳統dos的uma區就有部分被占用的位址空間,但因為被占用的容量相比之下實在太少,所以就被很多讀者忽略了。mmio占用的位址空間在256mb~1gb之間,這麼大的「浪費」大家肯定不能「熟視無睹」。  

因為受4gb晶元組位址空間的限制(32條位址線的限制),intel 945系列及以前的晶元組、nvidia nforce 550及以前的晶元組都沒有辦法繞過這個限制。具體原因有三方面:其一是晶元組沒有剩餘空間分配來供作業系統來調配;其二是物理記憶體的編址必須是連續的,不能被割斷;其三是系統開機時必需先從4gb的頂端位址(ffff_ffffh)讀取bios資料, 這是ia32架構和4gb位址空間的侷限. 

所以建議使用這些晶元組主機板的使用者不要安裝4gb的記憶體,這樣會有部分記憶體容量不能被作業系統所使用。而解決4gb記憶體限制的唯一辦法就是擴充套件位址空間。

二、支援大於4gb記憶體的晶元組和「記憶體重對映」技術

面對原有晶元組4gb記憶體的侷限,intel和nvidia早就開始未雨綢繆,他們對傳統的32位位址匯流排進行了調整,將其公升級到36位,並推出了一系列可以突破4gb記憶體限制的晶元組,這就是intel的965系列以及975系列、nvidia的nforce 570/590以及680系列

從上面的晶元組引數來看,位址匯流排從32位提公升到36位,位址空間達到64gb,支援安裝8gb的物理記憶體。但由於ia32架構的規則是開機時必須從4gb的ffff_ffffh位址讀取bios資訊,儘管晶元組支援的位址空間變大了,且最大支援的物理記憶體容量也達到了8gb(或以上),但從本質上來說仍然不能解決mmio位址占用4gb記憶體編址的問題。這要怎麼辦呢?. 

36位位址匯流排最大可以支援64gb的位址空間,這就為移動mmio位址區提供了條件。現在解決這個問題的辦法就是「記憶體重對映」技術——就是在ia32架構的基礎上,把bios(rom)和pci/pci-e裝置占用的mmio位址區段重新對映到記憶體條頂端位址以上 (例如4gb以上)的位址空間,從而把ia32架構規定的這一段作業系統不可使用的、位於4gb下面的mmio位址空間**給物理記憶體使用,保證物理記憶體編址的連續性。

三、bios必須支援「記憶體重對映」

四、解決4gb記憶體問題還需要作業系統支援

我們常使用的桌面作業系統是32位的,支援4gb的位址空間。前面我們介紹了解決4gb問題的晶元組是支援64gb位址空間的,在這樣的晶元組主機板上安裝32位的作業系統,就只能使用4gb的位址空間,因此安裝4gb記憶體不能使用僅支援4gb位址空間的32位的作業系統。應該使用支援大於4gb位址空間的32位作業系統或64位的作業系統。

五、小結. 

1、由於ia32架構要求bios(rom)晶元的位址, pci、pci-e儲存器位址、apci中斷路由位址等必須占用從4gb開始以下的256m-1gb空間。這段mmio位址區不能分配給記憶體條。4gb的記憶體條有256mb-1gb的容量不能編址而浪費。& 

2、使用4gb或者以上的記憶體條,必須使用位址(編址)空間64gb的晶元組主機板。

3、記憶體重對映就是把被mmio占用的位址移到記憶體條容量以上的位址空間。) 

4、bios應具有支援「記憶體重對映」功能,設定項裡有 memory remap feature 選項,並設定為enable。

5、必須安裝定址空間大於4gb的作業系統。比如windows 2000高階伺服器版,以及64位作業系統。

6、所有位址空間為4gb的晶元組(intel945和nforce550之前的),和32位作業系統均不能利用「記憶體重對映」技術解決4gb記憶體問題

基礎 32位作業系統最多隻支援4G記憶體。

32位作業系統最多隻支援4g記憶體。cpu能不能直接訪問硬碟的資料呢,不能。只能通過把硬碟的資料先放到記憶體裡,然後再從記憶體裡訪問硬碟的資料。我們平時玩遊戲碰上讀圖loading 進度條的這個過程,就是把資料從硬碟讀到記憶體的過程啊。讀完條後地圖的資料就在記憶體中了。記憶體是把8個8個bit排成1...

4G以上(含4G)記憶體與32位Linux系統

32位的桌面版ubuntu 估計其他發行版桌面版也是 預設不支援4g的記憶體,現如今有兩種方法,一種是安裝server版本的核心,另一種是啟用pae page address extension 實體地址擴充套件 即安裝pae核心。傳統的ia32架構只有32位位址匯流排,只能讓系統容納不超過4gb的...

32位與4G記憶體限制

32位有4g記憶體限制,好像人所共知。但這個32位是指32位的cpu還是32位的作業系統?答案是,都是。記憶體限制,是作業系統和硬體 cpu,也許還有記憶體控制器 共同制約的。cpu對應的是定址實體地址,而作業系統對應的是定址邏輯位址。實際上使用者在使用計算機時,程序所訪問到的位址是邏輯位址,並不是...