根据我从评论和答案中了解到的信息(谢谢大家!),我编辑了问题以使其更有针对性:
DMA:
在第一次 DMA 之前,CPU 必须设置诸如保留供 DMA 设备使用的 RAM 地址范围之类的内容。一旦设置工作完成,设备是否可以随意启动传输,基本上拥有那部分 RAM,或者在每次单次 DMA 传输之前仍然必须再次获得 CPU 的某种许可?
MMIO:
CPU 通过 mmio 访问设备内存比 CPU 访问 RAM 更昂贵,但我可以在我的桌面上看到,pci 设备为 mmio 保留数百兆字节,有什么例子可以有效地使用它(与使用 DMA 将数据复制回 RAM,然后访问它们)?
最佳答案
从设备的角度来看。该设备可以:
直接访问内存本身(使用DMA本身)
等待CPU向其传输数据(通过提供内存映射IO供CPU使用)
So the question is, if the CPU can access the PCIe memory by memory-maps, why does it have to do DMAs?
CPU 根本不使用 DMA。 DMA 的全部意义在于允许 CPU 在设备执行 DMA 时执行其他操作(或不执行任何操作)。最终结果是整个系统的性能显着提高 - 例如CPU 正在执行许多其他工作,而许多设备(硬盘驱动器 Controller 、显卡、声卡、网卡...)也使用 DMA 来传输数据。
关于io - 内存映射 IO 与 DMA?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58126962/