如果只有一个内存接口,就会有硬件在请求之间进行仲裁。通常情况下,处理器将获得高于 I/O 的优先级而不会导致 I/O 饥饿,但即使 I/O 始终具有优先级,处理器也会有一些机会访问内存,因为 I/O 往往具有较低的带宽需求并且是间歇性的。
此外,通常有不止一个内存接口。更高性能的处理器通常具有缓存(如果 DMA 不连贯,甚至不必窥探缓存;即使使用窥探,由于缓存和主存储器之间的带宽差异,或者(当 DMA 传输到 L3缓存)在 L3 缓存和 L1 缓存之间),提供一个单独的接口来访问内存。微控制器通常会从单独的基于闪存的存储器访问指令,允许在 DMA 期间继续对片上存储器进行提取,并且通常具有具有独立接口的紧密耦合存储器(允许多次数据访问以避免 DMA 冲突)。
即使使用单个存储器接口,峰值带宽通常也会高于通常使用的带宽。(对于指令提取,即使是从内存中读取加载量大于平均水平的小缓冲区,也会允许在另一个代理正在使用内存接口时从缓冲区中提取指令,从而利用代码不分支的趋势。)
另请注意,由于处理器访问数据,因此如果存在单个内存接口,则必须有一种机制来在数据访问和指令访问之间进行仲裁。
如果处理器(具有单个内存接口)被迫执行从 I/O 设备缓冲区到主内存的复制,它还必须获取指令来执行复制。这可能意味着即使在具有内存-内存操作的 ISA 中,每个字也需要两次内存访问(如果未提供后增量内存寻址,则加载存储 ISA 可能需要 3 次或更多内存访问);这是在旧系统中可能与主存储器共享相同接口的 I/O 访问的补充。DMA 引擎不访问内存中的指令,因此避免了这种开销。