在业务场景中,我们的数据会存放在多种空间中,也需要在多种空间中传输来实现系统的功能以及保证系统的安全性.
数据存放的空间有:内核缓冲区,用户空间,磁盘,网络缓冲区.
其中网络缓冲区,磁盘的数据是有设备驱动来实现的.其中设备和内核缓冲区的访问可以使用cpu来发送指令也可以适用DMA技术帮助实现数据的传输.
1.最开始的传输方式
1.磁盘 --cpu--> 内核缓冲区
2.内核缓冲区 --cpu --> 用户空间
3.用户空间 --cpu--> socket缓冲区
4.socket缓冲区 --cpu --> 网络缓冲区
2.引入DMA的方式
在第一种方式中,其中将内核态的数据外设进行交互的时候,为了节省cpu的时间开发了DMA管理设备,来负责数据的传输.
这样能有效减少数据的传输.
3.内存映射(mmp原语)
在第一步中,因为数据并不需要在用户态进行处理,这个时候可以让用户态和内核态共享空间.这样能够节省一步将数据从内核态拷贝到用户态这一步.
4. 零拷贝(send原语)
零拷贝技术需要网卡的支持.一种扩展的DMA技术.
可以节省方案三种的从内核缓冲区拷贝到socket缓冲区中.
这样数据的搬运的过程只使用了DMA的原语,cpu只负责给DMA发送原语就好.
标签:DMA,--,原语,内核,缓冲区,拷贝,cpu 来源: https://www.cnblogs.com/xxuuzz/p/16350308.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。