图片无法显示,请右键点击新窗口打开图片

BiscuitOS 内存管理之分页大专题订阅入口

目录
  • PFNMAP 映射原理

  • PFNMAP 使用场景

    • PFNREMAP 用户空间映射 RSVDMEM 内存场景

    • MEMREMAP 内核空间映射 RSVDMEM 内存场景

    • CUSTOMIZE PreALLOC 映射 RSVDMEM 内存场景

    • CUSTOMIZE LazyALLOC 映射 RSVDMEM 内存场景

    • CUSTOMIZE OnDemand 映射 RSVDMEM 内存场景

    • CUSTOMIZE 映射 2MiB RSVDMEM 内存场景

    • CUSTOMIZE 映射 1Gig RSVDMEM 内存场景

    • RSVDMEM 作为 PANIC-LOG 场景

  • PFNMAP 源码分析

图片无法显示,请右键点击新窗口打开图片


PFNMAP 映射原理

图片无法显示,请右键点击新窗口打开图片

在 linux 里存在这么一种机制,内核支持对某段物理内存进行预留,预留之后内核的管理器就看不到这段物理内存,然后内核无法使用这段物理内存。那么这段物理内存预留好之后专门给指定的设备模块进行管理,这里的管理包括预留物理内存的分配、回收、页表映射等,以便特定场景的内存需求. 这里将系统能够管理的物理内存称为 OSMEM,而系统预留的物理内存则称为 RSVDMEM.

图片无法显示,请右键点击新窗口打开图片

有了 RSVDMEM 之后,内核模块负责内存的管理,在 Linux 里可以使用 PFNREMAP 将用户空间虚拟内存映射到 RSVDMEM 上,然后用户进程可以访问 RSVDMEM 内存. 另外内核模块也可以自定义的接口(Customize),实现用户空间虚拟内存映射到 RSVDMEM 上. 而对于内核模块,其可以使用 MEMREMAP 机制将内核虚拟空间映射到 RSVDMEM 上,然后内核模块可以访问 RSVDMEM 内存.

图片无法显示,请右键点击新窗口打开图片

RSVDMEM 内存由内核模块自己管理,因此开发者可以使用定制的内存分配器管理 RSVDMEM 物理内存的分配、回收、释放和异常处理,甚至连页表映射和逆向映射都由模块自己负责,总之这块 RSVDMEM 是模块自己的,它想怎么用就怎么用,而不受系统的影响,这样大大增加了 RSVDMEM 内存的灵活性,另外也可以将 RSVDMEM 更好的应用到特定场景下. 另外映射所需的页表可由 PFNREMAP 机制MEMREMAP 机制 负责,模块也可以自定义页表构建.

PFNREMAP 映射构建

图片无法显示,请右键点击新窗口打开图片

图片无法显示,请右键点击新窗口打开图片

BiscuitOS 内存管理之分页大专题订阅入口

图片无法显示,请右键点击新窗口打开图片