美文网首页
25用户态内存映射

25用户态内存映射

作者: AndyWei123 | 来源:发表于2020-05-03 15:01 被阅读0次
    • mmap 将虚拟地址空间映射到物理内存
    • 匿名映射,即虚拟内存和物理内存直接映射
    • 文件映射,将文件映射到虚拟内存


      image.png
    • get_umapped_area 获取未映射到区域
      • 匿名映射:直接调用arch_get_unmapped_area 方法获取上一个vm_area_struct
      • 文件映射:调用mm_struct 里面的 get_unmapped_area 函数获取上一个vm_area_struct
    • mmap_region 映射物理内存到虚拟内存
      • 在上一个步骤中获取到vm_area_struct 能否扩展后与前一个vm_area_struce 合并,如果不行就创建一个新的vm_area_struce并加入红黑树
      • 用户态缺页中断异常
        • 分配全局目录表PGD 并赋值给 mm_struce 的 pgd
    image.png

    cr3 是 CPU 的一个寄存器,它会指向当前进程的顶级 pgd。如果 CPU 的指令要访问进程的虚拟内存,它就会自动从 cr3 里面得到 pgd 在物理内存的地址,然后根据里面的页表解析虚拟内存的地址为物理内存,从而访问真正的物理内存上的数据。

    • handle_pte_fault

    • do_anonymous_page 处理匿名页,通过伙伴系统的 __alloc_pages_nodemask 方法获取内存

    • 映射到文件: do_fault,最终我们会调用 __do_fault

    • do_swap_page

    • TLB(Translation Lookaside Buffer) 块表,将内存中的虚拟地址和物理的是映射关系通过LRU列表缓存起来

    image.png

    总介绍图片


    image.png

    相关文章

      网友评论

          本文标题:25用户态内存映射

          本文链接:https://www.haomeiwen.com/subject/blmdghtx.html