您好、欢迎来到现金彩票网!
当前位置:双彩网 > 写到内存 >

一直不明白DMA(直接内存存储)

发布时间:2019-06-27 03:02 来源:未知 编辑:admin

  你的理解“数据从外围设备读入内存”,这就是DMA了。内存是CPU的外存,是由CPU控制的,外围设备怎么能够自己读入内存呢,它只能读入自己的缓存(比如硬盘现在都讲这个指标),然后触发中断CPU,CPU设置DMA控制器,由DMA控制器把外围设备的数据直接写入内存,这时CPU就可以完成其它事情了。

  我也来谈谈程序员仅仅是青春饭,不仅限于PIG884

  那本书上说得没错的,一般说来,CPU操作外设时,将外设的数据读到内部寄存器中,再将数据传送至内存中,关键就是最后这一句,为什么CPU还把数据送到内存中呢???因为CPU内部寄存器是很少的,不可能用内部寄存器来存储很多数据,所以都是用RAM来临时存储大量的代码与数据,CPU运行的核心就是一个PC指针,这个PC指针指向什么地址,CPU就会把相应地址处的二进制数据送至内部进行译码运行!!!!所以RAM就是一个临时存储代码与数据的地方,CPU要执行代码时就到内存中去取指令。那些外设上的数据也被临时存储到了内存中,有些必要的数据有可能会被操作系统的驱动写入到另一外设中!!!!!

  DMA却是另一个概念,在现代操作系统中,外设有数据到来时,基本上都采用中断方式通知CPU,操作系统响应中断,然后再从外设读取数据,这时,如果外设的数据比较频繁,那么是否每到一个数据都中断一次呢??这样CPU就非常频繁地被外调中断打断,操作系统在处理中断时要浪费一定时间,而且CPU读外部IO速度也很慢,这样的话,大量时间被用在了响应中断上,而去调度其它任务的时间减少,让人感觉系统响应速度不够,也会影响外设的数据传输速度(如果外设传输速度太快,操作系统就有可能丢失部分数据),所以就采用了DMA的传输方式:

  这种方式下,外设直接将一块数据放在了RAM中,然后再产生一次中断,这样操作系统直接将内存中的那块数据传给想要获取这块数据的一个任务(或者放在内存的另一空闲部分),此时,系统就少了频繁响应外设中断的开销,也少了读取外设IO的时间开销(读取RAM比读取外设IO要快很多),这就是DMA的作用所在!!!!!!

  学习一下计算机体系结构就清楚了,DMA实际上是盗用了总线时间来传输数据,而且由于是硬件处理,所以大大加速了数据复制速度!

  很熟,关键是这句话cpu从内存读数据,应该是cpu从地址读数据,因为计算机启动后,会有地址映射,所有的外设都分配到了一段地址(有的外设是io地址,看具体情况了),cpu通过访问地址来访问外设,比如访问适配卡,在系统启动后,可能分配了io地址0xc0000000(随便写一个),那么从汇编语言来看,从适配卡读一个数据写入内存,应该是这样的,

http://marsdomino.com/xiedaonacun/250.html
锟斤拷锟斤拷锟斤拷QQ微锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷微锟斤拷
关于我们|联系我们|版权声明|网站地图|
Copyright © 2002-2019 现金彩票 版权所有