据我所知,在 x86 上,某些范围的物理内存地址映射到 BIOS,其他范围映射到 RAM,还有一些范围映射到 I/O 设备。
我想知道哪个硬件组件负责这种映射/翻译。
我的猜测是芯片组或 MMU,或者可能是 CPU 本身上的某种芯片选择逻辑。
答案1
自从 CPU 开始在片上集成内存控制器以来,现在一切都在 CPU 内部。内置在 CPU 内存层次结构中的“系统代理”将物理地址映射到内存控制器或 PCIe。(或映射到 CPU 内部的 MMIO 设备,如集成 GPU)。
在 CPU 内部,它只需确定加载或存储应该进入内存还是片外,以及应该使用哪个 PCIe 通道。一些 PCIe 通道直接从 CPU 连接到外部 GPU(如果有),但其他 PCIe 通道用作与芯片组的南桥,不直接连接到其他附加 PCIe 卡。然后南桥会整理哪个它将进入的设备,包括像 BIOS ROM 之类的东西。
我从以下网址获取了此图片一篇关于 Skylake 的有趣 ArsTechnica 文章,但它最初来自英特尔。没有 eDRAM 内存侧缓存的系统是相同的,只是系统代理的右侧直接连接到 MC(内存控制器)。
英特尔至少从 Sandybridge 开始就将 CPU 的这一部分称为“系统代理”。AnandTech 指出,这是以前被称为北桥或主桥芯片组。(在具有外部内存控制器的旧系统中,北桥会根据需要将加载/存储发送到 DRAM 或 PCI/PCIe。如今的芯片组只有一个主要芯片,即南桥。)
AMD 已经利用集成内存控制器自 K8(第一款 AMD64)以来,英特尔自 Nehalem 以来一直使用 IMC,从核心 2。Nehalem 链接有系统组件相互连接的图表。
还要注意,“MMU”也不是单独的硬件组件;每个核心都有一个 TLB 和页面遍历硬件。