DMA如何处理多个并发传输?

时间:2014-09-06 00:37:58

标签: computer-architecture dma

我正在努力实现虚拟机并尝试尽可能准确地模拟所有不同的硬件组件,仅用于纯粹的学习目的。

我的问题是,DMA设备如何处理多个并发传输请求?据我所知,DMA设备有几个寄存器来设置内存中的位置,操作类型(读或写)和字节数,所以当CPU从DMA请求操作时会发生什么,使线程进入休眠状态然后运行的下一个线程还请求DMA操作,而前一个仍在进行中?这甚至支持吗?

1 个答案:

答案 0 :(得分:2)

除非你在谈论古老的ISA时代的硬件,否则现在的DMA由设备本身处理,它拥有总线的所有权并直接从RAM请求数据。有关详细信息,请参阅Bus Mastering上的维基百科文章。

因此,任何单个设备都应该如何处理DMA,所以对于一般情况来说并不多。但是,大多数简单设备一次只支持单个DMA操作;如果主机想要提交两个DMA操作,它只是等待第一个DMA完成(由中断通知),然后指示设备执行第二个,操作系统将请求线程置于休眠状态,同时第一个DMA正在处理。但是,肯定存在一些变化,例如使用命令缓冲区可以为设备指定多个(涉及或不涉及DMA)操作,而不会在每个操作之间中断CPU。

我怀疑有很多设备试图同时进行多次传输,但是,看看如何交错DRAM访问只会损害性能。但我不排除它们的存在,特别是如果操作涉及非常大的转移。

最后,您只需要阅读您尝试模仿的特定设备。