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

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

目录
  • PAGE_PK 原理

  • PAGE_PK 的应用

  • PAGE_PK 使用场景

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


PAGE_PK 原理

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

在 Linux 中,页表中的 ProtectionKey 字段是用于内存保护键(Memory Protection Keys,MPK)的特性。这个特性是在较新的 x86 架构中引入的,它提供了一种硬件机制来增加对内存访问的控制, ProtectionKey 字段的作用包括:

  • 访问控制: 它允许操作系统或应用程序为不同的内存区域分配保护键, 每个页表条目都可以指定一个保护键
  • 性能优化: 通过使用保护键,操作系统可以有效地管理对内存的访问,从而减少对传统页表修改的依赖, 这有助于提高内存访问的效率,尤其是在频繁修改页表权限的场景中
  • 隔离和安全性: 保护键可以帮助隔离不同的应用程序或不同的应用程序组件,增强内存安全性, 通过为敏感数据或代码区域分配特定的保护键,可以防止其他应用程序或进程非法访问这些区域
  • 灵活的权限管理: ProtectionKey 机制允许更加灵活地管理内存的读写权限, 例如可以设置某些内存区域为只读,或者限制某些进程对特定内存区域的访问

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

ProtectionKey 字段由 4 个比特位构成,该字段可能在不同的硬件架构的位置不同,但 Linux 为了屏蔽硬件差异,统一使用 _PAGE_PKEY_BIT0、_PAGE_PKEY_BIT1、_PAGE_PKEY_BIT2、_PAGE_PKEY_BIT3 标志位表示. 例如在 X86 架构上该字段位于 [BIT59, BIT62). 在 X86 上需要开启 CONFIG_X86_INTEL_MEMORY_PROTECTION_KEYS 宏才能使用这些比特位.

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

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

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

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