DMA(Direct Memory Access,直接内存访问)是一种计算机系统中重要的技术,用于在设备和内存之间直接传输数据,而不需要经过中央处理器(CPU)的参与。这样可以减少CPU的负担,提高数据传输的效率。
DMA是指数据在主存与I/O设备间(即主存与外设之间)直接成块传送
DMA的工作原理
通常,数据在设备(如硬盘、网络适配器)和内存之间的传输是通过CPU控制的。CPU会把数据从设备读取到寄存器,再写入内存。这个过程虽然直接,但对CPU的负荷较重,尤其是当大量数据需要传输时,CPU需要花费大量时间在数据搬运上,无法处理其他任务。
DMA的核心思想是让设备控制器直接访问内存,绕过CPU来进行数据传输。为了实现这一点,系统中引入了一个DMA控制器,负责在设备和内存之间管理数据的传输过程。
DMA传输数据的步骤
1. 设备发出DMA请求
设备准备好数据传输时,会向DMA控制器发出一个请求,称为DMA请求信号(DRQ)。这个请求包含了数据的来源(设备或内存)、目标地址、数据块的大小等信息。
2. CPU暂停并授权DMA控制器
当CPU接收到设备的请求时,会暂时停止当前任务,并给DMA控制器发出授权信号(DACK),表示允许DMA控制器接管内存总线控制权。此时,CPU不会再直接参与接下来的数据传输工作。
3. DMA控制器接管总线
DMA控制器通过获取内存总线的控制权,负责管理数据传输。在这个阶段,DMA控制器成为总线主导者,设备和内存之间的数据传输将由DMA控制器来协调。
4. 数据传输(传输周期)
DMA控制器开始数据传输,它会根据设备请求的信息进行一次或多次数据搬运。在整个过程中,每次数据传输都伴随着总线周期的占用。每个周期包含几个阶段:
- 地址阶段(Address Cycle):DMA控制器将内存地址发送到总线,指定数据要传输到的目标地址或从哪个内存地址开始读取数据。
- 数据阶段(Data Cycle):实际的数据传输发生在此阶段,数据会从设备读到内存,或从内存写到设备。这是DMA占用总线的主要阶段。
5. 中断与总线释放
当数据传输完成后,DMA控制器向CPU发送一个中断信号(Interrupt Request, IRQ),通知CPU数据传输已结束。DMA控制器释放总线控制权,CPU恢复对系统资源的控制,继续执行其他任务。
DMA传输占用的总线周期详解
在DMA传输数据时,占用的时钟周期可以细分为以下几个部分:
(1)请求周期(Request Cycle)
- 设备发出DMA请求到CPU授权,这个过程相对较短。CPU会暂停手头任务,发出授权信号给DMA控制器。
(2)仲裁周期(Arbitration Cycle)
- DMA控制器需要获得内存总线的控制权。这涉及到总线仲裁,尤其是在多设备争用总线的系统中。总线仲裁的时间取决于系统的总线架构和设备的优先级。
(3)地址周(Address Cycle)
- 一旦DMA控制器获得了总线的控制权,它首先要向内存发送地址信号。这需要一个总线周期,称为地址周期。DMA控制器将目标内存地址发送到内存控制器,告知从哪个位置开始读取或写入数据。
(4)数据周期(Data Cycle)
- 在这个周期内,DMA控制器会从设备或内存中读写数据。数据周期的数量取决于一次DMA传输的数据量。如果DMA传输的是单个字节或单个字,则一个数据周期就足够;但如果是块传输模式,可能会占用多个数据周期。
- 对于大块数据传输,DMA控制器可以批量占用多个数据周期(如块模式)。每次占用时,总线暂时被DMA控制器独占,而CPU无法访问内存。
(5)释放周期(Release Cycle)
- 数据传输结束后,DMA控制器会释放总线控制权,并发出中断信号给CPU。这需要一个简短的释放周期。CPU接收到中断后,会恢复总线控制权并继续执行其他操作。
DMA的传输模式与时钟周期占用
DMA传输的模式不同,数据传输的时钟周期占用情况也不同:
1. 单字节传输模式(Single Transfer Mode)
- 总线占用少:每次只传输一个字节的数据。传输完成后,CPU立刻重新获得总线的控制权。虽然对系统的干扰小,但效率低,因为每次传输都需要频繁的总线仲裁和控制权的切换。
- 每次传输:2个周期,一个是发送地址,另一个是传输数据。
2. 块传输模式(Block Transfer Mode)
- 总线占用高:DMA控制器一次获得总线控制权后,会传输整个数据块,直到传输完成,期间CPU无法使用总线。块模式非常适合大量数据的连续传输,如硬盘读取或大数据文件传输。
- 每次传输:多个周期,根据块大小决定占用的周期数。
3. 环形缓冲模式(Cycle Stealing Mode)
- 周期占用分散:DMA每次传输少量数据后就释放总线控制权,允许CPU在下一个周期继续使用总线。虽然整体数据传输的时间较长,但这种模式减少了CPU被完全阻塞的时间。适合不急于快速完成的任务。
- 每次传输:部分周期,在DMA传输后,CPU可以继续使用剩余的总线周期。
4. 需求模式(Demand Mode)
- 动态占用周期:只有设备发出数据传输需求时,DMA控制器才会占用总线,这种模式灵活,但总线占用不固定。适合不连续的数据传输。
传输效率与总线仲裁
DMA传输时钟周期的占用效率受系统架构、总线带宽和设备优先级的影响。高级DMA控制器支持多通道并发处理,可以在多个设备之间分配总线访问时间,优化总线利用率。
总线带宽
- 在一个DMA传输周期内,总线带宽决定了每个时钟周期能够传输的数据量。宽总线可以在一个周期内传输更多的数据,例如64位总线一次传输64位数据,而8位总线每次只能传输8位数据。
优先级仲裁
- 当多个设备同时请求DMA时,总线仲裁机制决定哪个设备优先获得总线控制权。如果某个设备优先级较高,它将优先占用总线,减少仲裁延迟。
总结
DMA的高效传输机制通过合理占用总线周期,优化了设备与内存之间的大量数据传输。它通过减少CPU参与,使得系统能够更高效地处理任务。每个传输模式在总线占用和系统资源调度上各有优缺点,可以根据具体需求选择合适的DMA传输模式,以达到最佳的性能。
DMA模式
DMA有几种常见的工作模式:
- 单字节传输模式(Single Transfer Mode):每次传输一个字节,CPU在每次传输后都会介入并允许下一个字节的传输。此模式虽然较慢,但适合需要频繁CPU介入的情况。
- 块传输模式(Block Transfer Mode):一次传输多个字节,直到传输完成或遇到某种阻塞。CPU在整个传输过程中基本不需要介入,效率较高。
- 需求模式(Demand Mode):只有当设备发出需求信号时,DMA才会进行数据传输,这种模式适合不连续的传输。
- 环形缓冲模式(Cycle Stealing Mode):DMA每次传输一小部分数据,并在每次传输后把总线控制权还给CPU,逐步完成整个数据块的传输。
DMA的优点
- 减轻CPU负担:数据传输交由DMA控制器处理,CPU可以腾出资源处理其他任务,提高整体系统的性能。
- 快速传输:DMA允许设备和内存之间以高速直接通信,数据传输效率远高于通过CPU进行传输。
- 并行处理:由于CPU不再参与数据传输,系统可以同时进行其他处理任务,增强并行性。
DMA的应用
DMA广泛应用于以下领域:
- 磁盘读写:硬盘在读写数据时通常会使用DMA直接将数据传输到内存中,而无需经过CPU。
- 网络通信:网络适配器可以使用DMA直接将数据包传输到系统内存,以提高网络传输效率。
- 图形处理:图形处理器(GPU)也常常使用DMA将图像数据直接从内存传输到显示设备。
通过DMA,系统可以在不显著增加硬件复杂性的前提下,大大提升数据传输的速度和效率。