微型计算机之DMA

DMA优点

“DMA”是Direct Memory Access的缩写。不使用CPU,而是通过总线直接进行外围功能(模拟功能、通信功能等)和存储器间(闪存、ROM、RAM)的数据传输的功能。

通常,数据传输由CPU执行,而在装有DMA的微型计算机中,DMA代表CPU传输数据(参见图1)。
在这里插入图片描述
因此,CPU只需要算术/逻辑运算等CPU才能完成的工作就可以了。其结果是,通过安装DMA,可以综合提高微型计算机的性能。

DMA的最大优势是通过硬件直接传输数据,从而实现高速、大容量的数据传输。您可以在内存和外围功能中自由选择传输源和传输目的地(但受微型计算机的限制)。

但是,由于只有一条总线和CPU分开使用,所以需要调整总线的使用权。这种“总线调整”在英语中被称为“总线仲裁(Bus Arbitration)”。

DMA的基本操作

在这里插入图片描述

这是从RAM中提取数据并将其发送到通信功能的情况。通常,当CPU进行数据传输时(图2(A)),首先从RAM中读取数据。读取的数据一旦通过CPU中的ALU。然后,ALU直接输出数据,而不对数据进行任何处理,并将数据发送到通信功能。DMA在不通过CPU的情况下从RAM读取数据并将其传输到通信功能。
此时,CPU不会被使用,所以您可以使用ALU进行另一个计算。作为微型计算机,可以并行处理两项工作,非常高效。

首先,CPU在DMA中设置数据数量、源/目的地地址、传输模式等。然后,当DMA传输开始触发时,DMA开始传输。DMA传输启动的触发器可以通过软件或硬件触发。DMA传输结束后,DMA向CPU发出中断,通知传输结束。

仲裁类型(与CPU共享总线权限)

DMA很方便但不是万能的。只有一条总线,所以当DMA使用总线时,CPU就不能使用总线了。如果DMA长时间使用总线来进行大量数据传输,CPU会在此期间一直无法使用总线,从而导致无法将计算结果存储在内存中的问题。因此,需要在CPU和DMA之间高效地使用总线进行调整。这叫做总线仲裁。
还有,使用总线的权利叫做总线权利。总线仲裁是协调(调解)谁拥有总线的权利。

总线仲裁的方式有几种。典型的是Round-Robin,Cycle stealing,burst。

Round-Robin是按顺序让出总线权的方式。例如,如果总线主机是两个,如果CPU使用总线,下一个总线循环使用DMA,然后使用总线交替使用CPU使用。

被称为Cycle stealing的方式是在CPU没有访问内存的总线周期之间涂上,DMA使用总线的方式。

burst方式是指在一定时间内,一个bus Master占有总线权的方式。当你想快速传输优先级高的数据时使用。例如,当DMA发送10个高优先级数据时,DMA会占用总线,直到传输完所有这10个数据为止。

使用上的注意事项

举两个使用DMA时出现的问题的例子。一个是超限运行,另一个是与高速缓存一起使用时发生的主内存数据的丢失。

由于通信功能等原因,CPU或DMA在CPU或DMA未读取接收缓冲器中的数据时,会捕获下一个数据,导致前一个接收数据丢失。如果总线仲裁是Round-Robin方式,则很难发生超限运行,但如果是Cycle stealing或burst方式,CPU或DMA就不能使用总线,等待总线权的时间就会变得更长。在此期间,通信功能在接收到以下数据时会出现超限运行。在其他情况下也会发生超限。

在使用高速缓存的系统中,当DMA重写具有与高速缓存所具有的数据相同地址的主存储器时,高速缓存和主存储器的数据的一致性将丢失。

例如,当CPU将数据写入内存时,如果采用直通方式,则将数据写入高速缓存,同时也将相同的数据写入主内存。如果DMA错误地重写了主内存上的数据,则缓存数据和主内存数据将不同。之后,当CPU读取该数据时,缓存中的数据将被读取,并读取与主内存值不同的值。如果你有一个机制来保持缓存和DMA之间的一致性,但如果没有机制,用户必须管理数据的一致性。

猜你喜欢

转载自blog.csdn.net/qq_18191333/article/details/107586908