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

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

目录
  • PAGE_RW 原理

  • PAGE_RW 的应用

  • PAGE_RW 使用场景

    • PAGE_RW 只读映射区场景

    • PAGE_RW ZERO-PAGE 场景

    • PAGE_RW 写保护 COW 场景

    • PAGE_RW NUMA Balancing 场景

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


PAGE_RW 原理

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

在 Linux 页表里存在这样一个标志位 PAGE_RW, 用于表示页表映射的物理区域是否可读或可写,这里的物理区域可以是系统管理的物理内存(OSMEM)、系统预留物理内存(RSVDMEM)、以及外设寄存器映射到系统地址空间形成的 MMIO. 在 Linux 里虚拟区域对于读写可能存在三种关系: 只读、可读可写、不可读也不可写. 当 CPU 对只读或者不可读不可写的区域发起写操作,那么 MMU 会检查到权限异常而触发缺页,因此 PF_WRITE 也是缺页异常的原因之一.

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

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

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

在 Linux 里,很多页表属性集合都会将 PAGE_RW 标志为置位,例如 __PAGE_KERNEL 用于为内核空间虚拟内存构建页表使用,此时都会将 PAGE_RW 标志位设置上,这样表示内核虚拟内存映射的物理区域可读可写. 但有的页表属性也没有设置 PAGE_RW 标志,以此表示映射的物理区域只读.

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

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

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

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