我正在尝试在 PCI Express 事务中查找内存 BAR(基址寄存器)和物理内存之间的联系。在我上一篇问题我开始了解当 CPU 在某个内存地址读取/写入时会发生什么,现在我需要深入了解 PCI Express 事务。
我需要了解每个 PCI Express 内存读/写事务是否涉及物理 RAM。
1) 设备 Memory BAR 寻址的物理内存是驻留在设备本身中吗?还是驻留在 RAM 中?
2) 当我启动对没有内置物理内存的 PCI Express 设备的内存读/写事务并指定内存地址时,如果该地址未映射到内部物理内存,设备如何访问它?当我的设备返回带有数据的事务包时,根复合体是否同时将数据提供给 CPU 并将其插入物理 RAM?
答案1
主系统 RAM 与 BAR 无关。BAR 只是配置设备以解码对这些地址的访问。通常,设备包含多个配置寄存器。BAR 允许 CPU 访问这些寄存器仿佛它们是一块 RAM,但实际上那里没有 RAM。PCIe 根复合体配置为将大多数内存访问路由到 RAM,并将对地址块(通常在 3-4 GB 区域)的访问路由到 PCIe 总线。给定设备中的 BAR 将其配置为响应这些地址的特定块。
另一方面,一些设备,最显著的是视频卡,实际上确实有自己的板载 RAM,可通过 BAR 访问。