Linux 文件访问与内存映射技术解析
1. 内存映射初始化与销毁
在内存映射的初始化过程中,有两个关键步骤。步骤 10 会用文件对象的地址初始化内存区域描述符的 vm_file 字段,并增加文件的使用计数器。接着,调用正在映射文件的 mmap 方法,传递文件对象地址和内存区域描述符地址作为参数。对于大多数文件系统,此方法由 generic_file_mmap() 函数实现,该函数会执行以下操作:
- 将当前时间存储在文件索引节点的 i_atime 字段中,并将索引节点标记为脏。
- 用 generic_file_vm_ops 表的地址初始化内存区域描述符的 vm_ops 字段。该表中除了 nopage 方法(由 filemap_nopage() 函数实现)和 populate 方法(由 filemap_populate() 函数实现)外,其他方法均为空。
步骤 11 会增加文件索引节点的 i_writecount 字段,即写入进程的使用计数器。
当进程准备销毁内存映射时,会调用 munmap() 系统调用,该调用也可用于减小各种内存区域的大小。其参数包括:
- 要移除的线性地址区间的第一个位置的地址。
- 要移除的线性地址区间的长度。
sys_munm
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



