将用户缓冲区的一块空间和内核缓冲区的空间进行映射。这样 cpu 不需要在内核缓存区用户缓存区之间 copy 数据。

Transclude of zero_copy_mmp.excalidraw

具体执行过程:

  • DMA 读取磁盘数据到内核缓冲区,用户的应用程序共享该缓冲区
  • cpu 将内核缓冲区数据 copy 到 Socket 缓冲区
  • DMA 将 Socket 缓冲区数据 copy 到网卡中发送

Java 中对应的实现

Java 中使用了 MappedByteBuffer 实现 mmap。