阅读:1818回复:10
DMA如何提高CPU的工作效率?
我是做应用软件的,前几天对硬件产生了兴趣,可是这个DMA让我百思不得其解,我看了论坛的文章,上面有一篇这样写道:
----------------------------------------------------- “DMA最明显的一个特点是它不是用软件而是采用一个专门的硬件电路 ──DMA控制器来控制内存与外设之间的数据交流,无须CPU介入,大大提高 CPU的工作效率。 在进行DMA数据传送之前,DMA控制器会向CPU申请总线控制权, CPU如果允许,则将控制权交出,因此,在数据交换时,总线控制权由DMA控制 器掌握,在传输结束后,DMA控制器将总线控制权交还给CPU”。 ------------------------------------------------------ 总线被占用了,而CPU必须通过总线访问内存获取执行指令,那CPU怎么工作????即使有一、二级内存缓存,但使用写通时,CPU写内存时还是要使用总线呀?况且即使是读,但一、二级缓存总是有限的,它们主、用完了还是要从内存读,岂不还是要使用总线? 还有PCI总线设备不是不用DMA控制器吗,为什么Intel的ICH2里面还有DMA Device,是为外部PCI-ISA扩充准备的吗? IDE的硬盘有ULTRA DMA访问模式,它需要ICH2的DMA Device的支持吗? 万望大虾指点迷津 |
|
沙发#
发布于:2003-04-19 10:41
我理解CPU和内存之间的数据传输是靠内部的总线来传输的,它和外部的总线是两个概念!
|
|
|
板凳#
发布于:2003-04-21 14:57
楼上兄弟,感谢你的回贴,不过我认为局部总线是挂在Host Bus上的,比如PCI Bus是通过HOST-PCI Bridge连到Host Bus上,而内存也是通过内存控制器挂到Host Bus,ISA总线又可以通过ISA-PCI Bridge挂到PCI Bus上,DMA访问过程中,数据肯定是通过ISA总线-PCI总线-HOST总线在ISA设备与内存之间进行交换。除非内存除了通过Host Bus访问之外,还提供了额外的到局部总线的接口,但我查阅了Intel的硬件手册,850 MCH Data sheet, ICH2 Data sheet,P4-487Socket Data sheet,都没有发现有这样的接口存在,不知道是我看得不够仔细,还是它没有指出,还是其实并没有这样的接口存在,如果是这样,我的问题还是没有解决。
|
|
地板#
发布于:2003-04-21 15:05
或者内存提供了除Host Bus之外的到CPU的接口,不过这肯定是不可能的,因为Host Bus就是用于CPU访问内存,I/O端口地址的,至于CPU内部总线是CPU的各个逻辑单元以及一级高速缓存之间交换数据用的,一级与二级高速缓寸之间又有一个前端总线,不过它们可以看做是CPU的一部分,而与内存,外设是隔离的,处于CPU(目前流行的,以前二级缓存是外置的)内部。
|
|
地下室#
发布于:2003-04-21 15:57
hi freejack:
很好的问题,问题被你想的太复杂,就我对DMA的认识,你看到的那段描述是很正确的。 至于你提到问题:我曾在CVE仿真环境下看到的波形是,在DMA占用总线期间,CPU是不取指令的,因为这个时候CPU没有总线控制权,而DMA 控制器才是总线的MASTER,在DMA一次操作后会释放控制;当然DMA有多种模式,对总线的释放并不意味一定完成了整个DMA传送请求。 总之,在总线看过去,CPU 和DMA controller 都是他的老板,不知回答问题没有。 |
|
5楼#
发布于:2003-04-21 16:47
rongsiji,是不是DMA控制器占用总线的时候,CPU从缓存读取数据执行,如果缓寸用完了CPU则等待,而DMA控制器占用总线的时间很短,所以是不是存在这样一个规律:如果缓存足够大,而DMA控制器占用总线的时间又足够短的话,那么两者并行的机会就足够大,但仍然存在着碰撞的情况。反之的话就根本不能实现并行,或很少能够并行。
|
|
6楼#
发布于:2003-04-24 16:25
hi there,
没有那么复杂,缓存应当是设计在CPU内部的,比访问外部的MEMORY要快,不过这与你的问题没有关系。有关系的是从硬件结构来看,缓存也要挂在总线上,DMA占了总线,CPU只能等。 DMA是直接内存访问,这个直接指外设不经过CPU去访问。就我的知识,常见的冯诺依曼体系结构是不存在你说的并行情况. :) |
|
7楼#
发布于:2003-04-25 12:10
CPU只能等,那就是CPU啥事都做不了了,那么第一贴引用的“大大的提高了CPU的工作效率”是不是可以理解为DMA控制内存读写时间更短,比如DMA控制须2个小时才能读完的工作,CPU控制却要3个小时才能完成(有点夸张:-P),从而到达了提升整个系统工作效率的目的?(而我以前理解的是通过提高并行度提高效率)
|
|
8楼#
发布于:2003-04-25 16:11
我里指的是提高CPU与外设并行度。当内存与HDD交换数据时,以CPU仍可以工作。数据交换由DMA来完成,适当的时候CPU才会干涉
|
|
9楼#
发布于:2003-04-26 11:48
综合wangxf与rongsiji的贴子,我彻底昏菜了,哪位大侠仗义出手,帮我总结总结?????痛苦中~~~~~~~~~~~~~~
|
|
10楼#
发布于:2003-04-26 13:22
大部分内容和楼上的说的一样。
不过dma控制器是在每个机器周期的最后窃取总线控制权来传送数据的,所有dma会影响cpu的效率,当然这是相比于它不占用总线时的情况:) 总的来说,dma方式提高了cpu效率,不用它干预数据传送的大部分过程。 [编辑 - 4/26/03 by znsoft] |
|
|