我正在研究新颖的计算机架构,我需要更清楚地了解内存控制在 PC 中的工作原理。
简而言之,我想知道 PCI-E 设备(例如 GPU)是否可以访问 RAM 并写入 RAM,而无需接触 CPU。假设系统知道允许写入的位置(有点像虚拟机),这样您的系统就不会失控。
如果您能简短清晰地描述内存控制器和 CPU 如何交互以及 GPU 或 PCI-E 设备如何访问系统内存,我们将不胜感激。
提前谢谢你,Gecko
答案1
简而言之,是的。最初(在 8086 中)它被称为 DMA,即直接内存访问。当时有一个专用的 DMA 控制器芯片,CPU 必须对其进行编程才能在 RAM 和外围设备之间传输数据,但至少可以追溯到早期的 PCI 时代(我思考在原始的 ISA 总线上也是如此,但我不知道有任何设备这样做),外围设备本身也可以是总线主机,并自行传输数据。
它们通常仍需要 CPU 来告诉它们应该访问哪些内存部分,但一些行为不良的设备(如火线控制器)会根据火线总线上某些外部设备的命令打开对系统所有内存的 DMA 访问。一些现代 PCIe 系统具有智能 PCIe 桥,可以对其进行编程以执行地址转换和访问限制,以便 CPU 可以阻止连接在其后面的设备访问它们不应该访问的内存,但这目前似乎仅限于大型服务器类型的主板,而不是典型的台式机。
至于如何,PCI(e) 总线允许任何设备对任何地址执行读/写操作,无论是在主系统 RAM 中(现在通常由 CPU 直接控制),还是在总线上的其他设备上。也就是说,一个 PCI(e) 设备可以直接访问另一个 PCI(e) 设备或主系统 RAM 的内存或寄存器,而不管它位于何处。PCI(e) 桥将请求路由到适当的设备,因为它们已配置(由系统固件/bios,可能稍后由 OS 内核配置)以知道哪些地址范围由哪个设备“拥有”。
答案2
我想知道 PCI-E 设备(例如 GPU)是否可以访问 RAM 并写入 RAM,而无需接触 CPU。
是的,它被称为总线控制
PCI/PCIe 适配器可以控制总线,并争夺内存周期。CPU、DMA 控制器和总线主控器都可能争夺内存访问权。内存仲裁器通常偏向 CPU,因为 CPU 通常被分配最高优先级。