Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

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资源