在现代计算机系统中,有效的内存管理是保障系统性能和安全的关键。随着应用程序变得越来越复杂,对内存的访问控制变得尤为重要。保护键(Protection Key)是一种高级的内存管理技术,它允许操作系统和应用程序更精确地控制对特定内存区域的访问权限. 保护键是一种内存访问控制机制,用于提高操作系统和应用程序对内存的访问安全性。在英特尔的架构中,保护键通过与每个线性地址相关联,允许对内存访问进行更细粒度的控制。每个保护键都与一组内存页相关联,操作系统可以为每个保护键设置不同的访问权限,例如只读、只写或完全禁止访问.
Protection-Key 技术的实现依赖与页表和指定寄存器,在 4 级分页和 5 级分页中,每个内存页都与一个 4 位的保护键关联, 这个键位于分页结构条目的 [62 : 59)位,这些条目映射了包含该线性地址的页面. 另外提供了两种保护键权限寄存器: 用户模式页的 PKRU 和监督模式页的 IA32_PKRS MSR, 这些寄存器决定基于页面的保护键的可. 两个寄存器的结构如上图:
- 每个保护键权限寄存器包含 16 对禁用控制,以阻止基于其保护键的线性地址的数据访问
- 对于每个保护键 i(0 ≤ i ≤ 15),寄存器中的两个位分别用于控制:
- 访问禁用(ADi): 如果设置,则处理器阻止对具有保护键 i 的线性地址的任何数据访问
- 写入禁用(WDi): 如果设置,则处理器阻止对具有保护键 i 的线性地址的写入访问