小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
上篇文章介绍了DMA,本文主要介绍DMA的传送方式和传送过程。
DMA的传送方式
主存和DMA控制器之间有一条数据通路,因此主存和IO设备之间交换信息时,不通过CPU。但是当IO设备和CPU同时访问主存时可能发生冲突,我们介绍下DMA如何与CPU使用主存
- 停止CPU访问主存
- DMA与CPU交替访问主存:适用于CPU工作周期远大于主存存取周期的情况,将一个CPU周期分为两份,一份专门用于DMA访问内存,另一份用于CPU访问内存。相对于上一种方法,不需要总线使用权的申请,建立和归还,省下了时间。
- 周期挪用:同时冲突DMA优先,CPU正在访存时有需求,则下个周期给DMA,如果同时请求,则借用给DMA几个周期,其余时间CPU占用内存。
DMA的传送过程
DMA方式和中断方式的区别
- 中断方式是程序的切换,需要保护和恢复现场;而DMA方式除了预处理和后处理,其他时候不占用CPU的任何资源。
- 对中断请求的响应只能发生在每条指令执行完毕时(即指令的执行周期后);而对DMA请求的响应可以发生在每个机器周期结束时(在取指周期、间址周期、执行周期后均可),只要CPU不占用总线就可被响应。
- 中断传送过程需要CPU的干预;而DMA传送过程不需要CPU的干预,因此数据传输率非常高,适合于高速外设的成组数据传送。
- DMA请求的优先级高于中断请求。
- 中断方式具有对异常事件的处理能力,而 DMA方式仅局限于传送数据块的IO操作。从数据传送来看,中断方式靠程序传送,DMA方式靠硬件传送。