32位的XP系統為什麼有的能識別3.25G內存,有的卻只能識別2.99內存?

前提是都用獨立顯卡的情況下(即不存在被集顯共享內存,主板無集顯,CPU無核顯)


知乎上應該有相關的回答,但是找不到了,我自己好像都回答過,如果有人找到,歡迎重定向。

對於32位XP來說(以下均以32位XP為討論背景),如果裝上4G內存,那麼系統可識別內存=4G-硬體佔用的內存。

硬體佔用的內存不只是集成顯卡的顯存這麼簡單,舉個例子:

如果你插了一塊獨立顯卡,獨顯上也有顯存,那麼CPU通過什麼方式去操作顯存?CPU並沒有什麼特殊的操作顯存的指令,唯一的方法是把獨顯的顯存映射為物理內存地址空間的一部分,這樣才能像訪問內存一樣訪問顯存。

這種映射稱之為MMIO(Memory Mapped I/O,I/O存儲器映射)。

顯卡只是一個例子,不同的PC上,PCI插槽數不一樣,管理這些PCI(PCI-E)設備也需要劃分內存,甚至像網卡、音效卡這些也都需要一定數量的內存地址空間(注意是地址空間,不是物理內存)。

這樣的後果就是32位環境下4G的物理地址空間(注意是地址空間)被挖掉了很多用於做MMIO,所以可識別的物理內存就少了,因為沒有地址去標識這些物理內存。

所以,為什麼不同XP可識別的物理內存大小不同?因為不同PC上的硬體配置不同,一般來說,同樣的硬體配置下,如果配置了一個更大的顯存的獨立顯卡,那麼可識別的物理內存就會少一些。

甚至由於BIOS的不同,可識別的物理內存數量也會不一樣。

另外,題主如果學過彙編就知道了,16位彙編里0xA0000-0xFFFFF這個範圍的內存是BIOS的,其中0xB8000是顯存,這就是一個特別典型的被硬體佔用的內存映射。

補充,題主評論里說開了PAE按說應該能擴展地址範圍啊,是能擴展,但是操作系統不支持(硬體支持了也沒用)

在這個鏈接里:https://technet.microsoft.com/zh-cn/ff557168

PAE 在 Windows 2000 和更高版本的操作系統上受支持。

操作系統PAE 支持的最大內存

Windows 2000 Advanced Server 8 GB 物理 RAM

Windows 2000 Datacenter Server 32 GB 物理 RAM

Windows XP(所有版本) 4 GB 物理 RAM*

Windows Server 2003(和 SP1)Standard Edition 4 GB 物理 RAM*

Windows Server 2003 Enterprise Edition 64 GB 物理 RAM

Windows Server 2003 Datacenter Edition 64 GB 物理 RAM

Windows Server 2003 SP1 Enterprise Edition 64 GB 物理 RAM

Windows Server 2003 SP1 Datacenter Edition 128 GB 物理 RAM

所以,就算你開了PAE,最大內存仍然是4G,為什麼會這樣?別問我,問微軟,這是微軟的市場策略而非技術問題。當然了,微軟給出了一個解釋是兼容性的問題:http://support.microsoft.com/kb/888137/,這麼解釋也是合理的,因為Windows驅動框架一直都沒注意兼容過PAE,所以驅動會有PAE兼容的問題(主要在DMA這塊)


系統的32位mmio區域和硬體有關,像macbook pro 723在xp下就只有2.16GB可識別


推薦閱讀:

TAG:操作系統 | 計算機 | WindowsXP | 電腦硬體 | 32位操作系統 |