用于细粒存储器保护的方法和设备的制造方法_4

文档序号:9564539阅读:来源:国知局
么,对于所有子页面,写入被准许,不管在子 页面保护表中指出的设置是什么。如此,写入许可位904和子页面保护位可以以各种方式 组合,以确定每一个子页面的写入许可。
[0074] 在一个实施例中,SPPT 915包括表的层次结构,每一个表都通过存储器页面的物 理地址的不同的部分来索引。在图10中用图形方式示出了根据一个这样的实施例的查询。 如此实施例所示,SPPTP 912与物理地址的最高物理地址位组合,以标识级别5 (L5)表中的 条目。该条目中所包含的地址是级别4(L4)表的基本地址。L4表中的条目通过将基本地址 与页面的物理地址位39-47组合来定位。L4条目标识L3表的基本地址,并与物理地址的位 30-38组合,以标识L3表中的包含L2表的基本地址的条目。然后,位12-29与此基本地址 相结合,以标识L2表中的标识Ll表的基本地址的条目。包含页面的所有子页面许可的64 位子页面(SP)向量通过组合Ll表的基本地址与物理地址的位12-20来标识。然后,使用 物理地址位7-11,在64位SP向量内标识写入许可位。在一个实施例中,64位SP向量包含 与每一个子页面相关联的两个位,一个指出写入许可(例如,1 =允许写入;〇 =写保护), 而另一个指出子页面的一个或多个额外的许可(例如,执行保护和/或许可)。
[0075] 应该指出的是,为说明本发明的一个实施例,在图10中示出了具体细节。然而,本 发明的基础原理不仅限于如图10所示的具体细节。例如,与每一个存储器页面相关联的不 同的地址位可以以交替的方式组合,以在各种不同类型的表结构(非分层以及分层)中执 行查询,仍符合本发明的基础原理。
[0076] 在图11中示出了用于确定子页面保护的根据本发明的一个实施例的方法。该方 法可以在上文所描述的架构内实现,但不仅限于任何特定系统架构。
[0077] 在1001,检索与存储器页面相关联的页面表条目。例如,如上文所讨论的,可以从 TLB中读取或可以从存储在存储器中的页面表中获取页面表条目。在1102,作出关于是否 启用了子页面保护的判断。例如,如上文所提及的,可以在页面表条目中设置子页面保护 位,以指出子页面保护。如果子页面保护未启用,那么,在1105,只实现页面级别的许可/保 护。
[0078] 如果子页面保护被启用,那么在1103,在子页面保护表(SPPT)中执行查询,以确 定与每一个子页面相关联的许可/保护。如上文所提及的,这可包括写入许可、执行许可、 或能够相对于子页面被实现的任何其他许可/保护。在1104,子页面保护指示与页面级别 的许可/保护(如果有的话)组合,以得出对于每一个子页面的许可的最后的集合。
[0079] 在本发明的一个实施例中,实现下列具体细节以提供子页面保护/许可。然而,值 得注意的是,本发明的基础原理不仅限于这些具体细节。
[0080] 在一个实施例中,用于页面表中的SPP位包括只为映射一个页面的EPT分页结构 条目(例如,4KB扩展的页面表(EPT)页面表条目)定义的的位。在其他EPT分页结构条目 中,该位被忽略。
[0081] 如上文所提及的,累积的页面级别的EPT写入许可/保护可以与子页面写入许可 /保护相结合,以确定该子页面的写入许可/保护。在一个实施例中,处理器检查此写入许 可,并相应地生成EPT违犯。
[0082] 额外的SPPT查找特征:
[0083] 如果SPPT条目不存在,则这可能会导致新的虚拟机退出。在一个实施例中,这仅 对于通过VMM对SPPT的懒惰的填充发生。在未命中时,在一个实施例中,物理地址可以被 保存在VMCS中(用作用于随后的请求的缓存)。否则,VM退出将保存数据,如EPT违犯当 前做的那样(例如,NMI阻止、IDT向量化等等)。
[0084] 如果没有未命中,那么,SPPT步行可以标识页面的32位写入许可位图。处理器可 以将位图缓存在数据转换后备缓冲器(DTLB)中或相关的/其他结构,用于随后的访问。
[0085] SPPT失效特征:
[0086] 在一个实施例中,VMM可以修改SPPT中的子页面保护位,并可以通过INVEPT指令, 使组合的映射作废。这也导致缓存的子页面许可的清空。在一个实施例中,扩展的页面表 指针(EPTP)开关(例如,通过VMffRITE或VMFUNC指令的执行)可以导致缓存的关于子页 面许可的任何信息。对于地址空间ID(ASID)未命中情况,这可能需要TLB清空(例如,分 配新ASID)。在一个实施例中,在非ASID标记的结构(例如,数据TLB、扩展的页面目录指 针(ETOP)和扩展的页面目录条目(ETOE)缓存)中也使条目作废。
[0087] 地址(A) /数据⑶位更新处理:
[0088] 在一个实施例中,对于访客分页结构和虚拟化高级可编程中断控制器(APIC)访 问,子页面保护(SPP)页面被视为"只读"。对于Intel架构(IA)-32A/D位更新:(a)如果 将对SPP页面作出访客A/D位更新,则生成EPT违犯;(b)退出资格与页面在EPT(非新的 数据)中被只读的情况相同;(c)VMM可以利用现有的机制,处理这样的EPT违犯。对于EPT A/D位架构:(a)如果EPT A/D位被启用,则访客页面步行可以视为对于EPT的写入;(b)如 果EPT A/D位被启用,那么,对SPP页面的访客页面行走导致EPT违犯;(c)与VMM连接以监 视OS页面表的受启发OS可以通过在包含关键映射的页面上预先设置A/D位,以便VMM不 必一定模仿具有子页面监视的区域中的写保护的页面上的A/D更新,来有效率地使用子页 面保护。
[0089] 向单页面的写入,多个子页面区域被访问:
[0090] 这种情况的一个示例是8字节M0V,在页面内,它是4字节对齐的。在一个实施例 中,处理器将检查两个子页面的可写入性。如果两个子页面都是可写入的,则写入被允许。 如果任一子页面都不可写入,则写入导致EPT违犯。
[0091] 跨多个页面的写入:
[0092] 这种情况的一个示例是8字节M0V,它是4字节对齐的,跨在页面边界上。在一个 实施例中,处理器将检查任一页面是否具有子页面保护。如果任一页面都没有子页面保护, 则通常每个EPT地处理写入。如果任一子页面都具有子页面保护,则写入导致EPT违犯。
[0093] 处理带有多个写入的指令
[0094] 这种情况的一个示例是可以生成向多个页面的多个写入的FXSAVE指令。处理器 可以对待存储探针,正如任何其他存储那样。在一个实施例中,如果探测的特定地址不可写 入,则处理器将生成EPT违犯。这会导致EPT违犯在写入某些数据之后发生。
[0095] 在一个实施例中,如果探测的页面具有子页面保护,则改变存储探测导致EPT违 犯。在一个实施例中,在执行任何写入之前,处理器探测高和低字节。
[0096] APIC虚拟化交互:
[0097] 如果VMM配置EPT PTE以使得物理地址位于"APIC-访问地址"中并且SPP = 1, 则可导致高级可编程中断控制器(APIC)交互。在一个实施例中,这被视为无效使用。在没 有子页面保护的情况下,完全APIC虚拟化提供细粒度的控制。
[0098] 带有EPTP切换的交互:
[0099] 在一个实施例中,子页面保护表指针(SPPTP)不会应扩展的页面表指针(EPTP)开 关而改变。当前使用情况要求特定EPT层次结构以访问! W子页面。对于这些EPT层次结 构,这通过设置为O的EPTE SPP位来实现。
[0100] 在一个实施例中,可以通过新VMFUNC指令来切换SPPT,VMFUNC指令通过存储器描 述符,切换下列:
[0101] <CR3, EPT, SPPT>VMFUNC leaf 2
[0102] <CR3, EPT>VMFUNC leaf I
[0103] <EPTP>VMFUNC leaf 0
[0104] 额外的实施例:
[0105] 上文所描述的架构可以被映射到各种实现。建议的架构到处理器实现的一个直接 的映射是,由于处理器页未命中处理程序(PMH)步行在EPT结构中具有设置的SPP位的分 页结构,对SPPT执行查询。不要求EPT中的SPP位的交替的实现实施例如下。VMM分配一 块连续的存储器区域,它预留该区域,用作页面的"子页面可监视的池"。当OS或OS服务需 要要求子页面监视或者被动态地设置为在子页面级别被监视的页面时,OS服务请求VMM分 配这些池页面中的一个。VMM将OS映射的全局物理地址(GPA)(在OS PT中)映射到从页 面的池分配的页面的隐藏的物理地址(ΗΡΑ)。在某些环境中,VMM可以将内容从原始GPA页 面复制到从此池分配的页面。VMM还编程处理器的范围寄存器基址和掩码中的一个,以覆 盖连续的存储器区域。范围寄存器允许处理器检测何时对池中的页面中的一个作出RW或 X访问。VMM另外还编程SPPT,如在上文的架构中定义的,以为此池内的所有页面指定每个 页面的子页面策略。在一个实施例中,对存储器区域内的任何页面的任何RW或X访问都会 导致处理器微代码协助,其中,CPU对照SPPT中的该HPA的子页面策略检查,并允许或禁止 访问。
[0106] 软件实现:
[0107] 在一个实施例中,当对于一组页面需要子页面许可时,VMM利用此组页面的映射来 填充SPPT,指定每一个页面的子页面许可位向量。对于落在写入禁止的子页面区域内的访 问,VMM处理产生的EPT违犯或访客软件处理产生的虚拟化异常(#VE)。对于落在写入允许 的子页面区域内的访问,不生成产生的EPT违犯或#VE。
[0108] 嵌套的虚拟化交互:
[0109] 在一个实施例中,对于SPPT,可能不启用根VMM。在此情况下,它不暴露它,并且不 虚拟化它。在另一个实施例中,对于SPPT,根VMM被启用,但是,不使用SPPT其本身,而是虚 拟化它。在另一个实施例中,对于SPPT,根VMM被启用,并且使用它其本身,但是,不向访客 实体暴露它。这里,没有SPPT嵌套影响。在再一个实施例中,对于SPPT,根VMM被启用,并 且使用它其本身,并且向访客实体暴露它(例如,虚拟化它)。在下面两部分比较详细地描 述了这最后两个实施例。
[0110] 对于SPPT,根VMM被启用,不使用它本身,而是虚拟化它:
[0111] 在一个实施例中,根VMM遮蔽SPPT结构,以保留对HPA的所有引用(包括SPPT)。 由于通过一般存储器访问指令来访问SPPT,因此,根VMM将需要编辑控制SPPT访客存储器 页面。访客VMM必须在更新SPPT (可以从根VMM正确地虚拟化该SPPT)之后执行INVEPT 指令(EPTP上下文)。在一个实施例中,INVEPT指令清除任何SPPT缓存(
当前第4页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1