DMA是什么?怎么出现的?

DMA:Direct memory access,是一种访问内存的模式。它是怎么诞生的?

1. DMA的诞生起因:PIO模式太慢了

没有DMA之前的上古时代,很多设备都是低速的,比如PS/2的键鼠、PATA的光驱等。此时CPU访问它们的方式都是PIO。简单说,就是CPU去轮询(polling)这个设备(其实是设备控制器,CPU是不能直接访问设备的),检查是否有新的数据,如果有,就把它读入到内存中。

这个轮训的方式,至今在单片机的数据采集中还经常用到。这样做有个问题:低效,CPU大把的时间都用来检查了。那么有没有别的办法呢?有,中断。CPU通知设备控制器,我很忙,有很多事要去做,不能一直看你,这样吧,你接收到数据就告诉我好了。单片机的中断机制也是这样,UART的FIFO满了,产生一个中断告诉CPU,CPU进入Interrupt Service Route函数,把UART FIFO中的数据读走。

这样也有一个问题:当数据多了(比如磁盘中的一个大文件),中断就会很频繁。也变得低效了。怎么办?

2. DMA的诞生

于是就有了DMA控制器,它可以理解成是CPU的“协处理器”,也是CPU的小弟,CPU告诉它,我要读取磁盘中的一个小电影,但是我还有其他的事情(比如说打一局Dota),你来负责电影的读取吧。

就这样,DMA控制器替CPU接管了访问磁盘的总线控制权(所有的外设都是挂在总线上的),根据CPU发过来的数据大小和设备ID,来实现对设备的读写。这样就比PIO高级了。

这种DMA叫做Third-party DMA,或者Standard DMA,或者System DMA。总之呢,就是用一个总线上所有设备共享的DMA控制器来管DMA这件事。这类DMA也是很慢的,在磁盘这类高速设备出现之后就基本被First party DMA取代了。

First-party DMA又称为Bus Mastering,就是所有的外设直接可以申请总线的控制权,基本没有CPU什么事了。后面我们在学习用Xilinx FPGA实现一个PCIe的时候,它的IP core就是Bus mastering模式的(XAPP1052)。

 

其他的一些问题:

1. DMA控制器在硬件上是一个什么样的存在?

DMA控制器早期是一个独立的存在:比如intel的8237,但是随着总线技术的发展,8237的功能逐渐被放到了芯片组中,比如我家里PC用的芯片组是C216,里面就提到了DMA的功能:SATA Controller(支持DMA),USB Controller(支持DMA),Giga Ethernet Controller(支持DMA),LPC DMA Controller(用于LPC总线设备的DMA)等。

2. Ultra DMA是什么?

访问ATA总线外设的一种快速的DMA模式。目前最快可以达到167MB/s(UDMA7),我所接触到的主要是在CF卡上的应用。

 

 

 

 

  • 3
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
DMA(Direct Memory Access,直接内存访问)传送方式是计算机系统中一种高速数据传输方式,它允许外设直接访问系统内存,而无需经过CPU的中介。DMA传送方式通过专门的DMA控制器实现,提高了数据传输的速度和效率。 DMA传送方式的优点主要有以下几点: 1. 高效性:DMA传送方式可以在不占用CPU的情况下,直接将数据从外设传输到内存或从内存传输到外设,从而提高了数据传输的速度和效率。 2. 降低CPU负担:DMA传送方式可以减轻CPU的负担,让CPU专注于处理其他任务,提高了系统的整体性能。 3. 灵活性:DMA传送方式可以通过编程来配置DMA控制器的参数,支持多种数据传输模式和多种外设接口,具有很好的灵活性和可扩展性。 但是,DMA传送方式也存在一些缺点: 1. 复杂性:DMA传送方式需要专门的硬件支持,包括DMA控制器、DMA通道、DMA缓冲区等,需要进行复杂的硬件和软件设计和实现。 2. 容错性:由于DMA传送方式不经过CPU的中介,一旦出现数据传输错误,CPU无法及时响应和处理,因此需要额外的容错机制来保证数据传输的可靠性。 3. 独占性:DMA传送方式需要占用一定的系统资源,可能会导致其他任务无法及时执行,从而影响系统的整体性能。 综上所述,DMA传送方式通过专门的DMA控制器实现,提高了数据传输的速度和效率,但也存在一些缺点,需要在设计和应用时进行权衡。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值