美文网首页
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用户态内存映射

    mmap 将虚拟地址空间映射到物理内存 匿名映射,即虚拟内存和物理内存直接映射文件映射,将文件映射到虚拟内存ima...

  • Linux - 用户态内存映射 和 内核态内存映射

    操作系统的内存管理,主要分为三个方面。第一,物理内存的管理,相当于会议室管理员管理会议室。第二,虚拟地址的管理,也...

  • 用户态内存映射和内核态内核映射

    用户态内存映射 mmap的原理 在虚拟地址空间那一节,我们知道,每一个进程都有一个列表vm_area_struct...

  • 2018-05-13 (旧文整理) 内存碎片综述

    2016/01/25 内存分配的过程 用户态的程序调用 malloc 函数申请内存. malloc 是一个库函数...

  • mmap原理

    即memory map(内存映射)。内存映射减少了文件从内核空间copy到用户空间,但是增加了文件映射到用户空间的...

  • 2019-03-25

    runLoop在没有事件处理时,休眠以避免内存占用,从 用户态->内核态 有消息处理时,由内核态->用户态 应用程...

  • 进程内存布局

    ARM64内核的内存布局 进程有用户态和内核态,同样进程的地址空间包括用户地址空间和内核地址空间,用户态访问用户地...

  • 用户态内存管理

    linux内核态的内存管理主要是基于伙伴系统和slab机制,而用户态内存管理主要是VMA虚拟地址空间。 在linu...

  • runloop 总结篇

    用户态 和内核态1.是以权限划分,用户态不直接对如何分配内存等等进行管理,怕出各种情况等等。用户态需要切换成内核...

  • linux 内存看一篇就够了(多图)

    ​ 正文 0 内存模块 1 linux内存总体布局:内存分成用户态和内核态 4G进程地址空间解析 内核地址空间 进...

网友评论

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

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