Linux黑科技|mmap实现详解
💡
原文中文,约5900字,阅读约需14分钟。
📝
内容提要
本文介绍了mmap的原理和实现。mmap是将文件映射到内存中,通过对映射区的内存进行读写操作,实现对文件的读写。文章详细介绍了mmap的实现过程,包括获取未使用的虚拟内存区、设置vma结构的各个字段的值、调用文件对象的mmap回调函数来设置vma结构的fault回调函数等。文章还解释了缺页异常的作用,以及mmap是如何将文件映射到虚拟内存中的。
🎯
关键要点
- mmap的全称是内存映射,用于将文件映射到内存中。
- mmap的实现涉及多个子系统,如内存管理、文件系统和中断处理。
- 使用mmap()系统调用时,会调用do_mmap_pgoff()内核函数来完成文件映射。
- do_mmap_pgoff()函数主要完成获取未使用的虚拟内存区和调用mmap_region()函数。
- mmap_region()函数申请虚拟内存区管理结构并设置各个字段的值。
- vma结构用于管理进程的虚拟内存地址,并记录已分配的内存区信息。
- mmap()系统调用并不直接映射虚拟内存,而是设置vma的fault回调函数。
- 缺页异常是将虚拟内存映射到物理内存的关键机制。
- 缺页异常触发时,CPU调用do_page_fault()函数来处理映射。
- 通过filemap_fault()函数读取文件页缓存,实现虚拟内存与文件的映射。
🏷️
标签
➡️