内容: 记录用于加快数据传输,减低cpu工作量的DMA
DMA概念: Direct Memory Access
DMA 是所有现代电脑的重要特色,允许不同速度的硬件装置来沟通,而不需要依于CPU的大量中断负载。
否则,CPU 需要从来源把每一片段的数据复制到暂存器,然后把他们再次写回到新的地方。在这个时间中,
CPU对于其他的工作来说就无法使用。
DMA是一种高速的数据传输操作,允许在外部设备和存储器之间直接读写数据。整个数据传输操作在一个
称为"DMA控制器"的控制下进行的。CPU除了在数据传输开始和结束时做一点处理外(开始和结束时候要
做中断处理),在传输过程中CPU可以进行其他的工作(前提是未设置停止CPU访问)。在大部分时间里,
CPU和输入输出都处于并行操作。因此,使整个计算机系统的效率大大提高”。
DMA传输将一个内存区从一个装置复制到另外一个。当CPU初始化这个传输动作,传输动作本身是由DMA控制器
来实行和完成。
典型的例子就是移动一个外部内存的区块到芯片内部更快的内存去。像是这样的操作并没有让处理器工作拖延,
反而可以被重新排程去处理其他的工作。DMA传输对于高效能嵌入式系统算法和网络是很重要的。
在实现DMA传输时,是由DMA控制器直接掌管总线,因此,存在着一个总线控制权转移问题。即DMA传输前,
CPU要把总线控制权交给DMA控制器,而在结束DMA传输后,DMA控制器应立即把总线控制权再交回给CPU。
DMA概念总结:
DMA传送方式是让存储器与外设、或外设与外设之间直接交换数据,不需要经过CPU的累加器中转,减少了
这个中间环节,并且内存地址的修改、传送完毕的结束报告都是由硬件电路实现的,因此大大地提高了数据
的传输速度。一个DMA传送只需要执行一个DMA周期,相当于一个总线读写周期。
DMA是在专门的硬件( DMA)控制下,实现高速外设和主存储器之间自动成批交换数据尽量减少CPU干预
的输入/输出操作方式。
DMA适用场合:
适用场合
DMA方式主要适用于一些高速的I/O设备。这些设备传输字节或字的速度非常快。对于这类高速I/O设备,
如果用输入输出指令或采用中断的方法来传输字节信息,会大量占用CPU的时间,同时也容易造成数据
的丢失。而DMA方式能使I/O设备直接和存储器进行成批数据的快速传送。
DMA传送主要用于需要高速大批量数据传送的系统中,以提高数据的吞吐量。如磁盘存取、图像处理、
高速数据采集系统、同步通信中的收/发信号等方面应用甚广。通常只有数据流量较大(kBps或者更高)
的外设才需要支持DMA能力,这些应用方面典型的例子包括视频、音频和网络接口。
DMA控制器(DMAC)概念及其功能:
DMA控制器(DMAC)
DMA传送虽然脱离CPU的控制,但并不是说DMA传送不需要进行控制和管理。通常是采用DMA控制器来
取代CPU,负责DMA传送的全过程控制。目前DMA控制器都是可编程的大规模集成芯片。
DMA控制器是内存储器同外设之间进行高速数据传送时的硬件控制电路,是一种实现直接数据传送的
专用处理器,它必须能取代在程序控制传送中由CPU和软件所完成的各项功能。
它的主要功能是:
(1)DMAC同外设之间有一对联络信号线--外设的DMA请求信号DREQ以及 DMAC向外设发出的DMA响应
信号DACK;
(2)DMAC在接收到DREQ后,同CPU之间也有一对联络信号线--DMAC向CPU 发出总线请求信号(HOLD或
BUSRQ),CPU在当前总线周期结束后向DMAC发出总线响应信号(HLDA或BUSAK),DMAC接管对总线的
控制权,进入DMA操作方式;
(3)能发出地址信息,对存储器寻址,并修改地址指针,DMAC内部必须有能自动加1或减1的地址寄存器;
(4)能决定传送的字节数,并能判断DMA传送是否结束。DMA内部必须有能自动减1的字计数寄存器,计数
结束产生终止计数信号;
(5)能发出DMA结束信号,释放总线,使CPU恢复总线控制权;
(6)能发出读、写控制信号,包括存储器访问信号和I/O访问信号。DMAC内部必须有时序和读写控制逻辑。
DMA控制器的组成:
DMA控制器的基本组成:
一个DMA控制器,实际上是采用DMA方式的外围设备与系统总线之间的接口电路,这个接口电路是在中断
接口的基础上再加DMA机构组成。习惯上将DMA方式的接口电路称为DMA控制器。
(1)内存地址计数器:用于存放内存中要交换的数据的地址。
(2)字计数器:用于记录传送数据块的长度(多少字数)。
(3)数据缓冲寄存器:用于暂存每次传送的数据(一个字)。
(4)"DMA请求"标志:每当设备准备好一个数据字后给出一个控制信号,使"DMA请求"标志置"1"。
该标志置位后向"控制/状态"逻辑发出DMA请求,后者又向CPU发出总线使用权的请求(HOLD),
CPU响应此请求后发回响应信号HLDA,"控制/状态"逻辑接收此信号后发出DMA响应信号,使
"DMA 请求"标志复位,为交换下一个字做好准备。
(5)"控制/状态"逻辑:由控制和时序电路以及状态标志等组成,用于修改内存地址计数器和字计数器,
指定传送类型(输入或输出),并对"DMA请求"信号和CPU响应信号进行协调和同步。
(6)中断机构:当字计数器溢出时,意味着一组数据交换完毕,由溢出信号触发中断机构,向CPU提出中断报告。
DMA传输过程
1、当外设有DMA需求,并且准备就绪,就向DMAC控制器发出DMA请求信号DREQ。
2、DMAC接到DMA请求信号后向CPU发出总线请求信号HRQ。该信号连接到CPU的HOLD信号。
3、CPU接到总线请求信号以后,如果允许DMA传输,则会在当前总线周期结束后,发出DMA响应信号HLDA。
一方面CPU将控制总线、数据总线和地址总线置高阻态,即放弃对总线的控制权;另一方面CPU将有效的
HLDA信号送给DMAC,通知DMAC,CPU已经放弃了对总线的控制权。
4、DMAC获得对总线的控制权,并且向外设送出DMAC的应答信号DACK,通知外设可以开始进行DMA传输了。
5、DMAC向存储器发送地址信号和向存储器及外设发出读/写控制信号,控制数据按初始化设定的方向传送,
实现外设与内存的数据传输。
6、数据全部传输结束后,DMAC向CPU发HOLD信号,要求撤销总线请求信号。CPU收到该信号以后,使HLDA无效,
同时收回对总线的控制权。
DMA的工作方式:
DMA的工作方式 (因为DMA和CPU都要使用总线,工作方式的区分也就是基于总线的分配方式)
1、停止CPU访内:总线全部给DMA使用。
2、周期挪用方式:又叫周期窃取,是指利用CPU不访问存储器的那些周期来实现DMA操作,此时
DMA可以使用总线而不用通知CPU也不会妨碍CPU的工作。周期挪用并不减慢CPU的操作,但可能
需要复杂的时序电路,而且数据传输过程是不连续的和不规则的。
(周期窃取,是DMA方式中由DMA接口向CPU申请占用总线,占用一个存取周期。)
与CPU暂停访存的方式相比,它既实现了I/O传送,又较好地发挥了主存与CPU的效率,是一种广泛采用的方法。
应该指出,I/O设备每挪用一个主存周期都要申请总线控制权、建立总线控制权和归还总线控制级权。因此,
尽管传送一个字对主存而言只占用一个主存周期,但对DMA接口而言,实质上要占2—5个主存周期(由逻辑线路
的延迟特性而定)。因此周期挪用的方法比较适合于I/O设备的读写周期大于主存周期的情况。
3、DMA与CPU交替访内:这种方式适用于CPU的工作周期比主存存取周期长的情况。
例如,CPU的工作周期是1.2us,主存的存取周期小于0.6us,那么可将一个CPU周期分为C1和C2两个周期。
其中C1专供DMA访存,C2专供CPU访存。这种方式不需要总线使用权的申请、建立和归还过程,总线使用权
是通过C1和C2分时控制的。
DMA的传输方式:
DMA传输方式
1、单字节传输方式:一次DMA只传输一个字节,效率很低。但是在传输过程中CPU有机会获取对总线的控制器。
2、数据块传输方式: 数据以数据块的方式进行传输。只要DREQ启动就会连续地传送数据块。一次请求传送
一个数据块,效率高。在数据的传送期间,CPU长时间无法控制总线。
3、请求传输方式:DREQ信号有效就连续传输数据,否则不能进行数据的传输。
4、级联传输方式:用于通过多个DMA控制器级联以扩展通道。第一级只起优先权网络的作用,实际的操作由
第二级芯片完成。还可由第二级到第三级等。(多个DMAC)
DMA的传输设备种类:
DMA传送类型
1,两个设备之间;
2,设备和内存之间;(多数情况下,DMAC进行的是外设接口和内存之间的传输。)
3,内存和内存之间。
DMA读:把数据由存储器传送到外设。
DMA写:把外设输入的数据写入存储器。
DMA检验(控操作):DMAC不进行任何检验,外设可以进行DMA校验,
存储器和 I/O 控制线保持无效,不进行传送。
DMA的弊端:
DMA传送的优点是以增加系统硬件的复杂性和成本为代价的,因为DMA是用硬件控制代替软件控制的。
另外,DMA传送期间CPU被挂起,部分或完全失去对系统总线的控制,这可能会影响CPU对中断请求
的及时响应与处理。因此,在一些小系统或速度要求不高、数据传输量不大的系统中,一般并不用DMA方式。
因为DMA允许外设直接访问内存,从而形成对总线的独占。这在实时性强的硬实时系统嵌入式开发中将会
造成中断延时过长。
DMA的特点:
主存和DMA接口之间有一条直接数据通路。由于DMA方式传送数据不需要经过CPU,因此不必中断现行程序,
I/O与主机并行工作,程序和传送并行工作。
1、它使主存与CPU的固定联系脱钩,主存既可被CPU访问,又可被外存访问。
2、在数据块传送时,主存地址的确定、传送数据的计数等由硬件电路直接实现。
3、主存中要开辟专用缓冲区,及时供给和接受外设的数据。
4、DMA传送数据块,CPU和外设并行工作,提高了系统效率。
5、DMA在传送开始前要通过程序进行预处理,结束后要通过中断方式进行后处理。
DMA的数据传送过程:
DMA的数据传送分为预处理、数据传送和后处理3个阶段。
(1)预处理
由CPU完成一些必要的准备工作。首先,CPU执行几条I/O指令,用以测试I/O设备状态,向DMA控制器的有
关寄存器置初值,设置传送方向、启动该设备等。然后,CPU继续执行原来的程序,直到I/O设备准备好发
送的数据(输入情况)或接受的数据(输出情况)时,I/O设备向DMA控制器发送DMA请求,再由DMA控制器
向CPU发送总线请求(有时将这两个过程统称为DMA请求),用以传输数据。
(2)数据传送
DMA的数据传输可以以单字节(或字)为基本单位,对于以数据块为单位的传送(如硬盘),DMA占用总线后
的数据输入和输出操作都是通过循环来实现的。需要指出的是,这一循环也是由DMA控制器(而不是通过CPU
执行程序)实现的,也就是说,数据传送阶段是完全由DMA(硬件)来控制的。
(3)后处理
DMA控制器向CPU发送中断请求,CPU执行中断服务程序做DMA结束处理,包括检验送入主存的数据是否正确,
测试传送过程中是否出错(错误则转入诊断程序)和决定是否继续使用DMA传送其他数据块等。
DMA传输与传统中断模式触发传输的区别:
1、中断方式是程序的切换,需要保护和恢复现场,而DMA方式除了预处理和后处理,其他时候不占用CPU
的任何资源。
2、对中断请求的响应只能发生在每条指令执行完毕时(即指令的执行周期之后),而对DMA请求的响应
可以发生在每个机器周期的结束时(在取值周期,间址周期,执行周期之后均可),只要CPU不占用总线
就可以被响应。
3、中断传输过程需要CPU的干预;而DMA传输过程不需要CPU的干预,故数据传输速率非常高,适合高速
外设的成组数据传送。
4、DMA请求的优先级高于中断请求。
5、中断方式具有对异常事件的处理能力,而DMA方式仅局限于传输数据块的I/O操作。
6、从数据传送来看,中断方式靠程序传送,DMA方式靠硬件传送。
DMA快在哪里?
利用它进行数据传送时不需要CPU的参与。每台电脑主机板上都有DMA控制器,通常计算机对其编程,
并用一个适配器上的ROM(如软盘驱动控制器上的ROM)来储存程序,这些程序控制DMA传送数据。
一旦控制器初始化完成,数据开始传送,DMA就可以脱离CPU,独立完成数据传送。
在DMA传送开始的短暂时间内,基本上有两个处理器为它工作,一个执行程序代码,一个传送数据。
利用DMA传送数据的另一个好处是,数据直接在源地址和目的地址之间传送,不需要中间媒介。
如果通过CPU把一个字节从适配卡传送至内存,需要两步操作。首先,CPU把这个字节从适配卡读到
内部寄存器中,然后再从寄存器传送到内存的适当地址。DMA控制器将这些操作简化为一步,它操作
总线上的控制信号,使写字节一次完成。这样大大提高了计算机运行速度和工作效率。
DMA注意点:
1、DMA使用物理地址,程序是使用虚拟地址的,所以配置DMA时必须将虚拟地址转化成物理地址。
2、因为程序使用虚拟地址,而且一般使用cache地址,所以Cache中的内容与其物理地址(内存)
的内容不一定一致,所以在启动DMA传输前一定要将该地址的cache刷新,即写入内存。
3、OS并不能保证每次分配到的内存空间在物理上是连续的。尤其是在系统使用过一段时间而又分配了
一块比较大的内存时。所以每次都需要判断地址是不是连续的,如果不连续就需要把这段内存分成
几段让DMA完成传输