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

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

目录
  • PAGE_ACCESSED 原理

  • PAGE_ACCESSED 的应用

  • PAGE_ACCESSED 使用场景

    • PAGE_ACCESSED 统计匿名映射内存冷热场景

    • PAGE_ACCESSED 统计文件映射内存冷热场景

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


PAGE_ACCESSED 原理

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

在 Linux 页表里存在这样一个标志位 PAGE_ACCESSED, 用于表示页表映射的物理区域是否被访问过,这里的访问包括对物理区域的读操作和写操作. 另外这里的物理区域可以是系统管理的物理内存(OSMEM)、系统预留物理内存(RSVDMEM)、以及外设寄存器映射到系统地址空间形成的 MMIO. 当进程对虚拟区域进行访问,不用触发缺页异常,MMU 硬件自动将 PAGE_ACCESSED 标志位置位,因此 PAGE_ACCESSED 标志位经常用来识别冷热页的基础数据.

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

PAGE_ACCESSED 标志位可能在不同的硬件架构的位置不同,但 Linux 为了屏蔽硬件差异,统一使用 _PAGE_ACCESSED 标志位表示,也可以使用 ___A 进行表示. 例如在 X86/I386 中 PAGE_ACCESSED 位于页表的 BIT5.

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

在 Linux 里,很多页表属性集合都会将 PAGE_ACCESSED 标志为置位,例如 __PAGE_KERNEL 用于为内核空间虚拟内存构建页表使用,此时都会将 PAGE_ACCESSED 标志位设置上,以此表示内核已经访问过这块区域. PAGE_ACCESSED 标志清零则表示这块区域没有被访问过.

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

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

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

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