前面把文件 I/O、page cache、直接 I/O 这些内容顺了一遍之后,再往下看网络传输和文件发送时,我发现还有一块特别容易听懂关键词、但一串起来就开始乱的内容:
- 零拷贝
mmapsendfile- DMA
- page cache
- socket 发送缓冲
一开始我对“零拷贝”这个词的直觉是:是不是数据完全不拷贝了,直接从磁盘飞到网卡?后来越看越发现,不是这么回事。
更准确地说:
2026/4/7...大约 11 分钟
前面把文件 I/O、page cache、直接 I/O 这些内容顺了一遍之后,再往下看网络传输和文件发送时,我发现还有一块特别容易听懂关键词、但一串起来就开始乱的内容:
mmapsendfile一开始我对“零拷贝”这个词的直觉是:是不是数据完全不拷贝了,直接从磁盘飞到网卡?后来越看越发现,不是这么回事。
更准确地说:
理解了堆、虚拟地址空间和缺页之后,一个很自然的问题就是:
程序里写的
malloc,到底是怎么和操作系统内存管理接上的?
这背后最常见的一组概念就是 malloc、brk 和 mmap。
最重要的一句话是:
malloc是用户态库函数;brk和mmap是向操作系统申请虚拟地址空间的底层机制。