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

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

目录

  • FUPT 机制实现原理

  • FUPT 机制源码解析

  • FUPT 机制使用场景

    • 利用 FUPT 机制查询普通内存 PTE 页表场景

    • 利用 FUPT 机制查询映射 RSVDMEM PFN 场景

    • 利用 FUPT 机制查询映射 MMIO 物理地址场景

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


FUPT 机制实现原理

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

在 Linux 里,物理内存基本分配三类: 系统管理的物理内存(OSMEM)、系统预留的物理内存(RSVDMEM) 和外设寄存器映射到系统物理地址空间形成的 MMIO, 对于这三类物理区域,应用程序可以将其地址空间的虚拟内存映射到这三类物理区域,映射完毕之后进程就可以访问这三类物理区域. 内核提供了多种机制可以遍历应用程序映射这三类的物理区域的页表,这些机制各有各的特点,本文介绍其中的一种名为 FOLLOW USERSPACE PGTABLE(FUPT) 机制.

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

FUPT 机制的目的是专门用于遍历应用程序虚拟内存映射场景,通过该机制可以获得映射的 PTE 页表、物理页帧 PFN 和物理地址 PHYS,该机制只负责遍历页表并获得对应的页表内容,并不涉及修改页表和建立页表的功能. 借助该机制应用程序通过与内核交互可以将 PTE 页表内容、物理页帧 PFN 和物理地址信息拷贝到用户空间,以此满足特殊应用需求.

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

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

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

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