mmap原理

https://www.cnblogs.com/binlovetech/p/17712761.html
https://yangjie2.github.io/2021/11/14/mmap原理与应用/

基础

物理世界中的实体或者逻辑实体在计算机中都用数据结构来表示,比如一个进程就用一个task_struct来表示。进程的虚拟内存用一个代表虚拟内存的节点组成的链表来表示,task_struct->mm就是这个链表的头。比如栈区、文件映射和匿名映射区(mmap)、堆区、BSS段、data段、text端都是一个链表节点。

阶段一:准备数据结构

  • 检查虚拟地址空间,寻找一段连续的空闲地址。
  • 申请一个vm_area_struct 初始化并插入mm链表中。

阶段二:调用内核空间的mmap函数(不同于用户空间函数),实现文件物理地址和进程虚拟地址的一一映射关系

建立虚拟内存和磁盘地址的映射,也就是页表的页项有效位标记为0(物理内存不在),将文件对应的磁盘地址填到页表中的磁盘地址项,物理内存地址项为空,这时物理内存中没有任何文件内容。

阶段三:进程访问虚拟内存,引发缺页中断,将文件调入物理内存

进程读或写会触发缺页中断,操作系统根据页表中的磁盘地址将文件内容调入内存,页表项的有效位改为1,地址更换为物理地址。

posted @ 2024-08-13 20:07  hellozhangjz  阅读(6)  评论(0编辑  收藏  举报