• DMA(Direct Memory Access)简介


    什么是DMA(Direct Memory Access)

    • DMA绕过CPU,在内存外设之间开辟了一条 “隧道” ,直接控制内存与外设之间的操作,并完全由硬件控制。
    • 这样数据传送不经过cpu,不需要保护、恢复CPU现场等一系列操作,减少开销

    如何运行

    • 向cpu索要系统总线:接受外设发出的DMA请求,并向CPU发出总线请求。CPU响应总线请求,发出总线响应信号,接管总线控制权,进入DMA操作周期。
    • 在系统总线上,进行内存和外设之间的数据传输:确定传送数据的主存单元地址及长度,并能自动修改主存地址计数和传送长度计数。规定数据在主存和外设间的传送方向,发出读写等控制信号,执行数据传送操作。
    • 归还总线:向CPU发送DMA操作的结束。

    如何传输

    • 主存和DMA控制器之间有一条数据通路,当二者同时访问数据通路时,可能会发生冲突,有以下解决方法:

    停止CPU访问主存(CPU基本不工作,DMA说了算)

    • 简析:DMA要求使用总线,CPU就让给DMA使用。
    • DMA接口向CPU发送一个信号,要求CPU放弃相关线路的控制权(地址线、数据线和有关控制线)。
    • DMA接口获得总线控制权后,开始进行数据传送。
    • 在数据传送结束后,DMA接口通知CPU可以使用主存,并把总线控制权交还给CPU。
    • 这种传送过程中,CPU基本处于不工作状态和保持原状态。

    DMA与CPU交替访存(CPU工作分时,CPU说了算)

    • 简析:CPU工作分成两个周期:访问主存和不访问主存的周期,前者CPU访问主存,后者DMA访问主存。

    • 这种方式适用于CPU的工作周期比主存存取周期长的情况。例如,CPU的工作周期是1.2us,主存的存取周期小于0.6us,那么可将一个CPU周期分为C1和C2两个周期。其中C1专供DMA访存,C2专供CPU访存。

    • 这种方式不需要总线使用权的申请、建立和归还过程,总线使用权是通过C1和C2分时控制的。

    周期挪用(相互商量,不允许打断)

    • 简析:CPU和DMA相互商量,CPU不用访存时DMA使用;CPU访存时DMA不可打断;二者同时访存时,DMA访存。
    • 这种方式是前两种方式的折中,当I/O设备没有DMA请求时,CPU按程序的要求访问主存,一旦I/O设备有了DMA请求,会遇到3种情况。
    • 第一种是此时CPU不在访存(如CPU正在执行乘法指令),故I/O的访存请求与CPU未发生冲突;
    • 第2种是CPU正在访存,则必须等待存取周期结束后,CPU再将总线占有权让出。
    • 第3种是I/O和CPU同时请求访存,出现了访存冲突,此时CPU要暂时放弃总线占用权,由I/O设备挪用一个或几个存取周期。

    参考自,更多细节请见:博客https://blog.csdn.net/jxq0816/article/details/52634702

  • 相关阅读:
    42.旋转数组的最小元素[Get min value of rotated array]
    洛谷 P3496 [POI2010]GIL-Guilds
    洛谷 P2777 [AHOI2016初中组]自行车比赛
    洛谷 P3184 [USACO16DEC]Counting Haybales数草垛
    洛谷 P2563 [AHOI2001]质数和分解
    洛谷 P2997 [USACO10NOV]旗帜Banner
    洛谷 P2959 [USACO09OCT]悠闲漫步The Leisurely Stroll
    洛谷 P2965 [USACO09NOV]农活比赛The Grand Farm-off
    洛谷 P2548 [AHOI2004]智能探险车
    洛谷 P1041 传染病控制
  • 原文地址:https://www.cnblogs.com/vancasola/p/8934124.html
Copyright © 2020-2023  润新知