DMA访问(直接内存访问)

DMA的工作原理是,如果按数据块进行I/O,即需要传输大量数据时,就无须CPU的介入。在这种情况下,我们可以让I/O设备与计算机内存进行直接数据交换。而CPU则可以去忙别的事情。这种将CPU的介入减少的I/O模式称为直接内存访问。

问题是,将CPU从繁忙等待中解脱出来,难道DMA的整个数据读写过程不需要使用处理器的功能吗?当然不是。数据传输当然使用CPU,只不过这里使用的CPU不是计算机里面所有进程共享的CPU,而是由另外一个CPU来负责数据传输。这个另外的CPU就是DMA控制器

也许读者会问,这有什么意思,还是需要CPU繁忙等待,只不过换成一个不同的CPU来进行繁忙等待。何必这么麻烦呢?还不如就让通用CPU来处理。这里的关键是DMA里面的CPU可以比通用CPU简单,而且价格便宜很多,它只需要能够以不慢于I/O设备的速度进行数据读写即可。其他复杂功能,如算数运算、移位、逻辑运算等功能皆可以不要。

DMA控制器既可以构建在设备控制器里面,也可以作为独立的实体挂在计算机主板上。而以独立形式存在的DMA控制器更为常见。使用DMA进行I/O的工作流程如图19-6所示。
在这里插入图片描述

DMA输入输出的过程如下所示:

1)CPU对DMA进行设置,告诉其I/O的起始地址和数据长度。
2)启动DMA过程。
3)DMA进行数据传输。
4)DMA结束后发出中断。
5)CPU响应中断并处理结束事宜。

DMA控制器依生产商的不同而有很大的区别。最简单的DMA控制器在一段时间内只能处理一个I/O,即不能并发;而复杂的DMA控制器可以同时处理多个I/O,即它能够提供多个I/O通道,每个通道可以对应一个I/O设备。

DMA模式的考虑因素

使用DMA模式进行I/O时有一些因素需要考虑:

如何访问总线。
数据存放何处。
内存寻址模式。

由于DMA需要使用内存总线,而CPU也需要使用内存总线,这样将形成内存总线竞争。那么DMA使用总线的模式将依赖于CPU使用内存的模式。根据这些模式的不同,我们可以选择周期盗用(cycle stealing)或者爆发模式(burst mode)。

由于DMA传输的数据量通常较大,数据存放何处就是一个需要考虑的因素。我们既可以将数据直接存入内存,也可以存入DMA缓冲区,然后通过中断让CPU一次性将DMA缓冲区的数据拷入内存。

另外一个考虑因素就是如何寻址内存。是使用虚拟地址还是物理地址?使用物理地址的好处是速度快,缺点是绕过MMU存在安全和可靠性风险。

DMA模式的优缺点

优点就是将主CPU从I/O中解脱出来。而缺点自然是增加了成本和复杂性。而且,由于DMA需要与CPU竞争内存总线,其效率的提高不如理论上的期望。因此,并不是任何I/O都应该使用DMA。

在下述情况下,应该选择使用主CPU:

设备I/O速度非常高。
主CPU没有其他事情可做。
成本考虑。

总结

DMA模式可以提高CPU的效率

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值