什么是零拷贝
在操作系统中,从内核的形态区分,可以分为内核态(Kernel Space)和用户态(User Space)。
在传统的IO中,如果把数据通过网络发送到指定端的时候,数据需要经历下面的几个过程:
- 当调用系统函数的时候,CPU执行一系列准备工作,然后把请求发送给DMA处理(DMA可以理解为专门处理IO的组件),DMA将硬盘数据通过总线传输到内存中。
- 当程序需要读取内存的时候,这个时候会执行
CPU Copy
,内存会有内核态写入用户的缓存区。 - 系统调用write()方法时,数据从用户态缓冲区写入到网络缓冲区(Socket Buffer), 由用户态编程内核态。
- 最后由DMA写入网卡驱动中,传输到网卡的驱动。