2016-09-06 84 views
0

我知道基本的內存尋址的作品,爲什麼它總是建議我們使用的內存量是2的冪,(解釋爲未來的人),因爲所使用的CPU來處理內存中的位只具有2倍的值。所以2位可以尋址4個值,3個可以尋址8位,所以N位可以尋址2^N個值。當最大內存不通電時,計算機如何處理內存尋址?

接下來會發生什麼,當我有一個不同的號碼嗎?例如,假設我在服務器上安裝了160GB的內存(10x16GB)。

假設我們需要X位數來尋址128GB的RAM,CPU只會在尋址時使用X位,並忽略可用的從「129到160」的地址,或者它將使用X + 1位並且有一些無效地址?而不是無效的地址,它會使用這些虛擬RAM?

它甚至可以使用作爲保留值我所知道的,但我真的很想知道發生了什麼。

+0

當操作系統是16位時,他們使用EMM'擴展內存管理器'來允許尋址超過16位。然後,當操作系統是32位的時候,他們能夠處理4GB的內存,4GB以外的任何內存都不會被使用,除了Win32以外,它只使用3GB。現在使用64位,最大內存實際上是以兆兆字節爲單位。只要內存大於可尋址內存,CPU就無法達到超出其可尋址大小的那些內存。 – alvits

+0

CPU受硬件位寬限制,而OS受軟件位寬限制。 – alvits

回答

1

假設此答案一臺PC,因爲它依賴於平臺比CPU更上。

它不能在任何地方靠近。但開始,

它會使用X + 1位,並有一些無效的地址?

它將始終使用所有位,CPU甚至不關心無效地址,您可以使用它們。它甚至不知道,所以它不在乎。

誰是確實知道BIOS是什麼,它會告訴你(「你」是操作系統,可能是)線性地址空間的景觀與幾個BIOS中斷看起來是什麼樣子。只能檢測到「低內存」的舊版本非常簡單,它只是告訴你有多少內存,然後留給你(風景不那麼複雜,所以這就夠了)。 「新」一個(很難,但相對較新),INT 0x15,EAX = 0xE820,會給你一個實際的地圖,它具有線性地址空間範圍列表的形式以及描述。

你不會發現所有實際RAM被在從0開始將在塊被映射,由其中例如存儲器映射裝置映射的孔分離的很好的連續範圍映射。

而且,由於有「低地址」孔(雖然「低」是相對的),一些真正的RAM可以得到推「漲」。所以如果你有4GB的內存,其中一些會被映射到高於0xFFFFFFFF的地址。雖然這些洞實際上取決於。閱讀內存映射。

舉個例子,地圖可能是這樣的:

memory map

第一列是起始地址,第二列是大小,最後一列是類型。類型1是普通的RAM,類型2不是RAM,類型3中有你想要讀取的東西,但你可以在完成後使用它,或者說明如下。還有幾種類型。這張地圖是通過給它4GB的RAM在VirtualBox中生成的。儘管如此,它並不完全相同。要點是,你可以看到這些洞。

如果RAM少得多,第二種類型的範圍會更短,但其餘的看起來相同(無論如何,在VirtualBox上,其他地方通常看起來有點不同) - 那些類型2範圍靠近32位邊界將仍然存在,並且只會有一堆「無」直接映射到它們下面。

因此,它不如在地址中使用一些位數那麼簡單。