首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

電腦記憶體位址映射:新增記憶體模組時邏輯位址如何擴展

     編輯:程式設計綜合問答

問題核心

CPU 以統一邏輯位址空間管理所有儲存裝置。當主機板插上第一根 4GB 記憶體,其位址範圍為 0x0000_0000 ~ 0x0FFF_FFFF。若再插入第二根 4GB 記憶體,新記憶體的邏輯位址是**接在原有範圍之後** (0x1000_0000 起),還是**插在中間**導致原有裝置位址後移?

答案:位址空間線性擴展,原有裝置位址不變

  • **記憶體控制器** 在開機階段 (BIOS/UEFI) 掃描插槽,依插槽順序或晶片組規則,將各記憶體模組**連續映射**到實體位址空間。
  • 原有 4GB 位址範圍**維持不變**,新記憶體**追加在高位址端**。
  • 其他裝置 (顯示卡、PCIe、ROM) 的位址映射在**記憶體映射 I/O (MMIO) 區域**,通常位於 4GB 附近 (3GB~4GB 之間),**不會**因記憶體增加而位移。

詳細機制

  1. 開機掃描:BIOS 讀取 SPD (Serial Presence Detect) 取得每根記憶體大小、速度。
  2. 位址分配:依晶片組規格 (如 Intel Flex Memory、AMD Dual Channel) 決定交錯或連續模式。現代多為**連續模式**:DIMM0 佔低位址,DIMM1 佔高位址。
  3. ACPI 表單:建立 SRAT (System Resource Affinity Table) 與 E820 記憶體映射表,告知作業系統各區域屬性 (System RAM, Reserved, ACPI NVS...)。
  4. 作業系統視角:OS 看到的是一個連續的實體記憶體範圍 (可能有洞),透過頁表映射到虛擬位址空間,應用程式完全感知不到物理插槽差異。

32 位元系統的 4GB 限制

若為 32 位元 OS,實體位址總寬度僅 32 位 (4GB)。當裝置記憶體 > 4GB 時,MMIO 區域會佔用高位址,導致部分實體記憶體**被遮蔽** (見不到),需啟用 PAE (Physical Address Extension) 或改用 64 位元 OS 才能完整使用。

參考資源

推薦閱讀:記憶體位址映射詳細圖解 (含 BIOS 分配流程、E820 表、PCIe BAR 分配等進階主題)。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved