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

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

目录

  • UMSPA 映射原理

  • UMSPA 使用场景

    • UMSPA 机制映射 RSVDMEM 物理内存场景

    • UMSPA 机制映射 MMIO 场景

    • 限制 UMSPA 机制映射系统内存场景

  • UMSPA 源码分析

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


UMSPA 映射原理

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

在 Linux 里,用户进程可以使用 malloc/mmap/brk 等函数从进程地址空间分配到虚拟内存,此时分配的虚拟内存还没有映射到物理内存上,于是可以缺页异常进行分配。在缺页异常处理函数里其首先通过 Buddy 分配器分配一块随机地址的物理内存,然后建立页表将虚拟地址映射到该物理地址上,那么待缺页异常处理函数返回之后,进程可以正常访问这段虚拟内存, 以上便是经典的用户空间内存分配逻辑. 这样分配的内存有个特点: 物理内存是随机的.

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

在特定场景下,用户进程需要将虚拟内存映射到指定地址的物理区域上,那么传统的分配方式是无法做到的,因此内核提出了一套机制: UMSPA(User Maps Specifical Physical Area) 机制. 这里的物理区域可以是系统管理的物理内存(OSMEM), 也可以是系统预留的物理内存(RSVDMEM), 还可以使用外设内存映射到系统物理地址空间的 MMIO 区域. UMSPA 机制 的原理很简单,其向用户空间提供 “/dev/mem” 文件,然后进行使用 mmap 将文件映射到地址空间的时候可以指定物理区域地址,那么进程就可以向访问正常内存那样访问指定的物理区域.

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

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

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

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