前文《I/O Zero Copy是什么?》介绍了 Zero Copy 的本质就是 IO 设备跟用户程序空间传输数据的过程中,减少数据拷贝次数,减少系统调用,实现 CPU 的零参与,彻底消除 CPU 在这方面的负载。实现 Zero Copy 用到的最主要技术是 DMA 数据传输技术和内存区域映射技术(虚拟内存)。
挖坑不断,填坑不止,通过《10 分钟看懂虚拟内存底层原理》我们学习了虚拟内存的底层原理。今天,我们来填一下 DMA 的大坑。从上层应用一路往下到底层硬件高速数据交换接口 DMA,越往下笔者愈感心有余而力不足,在这方面笔者也是个新人,边学边做一些笔记。
一、DMA 是什么?
DMA(Direct Memory Access:直接内存存取)是所有现代电脑的重要特色,它允许不同速度的硬件装置来沟通,而不需要依于 CPU 的大量中断负载,是一种可以大大减轻 CPU 工作量的数据转移方式。
CPU 有转移数据、计算、控制程序转移等很多功能,但其实转移数据(尤其是转移大量数据)是可以不需要 CPU 参与。比如希望外设A 的数据拷贝到外设 B,只要给两种外设提供一条数据通路,再加上一些控制转移的部件就可以完成数据的拷贝。
正是基于上述的考虑,大佬们设计了 DMA ,解决数据转移过度消耗CPU资源的问题。
DMA 细节我们就不继续深究了,更多去了解 DMA 在 I/O 上的应用是怎样的,不过要记住 DMA 基本原理:
DMA 是一种允许外围设备(硬件子系统)直接访问系统主内存的机制。也就是说,基于 DMA 访问方式,系统主内存于硬盘或网卡之间的数据传输可以绕开 CPU 的调度。
整个数据传输操作在一个 D