DMA

DMA

CPU操作外设时,将外设的数据读到内部寄存器中,再将数据传送至内存中,之所以还要讲数据送到内存,在于CPU内部寄存器数量很少,一般都是靠RAM来临时存储大量的代码和数据的。CPU工作的核心就是一个PC指针,PC指针指向什么地址,CPU就会把相应地址处的二进制数据送至内部译码器进行译码后运行,RAM是一个临时存放代码和数据的地方,CPU要执行代码时,就要到内存(RAM)中去取指令。

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

image

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