DMA、零拷贝和写时复制
DMA
-
全称 Direct Memory Access(直接存储器访问)
-
实现原理
- 当CPU初始化一个传输动作后,DMA控制器可自动将数据从一个地址空间复制到另一个地址空间
- 整个复制过程无需CPU参与,可节省CPU资源
-
可用于IO设备和内存之间的传输,或者内存和内存之间的传输
零拷贝
-
全称 Zero-Copy
-
当服务器收到http请求时,运行在用户空间上的httpd服务将执行以下操作:
- 要求内核访问物理存储中的数据
- 等待数据准备就绪
- 从内核空间缓冲区获取数据(消耗CPU)
- 对数据进行一些更改
- 将数据发送到TCP套接字的发送方缓冲区(消耗CPU)
- 数据通过网卡向外传输
-
实现原理
- 通过零拷贝,我们可以直接将数据从“内核空间缓冲区”复制到“发送方缓冲区”
- 从而避免内核空间和用户空间之间不必要的复制操作,可节省CPU资源
写时复制
-
全称Copy-On-Write
-
当子进程被fork时,所有的内存页都会被复制,这会消耗大量的内存空间和时间
-
实现原理
- 子进程在fork出来后先共享父进程的内存页,然后在需要修改数据时才去复制相应的内存页
- 从而避免了fork时大量的复制操作,可节省CPU资源