目录

  • LKAD 实现原理

  • LKAD 源码解析

  • LKAD 机制应用场景

    • LKAD 机制查询线性映射区/Buddy 分配内存

    • LKAD 机制查询 VMALLOC 映射区内存

    • LKAD 机制查询 PFNMAP 映射区内存

    • LKAD 机制查询 MMIO 映射区内存

    • LKAD 机制查询 MEMBLOCK 内存

    • LKAD 机制查询固定映射/永久映射内存

    • LKAD 机制查询 EARLY IO/RSVDMEM 映射内存

    • LKAD 机制查询 PMD 页表


LKAD 实现原理

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

在 Linux 里,其提供了 PageWalk 机制用于实现对某段虚拟内存的遍历,然后在遍历到的页表执行指定的操作。同理 ATPR 机制 也实现对某段虚拟内存的遍历,当遍历到 PTE 页表时执行指定的操作. 与 PageWalk 机制ATPR 机制,本文介绍一种新的页表遍历技术: LOOKUP-ADDRESS(LKAD) 机制,该技术有如下特点:

  • 适用于内核模块: PageWalk 机制虽然可以遍历页表,但其只能在内核里使用,不能在内核模块里使用,而 APTR 机制和LKAD 机制可以在内核模块里使用
  • 只支持最后一级页表: PageWalk 机制可以对遍历不同的页表执行特定的操作,而 APTR 机制只能对遍历到 PTE 页表时执行特定操作. 而 LKAD 机制只能获得最后一级页表的内容,这里的最后一级页表可能是 PTE Entry 或者是 PMD Entry,也可能是 PUD Entry
  • 只遍历内核空间: PageWalk 机制和 ATPR 机制无论是用户进程地址空间还是内核虚拟地址空间都可以进行页表遍历,但 LKAD 机制只能遍历内核空间的虚拟内存.
  • 只遍历页表: LKAD 机制只有遍历页表的功能,而不像其他两者有修改页表的能力.

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

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

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

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