DMA(Direct Memory Access)直接存储器存取

高速大容量存储器和主存之间交换时,若采用程序直接传送或程序中断传送的方式,则会有如下问题发生。
    1)采用程序直接传送,主机工作效率受到限制。
    2)采用中断控制数据传送可以提高主机效率,但用于高速外设和主机交换信息,会使主机处于频繁的中断与返回过程中,从而加重了与中断有关的额外负担(即保护旧现场,恢复新现场),这样降低了CPU的性能,还有丢失数据的可能。

DMA是l/O设备与主存之间由硬件组成的直接数据通路,主要用于高速I/O设备与主存之间的成组数据传送。
数据传送时是在DMA控制器控制下进行的,由DMA控制器给出当前正在传送的数据字的主存地址,并统计传送数据的个数以确定一组数据的传送是否已结束。在主存中要开辟连续地址的专用缓冲器,用来提供或接收传送的数据。在数据传送之前和结束后要通过程序或中断方式对缓冲器和DMA控制器进行预处理和后处理。
 对磁盘的读写是以数据块为单位进行的,一旦找到数据块的起始位置就将连续地读写。

一、DMA控制器

主要功能:

组成:

DMA控制器包括多个设备寄存器、中断控制和DMA控制逻辑等。主要的寄存器有:
  (1)主存地址寄存器(MAR):存放要交换数据的主存地址
  (2)外围设备地址寄存器(ADR):存放I/O设备的设备码,或者表示设备信息存储区的寻址信息。
  (3)字数计数器(WC):对传送数据的总字数进行统计。
  (4)控制与状态寄存器(CSR):用来存放控制字和状态字。
  (5)数据缓冲寄存器(DBR):暂存每次传送的数据。

二、DMA传送过程

DMA的数据传送过程可分为三个阶段:

DMA预处理
DMA数据传送
DMA传送后处理

在上面数据传送的过程中,CPU和DMA控制器访问主存时可能会产生冲突 ,争夺总线的访问权。那么应该如何安排CPU和DMA的访存?

三、DMA传送方式

四、DMA方式特点

五、DMA方式与中断方式比较

用一道例题来分析这两种方式对CPU的占用情况。

 使用DMA方式虽然预处理和后处理所占用的时钟周期开销比较大,但是由于传送的数据块比较大,一秒内需要CPU管理的次数就比较少,综合起来就是占用CPU时间的百分比比较小。

而中断方式,虽然一次中断所占用的时间比DMA预处理和后处理所占用时间小,但一次中断传送的数据量小,一秒内需要CPU管理的次数就比较多,所以占用CPU时间的百分比就比较大了。

对于该题,需要知道的是中断方式下,CPU用于访问外设的时间响应中断服务的时间开销;而DMA方式下,CPU用于访问外设的时间是DMA预处理和后处理的时间开销,数据传输的工作交给了CPU去执行。

六、总结

最新文章

  1. 拯救你的文档 – 【DevOps敏捷开发动手实验】开源文档发布
  2. ASP.NET Page对象各事件执行顺序(转)
  3. 读取ini配置文件
  4. emoji表情引发的JNI崩溃
  5. room_speed和image_speed
  6. RMQ和LCA
  7. C#一些小知识点
  8. bzoj1565
  9. first move advantage_百度搜索
  10. 简单Demo的用户登录JSP界面IE、Firefox(chrome) Enter 键提交表单
  11. c 语言 指针 与地址
  12. MySQL Community Server 5.7安装详细步骤
  13. Hi,给他介绍一款markdown的帮助文档生成器
  14. Reading Level Assessment Using Support Vector Machines and Statistical Language Models-paper
  15. rocketmq自启动配置
  16. 【模板】HDU 1541 树状数组
  17. C++STL 迭代器
  18. 阿里云centos7安装图形界面
  19. 如何用WebSocket实现一个简单的聊天室以及单聊功能
  20. 2018.09.28 bzoj3688: 折线统计(dp+树状数组)

热门文章

  1. 牛客练习赛31A 地、颜色、魔法(搜索+二维数组一维表示)
  2. diff命令的妙用
  3. Winform修改配置文件节点保存到配置文件
  4. 小公举-linux的计算器
  5. ssh服务介绍及配置
  6. imageRectForContentRect,titleRectForContentRect,contentRectForBounds,imageRectForContentRect什么时候调用
  7. Android组件体系之BroadcastReceiver小结
  8. php的swoole和rpc区别
  9. 使用matplotlib库绘制函数图
  10. 页面中加入地图map