内核存储器-保护密钥

内核存储保护键为内核和内核扩展提供了存储保护机制。

存储保护密钥具有以下元素:
  • 每个虚拟内存页面都分配有一个小整数保护键,它表示使该页面在当前上下文中可读或可写所需的访问权限。
  • 一个寄存器,即权限掩码寄存器,用来对当前上下文的访问权限进行编码。
硬件最多可以提供 32 个保护密钥。 权限掩码寄存器包含一对表示每个已定义保护密钥的写和读访问权限的位,使内核能够控制对多达 32 个内存类的访问,其中每个类由共享相同特定保护密钥的虚拟内存页组成。

在所有情况下,正在运行的线程都可以修改其权限掩码寄存器,从而修改其访问特定内存类的权限。 在 AIX® 环境中,存储保护机制可以捕获由无意的存储覆盖引起的编程错误。 当您使用存储器保护键编写程序时,该程序可以出于保护目的自愿对其内存进行细分,从而降低意外引用未检测到内存的可能性。 此类未检测到的错误可能难以调试; 但是,通过进行编码以在这些错误发生时对其进行检测,程序可以提高其可靠性,可用性和可维护性特征。

在内核中使用存储保护密钥时,可以检测到以下编程错误并轻松进行修复:
  • 内核对应用程序内存的引用不正确
  • 密钥安全内核扩展对内核专用内存的引用不正确
  • 内核对内核扩展专用内存的引用不正确
  • 对由另一内核子系统控制的内存的引用不正确
从存储保护方面来讲,可以将内核扩展分为以下几种类别:
密钥-不安全的内核扩展
密钥不安全的内核扩展是在不考虑存储密钥保护的情况下编写的传统扩展。 在密钥安全环境中装入时,此类扩展将以广泛的访问权限自动运行以提供二进制兼容性。 由于能够不受限制地访问基本上所有的内核内存,密钥不安全的内核扩展可以继续运行,即使它们可能会违反内核的保护域。

在其他一些情况下,密钥不安全的内核扩展可能会导致系统崩溃,因此强烈建议在运行之前使内核扩展成为密钥安全的。 请参阅 使内核扩展密钥安全

密钥安全内核扩展
密钥安全内核扩展不直接引用内核或用户空间地址的内部数据结构。 请参阅 使内核扩展密钥安全
受密钥保护的内核扩展
受密钥保护的内核扩展可以与受密钥保护的内核环境共存,也可以通过识别和保护自己的私有数据成为受密钥保护的内核。 要将内核扩展数据放在受密钥保护的内存中,请参阅 在受密钥保护的内核扩展中设计密钥保护