DMA(直接内存访问)

如有雷同,纯属总结。

直接内存访问(Direct Memory Access,DMA)
直接内存访问是一种内存访问技术。它允许计算机内部的某些硬件子系统(外设),可以独立地直接的读写系统内存,不需要CPU的介入处理。在同等程度的处理器负担下,DMA是一种快速的数据传送方式。很多硬件的系统会使用DMA,包含硬件控制器、绘图显卡、网卡和声卡
DMA允许不同速度的硬件设备来沟通,不需要CPU的大量中断负载CPU初始化传输动作,但传输动作本身是由DMA控制器完成的。在DMA传输过程中,不需要CPU的参与,CPU则可以进行其他的工作。DMA传输对于高性能嵌入式系统算法和网络是很重要的。
注:如果不用DMA,内存和磁盘的数据交互则需要通过CPU,CPU需要将每一片数据从来源中读出复制到寄存器,然后再把它们写回到新的地方。
DMA通道
每个DMA通道有一个地址寄存器和一个计数寄存器。要初始化数据传输时,设备驱动程序一起设置DMA通道的地址寄存器和计数寄存器,以及数据传输的方向(读取或写入),然后指示DMA硬件来完成这个传输动作。当传输结束时设备会以中断的方式通知CPU。

缓存一致性问题
DMA会导致缓存一致性问题。CPU带有缓存,DMA的工作是访问外部内存(就是内存)。当CPU访问内存中的某个地址时,暂时先将它放入缓存中,如果修改也是先将缓存中的值修改,若在缓存中的数据尚未更新到内存中前发生了DMA,则DMA将会读到未更新的数据。
一样的,如果外部设备通过DMA过程将新的数据写入内存,则CPU若访问缓存,则会访问到未更新的数据。
两种解决方案:
1.缓存同调系统:以硬件的方式来完成,当外部设备写入内存时,以一个信号来通知缓存控制器某内存地址的值已经过期或是应该更新数据。
2.非同调系统:以软件的方式完成,操作系统必须确认缓存读取时,DMA程序已经开始或是禁止DMA发生。这种方法会造成DMA的系统负担。

你可能感兴趣的:(操作系统)