阿里二面:什么是mmap?

励志当最强课代表的我来给大家总结总结👍👍👍
什么是mmap?
视频内容:
1️⃣零拷贝✍️
2️⃣DNA 拷贝📄
3️⃣mmap 🏷️
4️⃣set file 替代 read 加 write📑
视频内容:
1️⃣零拷贝✍️
首先需要对传统的 lo 方式有一个概念,基于传统的 lo 方式底层实际上是通过调用 read 和 write 的函数来实现,通过 read 把数据从硬盘读取到内核缓冲区,再复制到用户缓冲区,然后再通过 right 写入到 socket 缓存区,最后写入网卡设备。
用户态和内核态的上下文切换和4次拷贝。
首先第一步,用户进程通过 rate 方法向操作系统发起调用,只是上下文从用户态转向内核态。
第二步, DMI 控制器把数据从硬盘中拷贝到读缓冲区。
第三步, CPU 把读缓冲区数据拷贝到应用缓冲区,上下文从内核态转为用户态, RAID 返回。
第四步,用户进程通过 RAID 方法发起调用,上下文从用户态切换为内核态。
第五步, CPU 将应用缓冲区中的数据拷贝到 socket 缓冲区。
第六步, DMA 控制器把数据从 socket 缓冲区拷贝到网卡,上下文从内核态切换回用户态, write 返回。

2️⃣DNA 拷贝📄
本质上来说它就是一块主板上独立的芯片,通过它来进行内存和 IO 设备的数据传输,从而减少了 CPU 的等待时间

3️⃣mmap 🏷️
mmap 主要实现方式是将读缓冲区中的地址和用户缓冲区中的地址进行映射,内核缓冲区和应用缓冲区共享,从而减少了从读缓冲区到用户缓冲区的一次 CPU 拷贝。
第一步,用户进程通过 mmap 方法向操作系统发起调用上下文,从用户态转向内核态。
第二步, DMI 控制器把数据从硬盘中拷贝到读缓中区。
第三步,上下文从内核态转为用户态, MF 调用返回。
第四步,用户进程通过 write 方法发起调用上下文,从用户态转为内核态。
第五步, debug 将读缓冲区中的数据拷贝到 socket 缓冲区。
第六步, DMI 控制器把数据从 socket 缓冲区拷贝到网卡上下文,从内核态切换回用户态, write 返回。

4️⃣ set file 替代 read 加 write📑
由于 set file 替代 read 加 write 从而节省了一次系统调用,也就是两次上下文的切换。
第一步,用户进程通过现在发现方法向操作系统发起调用,上下文从用户态转向内核态。
第二步, DMA 控制器把数据从硬盘中拷贝到读缓冲区。
第三步, CPU 将读缓冲区的数据拷贝到 socket 缓冲区。
第四步, DMI 控制器把数据从 socket 缓存区拷贝到网卡,上下文从内核态切换回用户态 send file 调用返回 send file 方法 IO 数据对用户空间
