【图文详解】NIO 中的零拷贝实现原理与Linux操作系统中的mmap
2023-09-14 09:07:23 时间
缘起
常规文件操作为了提高读写效率和保护磁盘,使用了页缓存机制。这样造成读文件时需要先将文件页从磁盘拷贝到页缓存中,由于页缓存处在内核空间,不能被用户进程直接寻址,所以还需要将页缓存中数据页再次拷贝到内存对应的用户空间中。这样,通过了两次数据拷贝过程,才能完成进程对文件内容的获取任务。写操作也是一样,待写入的buffer在内核空间不能直接访问,必须要先拷贝至内核空间对应的主存,再写回磁盘中(延迟写回),也是需要两次数据拷贝。
而使用mmap操作文件中,创建新的虚拟内存区域和建立文件磁盘地址和虚拟内存区域映射这两步,没有任何文件拷贝操作。而之后访问数据时发现内存中并无数据而发起的缺页异常过程,可以通过已经建立好的映射关系,只使用一次数据拷贝,就从磁盘中将数据传入内存的用户空间中,供进程使用。
总而言之,常规文件操作需要从磁盘到页缓存再到用户主存的两次数据拷贝。而mmap操控文件,只需要从磁盘到用户主存的一次数据拷贝过程。说白了,mmap的关键点是实现了用户空间和内核空间的数据直接交互而省去了空间不同数据不通的繁琐过程。因此mmap效率更高。
mmap 是什么?
mmap是一种内存映射文件的方法,即将一个文件或者其它对象映射到进程的地址空间,实现文件磁盘地址和进程虚拟地址空间中一段虚拟地址的一一对映关系。如下图所示:
相关文章
- 及实现Linux下如何实现共享内存?(linux共享内存原理)
- Linux脚本实现获取时间戳功能(linux脚本获取时间戳)
- Linux时间CST:记录与同步(linux时间cst)
- Linux高性能编程:提升效率的最佳实践(linux高并发编程)
- 自动化Linux系统开机脚本实现(linux开机脚本)
- Linux驱动原理:探究其背后的奥秘(linux驱动原理)
- Linux文件复制到U盘的过程(linux复制到u盘)
- Linux设备驱动编程:指导原理与实践(linux设备驱动开发)
- Linux下的更改记录管理实践(linux修改记录)
- Linux系统中进程调度原理深度剖析(linux进程调度原理)
- file使用Linux编辑Makefile实现编译万岁(linux编译make)
- Linux进程:理解和控制其运行原理(linux进程原理)
- Linux下查找文件中字符串的方法(linux文件查找字符串)
- 极速提升Linux运维效率:自动化技术的运用(linux运维自动化)
- Linux 目录批量重命名技巧(批量重命名linux)
- Linux的发展:从分支到创新(linux的分支)
- 百度网盘:Linux用户也能使用(百度网盘linux)
- 深入探究:Linux操作系统的设计原理(linux操作系统设计)
- Linux系统内幕揭秘:概括原理及实现(linux系统原理简述)
- 深入解析Linux逻辑块:了解文件系统存储的原理和实现。(linux逻辑块)
- 深入了解Linux内核:循环原理解析(linux内核循环)
- Linux下玩转精彩游戏,激发你的游戏激情!(linux 好玩的游戏)
- Linux就是用命令保存世界(linux 保存命令)