用于管理对能力的使用的设备和方法与流程

文档序号:19418569发布日期:2019-12-14 01:11阅读:241来源:国知局
用于管理对能力的使用的设备和方法与流程

本技术涉及用于管理对能力的使用的设备和方法。



背景技术:

对基于能力的架构越来越感兴趣,其中某些能力被定义以用于给定过程,并且若尝试执行所定义能力之外的操作,则可触发错误。能力可采取各种形式,但一种能力类型为有界指针(也称为“胖指针”)。对于有界指针,指针值可标识或者用于确定例如要访问的数据值或要执行的指令的地址。然而,指针值还可具有在使用指针值时指示地址的可允许范围的关联范围信息,且可额外具有与此关联的许可/限制信息。有界指针的范围信息及任何许可/限制信息可称为能力信息,并且在基于能力架构内这样的有界指针(包括其关联能力信息)可称为能力。

尽管对能力的使用在维持在处理器上执行的软件的行为的安全性和/或功能正确性方面可能是有用的,但在一些情况下可能期望允许某种软件(例如,即“可信的”)不受能力约束或者以较少约束方式地执行。因此期望提供一种允许管理对能力的使用于提供这样的灵活性的技术。



技术实现要素:

在第一示例配置中,提供了一种装置,包括:用于执行指令的处理电路,该处理电路能够在多个异常级别处进行操作,每个异常级别具有不同的软件执行特权;多个能力存储元件,其能够由处理电路进行访问并且被布置为存储用于约束由处理电路在执行指令时所执行的操作的能力;以及能力配置存储装置,其用于标识针对多个异常级别中的每个级别的能力配置信息,对于每个异常级别,能力配置信息至少标识由处理电路在该异常级别处执行指令时执行的操作是否受该能力约束;并且在从源异常级别至目标异常级别的切换操作期间,能力配置存储装置中关于源异常级别和目标异常级别中的至少一者的能力配置信息用于确定在切换操作期间如何管理处理电路的执行状态。

在另一示例配置中,提供了一种在设备内管理对能力的使用的方法,该设备具有用于执行指令的处理电路,该处理电路能够在多个异常级别处进行操作,每个异常级别具有不同的软件执行特权,及多个能力存储元件能够由处理电路进行访问并且可被布置为存储用于约束当执行该指令时由处理电路执行的操作的能力,该方法包括:在能力配置存储装置内,标识针对所述多个异常级别中的每个级别的能力配置信息,对于每个异常级别,能力配置信息至少标识由处理电路在该异常级别处执行指令时所执行的操作是否受所述能力约束;并且在从源异常级别至目标异常级别的切换操作期间,使用能力配置存储装置中关于源异常级别和目标异常级别中的至少一者的能力配置信息确定在切换操作期间如何管理处理电路的执行状态。

在又一示例配置中,提供了一种装置,此装置包括:用于执行指令的处理装置,该处理装置能够在多个异常级别处进行操作,每个异常级别具有不同的软件执行特权;多个能力存储元件装置,其能够由处理装置进行访问并且用于存储用于约束由处理装置在执行所述指令时所执行的操作的能力;以及能力配置存储装置,其用于标识针对所述多个异常级别中的每个级别的能力配置信息,对于每个异常级别,能力配置信息至少标识由处理装置在该异常级别处执行指令时所执行的操作是否受所述能力约束;并且在从源异常级别至目标异常级别的切换操作期间,能力配置存储装置中关于源异常级别和目标异常级别中的至少一者的能力配置信息被用于确定在切换操作期间如何管理处理装置的执行状态。

在又一示例配置中,提供一种包含程序指令的虚拟机计算机程序,这些程序指令用于控制主数据处理设备以提供对应于上面讨论的第一示例配置的设备的指令执行环境。在一个实施例中,可提供计算机可读存储介质以用于存储虚拟机计算机程序。

附图说明

参考如附图中所图示的本技术的实施例,将仅通过示例进一步描述本技术,在附图中:

图1为根据一个实施例的装置的框图;

图2示出若尝试设置或访问有界指针存储元件组内的指针值,则可能触发错误的指令类型的示例,其中指针值用于指定超出通过关联范围信息指示的范围的地址;

图3图示根据一个实施例的与有界指针关联的标记位的使用;

图4根据一个实施例图示可如何来提供多个异常级别;

图5图示可根据一个实施例提供的每异常级别能力配置信息的形式;

图6为图示根据一个实施例的针对两个不同异常级别的能力配置信息的可能选项的表格;

图7a和图7b为根据一个实施例图示如何在异常进入操作期间管理处理电路的执行状态的流程图;

图8为根据一个实施例图示如何在异常返回操作期间管理处理电路的执行状态的流程图;以及

图9图示可被使用的虚拟机实现。

具体实施方式

在参照附图讨论实施例之前,提供了对实施例的以下描述。

如前所提及的,对基于能力的架构越来越感兴趣,其中某些能力被定义以用于给定过程,并且若尝试执行所定义能力之外的操作,则可触发错误。可以定义各种能力,但一种能力类型为有界指针(在一个实施例中其将指针值与关联范围和许可信息两者合并)。采用这样的基于能力的架构的装置将通常具有用于存储能力的存储元件(本文还成为有界指针存储元件,或者更一般地称为能力存储元件)。存储元件可为寄存器(本文还称为有界指针寄存器或者能力寄存器)和/或可为通用存储器中的存储器位置,例如堆栈存储器上的位置。某些指令可用于引用这样的存储元件以便访问所期望的能力,并且根据该能力执行操作。例如,考虑有界指针,执行这样的指令可使得该有界指针被取回,并且以便其中的指针值然后用于导出存储器中的在指令的执行期间需要的地址。指针值可直接用于标识存储器地址,或可用于导出存储器地址,例如通过将偏移加到指针值。只要存储器地址在通过范围信息指定的范围内,并且满足在许可信息中指定的任何许可,则然后将允许操作继续进行。

通过采用这样的基于能力架构,由于能力可在执行指令时对由处理电路执行的操作施加约束,因此增大对软件攻击的恢复力是可行的。然而,在一些情况下,还可能期望允许某种软件不受能力的约束或者以较少约束方式地执行。这可以提供显著增强的灵活性,并且也可在一些情况下通过允许对处理装置执行能力未知代码而允许向后兼容。

在一些现有系统中已知,布置处理电路以使得其可在不同异常级别处进行操作,其中每个异常级别具有不同的软件执行特权。在本文描述的实施例中,已经开发用于管理对能力的使用的灵活方法以与允许在多个异常级别处的操作的处理电路类型一起使用。

具体地,在一个实施例中,提供了一种装置,其包括能够在多个异常级别处进行操作的处理电路,则多个能力存储元件可由该处理电路进行访问。这些能力存储元件被布置为存储用于约束当执行指令时由处理电路执行的操作的能力。

另外,提供了一种能力配置存储装置,其被布置为标识针对多个异常级别中的每个级别的能力配置信息。具体地,对于每个异常级别,该能力配置信息至少标识由处理电路在该异常级别处执行指令时所执行的操作是否受能力约束。因此,如若需要,这提供了灵活性以允许软件在至少一个异常级别处不受能力的约束。作为特定示例,可允许在高异常级别处执行的高可信度软件不受能力约束地操作。这可通过避免对于这样的软件执行能力检查例行程序的需要而产生性能益处。此还可降低这样的软件需要修改的程度以使其与基于能力架构不矛盾。然而,因为这样的灵活性可基于每异常级别进行管理,所以这样的机制仍然可用于确保在一个或多个异常级别处执行的软件受到能力的完全约束。

在允许能力的影响基于每异常级别而变化的情况下,该装置还提供了用于在异常级别之间切换的机制,该机制考虑了能力的影响在源异常级别与目标异常级别之间不同的可能性。具体地,在从源异常级别至目标异常级别的切换操作期间,能力配置存储装置中关于源异常级别和目标异常级别中的至少一者的能力配置信息用于确定在切换操作期间如何管理处理电路的执行状态。

因此,通过使用所描述实施例,基于每异常级别来定义能力的影响,同时提供用于在异常级别之间切换的有效机制以确保在切换操作期间考虑这些潜在不同的影响是可行的。

切换操作可以各种方式来执行。然而,在一个实施例中,处理电路被布置为使用异常机制以在所述多个异常级别之间转换,并且当异常进入使得从源异常级别至目标异常级别的切换操作时,处理电路被布置为参照关于源异常级别的能力配置信息,来确定要保存以用于源异常级别的返回地址信息。

存在许多其中可使用关于源异常级别的能力配置信息的方式。然而,在一个实施例中,当关于源异常级别的能力配置信息标识由处理电路在所述源异常级别处执行指令时所执行的操作受能力约束时,处理电路被布置为参照程序计数能力来确定返回地址信息,并将返回地址信息作为能力存储在能力存储元件中的指定为返回地址能力存储元件的一者内。其他情况下(即,若源异常级别不受能力约束),处理电路被布置为参照程序计数值来确定所述返回地址信息,并将返回地址信息作为返回地址值存储在返回地址存储元件内。因此,当在源异常级别处执行的操作受能力约束时,返回地址能力被确定并且被存储在返回地址能力存储元件内。然而,若情况并非如此,则不要求返回地址能力,并且相反返回地址信息可以非能力形式作为返回地址值存储在返回地址存储元件内的。

尽管在一个实施例中返回地址能力存储元件在物理上可与返回地址存储元件完全分离,但在替代实施例中,此两个存储元件可以共享相同的物理结构。具体地,在一个实施例中,返回地址存储元件可由返回地址能力存储元件内的字段形成。例如,用于存储能力的返回地址值信息的返回地址能力存储元件内的指针字段还可重新使用于当不要求能力时形成返回地址存储元件。

在一个实施例中,当返回地址存储元件与返回地址能力存储元件共享相同的物理结构,并且源异常级别不受能力约束时,将返回地址能力存储元件的剩余字段中的至少一个字段(即,未用于存储返回地址信息)设置为第一默认值。例如,在一个实施例中,每个能力可包括标记位,其被设置以标识剩余字段表示有效能力,并被清除以标识剩余字段何时不存储有效能力。在一个这样的实施例中,可清除标记位以标识内容不表示能力,并且在该情况下只有指针字段将被引用,从而提供返回地址信息。

在替代实施例中,将所有剩余字段设置为第一默认值,并且在一个实施例中这可通过对写至返回地址能力存储元件的返回地址值进行零扩展来实现。

在一个实施例中,当异常进入导致从源异常级别至目标异常级别的切换操作时,处理电路可被布置为参照关于目标异常级别的能力配置信息,来确定针对目标异常级别的处理电路的初始执行状态。

存在许多其中对于该目的可使用关于目标异常级别的能力配置信息的方式。然而,在一个实施例中,当关于目标异常级别的能力配置信息标识由处理电路在该目标异常级别处执行指令时所执行的操作受能力约束时,处理电路被布置为使用存储在能力控制存储元件中的异常进入地址能力信息生成目标异常级别的初始程序计数能力。其他情况下(即,若目标异常级别不受能力约束),处理电路被布置为使用存储在控制存储元件中的异常进入地址信息生成初始程序计数值。

因此,当已知在目标异常级别处执行的操作将受能力约束时,可生成目标异常级别的初始程序计数能力。在这样的情况下引用的能力控制存储元件可采取各种形式,但在一个实施例中为能力向量基础地址寄存器(cvbar)。在一个特定实施例中,cvbar寄存器提供异常进入的基础地址,并且异常根据此异常类型确定距离此基础地址的偏移。例如,在一个实施方式中,异常类型乘以128,并且将该值添加至cvbar中的能力的地址字段中的基础地址,以产生程序计数能力的初始地址。程序计数能力的能力信息的剩余部分(例如范围及许可信息)业将从在cvbar内保存的能力被提取。

当反之确定在目标异常级别处执行的操作将不受能力约束时,则仅需要生成初始程序计数值,其可不受关联能力信息约束。在一个这样的实施例中,在这样的情况下使用在(非能力)控制存储元件中的异常进入地址信息确定初始程序计数值。在一个特定实施例中,控制存储元件采取向量基础地址寄存器的形式,这是前文提及的cvbar的非能力变体。

尽管在一个实施例中控制存储元件和能力控制存储元件可为物理上分离的结构,但在一个实施例中,它们可以共享同一物理结构。例如,在一个实施例中,控制存储元件可由能力控制存储元件内的字段形成,并且因此例如可提供异常进入的基础地址,但不受关联的能力信息约束。

在一个实施例中,装置可包括用于存储初始程序计数能力的程序计数能力存储元件。当不使用程序计数能力,并且相反要求简单程序计数值时,存在许多可维持程序计数值的方式。然而,在一个实施例中,当生成初始程序计数值而不是初始程序计数能力时,处理电路被布置为将初始程序计数值存储在程序计数能力存储元件的第一字段内。

存在许多其中可在这样的情况下管理程序计数能力存储元件的剩余字段的方式。若在这样的情况下配置处理电路硬件以忽略程序计数能力存储元件的剩余字段,则剩余字段可例如保持不变,或者可被清除。然而,在处理电路将始终涉及全部程序计数能力存储元件的替代实施例中,当仅程序计数值存储在程序计数能力存储元件内时,程序计数能力存储元件的剩余字段可被布置为设置为第二默认值。

第二默认值可采取各种形式,但在一个实施例中使得程序计数能力存储元件表示处理电路的最大能力,以确保处理电路对程序计数值的使用不受程序计数能力存储元件的内容约束。此可提供简单且有效的机制以允许使用同一程序计数结构,而不管在当前异常级别处,操作是否会受能力影响。

除了上述用于处理异常进入的机制外,所描述的实施例也可提供与异常退出(本文也称为异常返回)相关联的机制。具体地,当异常退出导致从源异常级别至目标异常级别的切换操作时,则在一个实施例中,处理电路可被布置为参照关于目标异常级别的能力配置信息确定目标异常级别的处理电路的返回执行状态。

处理电路的返回执行状态可以各种方式来确定。然而,在一个实施例中,当关于目标异常级别的能力配置信息标识由处理电路在所述目标异常级别处执行指令时所执行的操作受能力约束时,处理电路被布置为使用作为所述能力存储元件中指定为返回地址能力存储元件的一者内的能力存储的返回地址信息生成目标异常级别的返回程序计数能力。其他情况下(即,若目标异常级别不受能力约束),处理电路被布置为使用作为返回地址存储元件内的返回地址值存储的返回地址信息生成返回程序计数值。

因此,当目标异常级别将受能力约束时,可生成返回程序计数能力,否则反之生成返回程序计数值。在一个这样的实施例中,在两个情况下,程序计数能力存储元件用于存储返回程序计数能力或者返回程序计数值,并且当该元件用于存储返回程序计数值时,返回程序计数值存储在程序计数能力存储元件的第一字段内。如同前文描述的异常进入机制,若在后一情况下(即,当不要求程序计数能力时)硬件将不涉及程序计数能力存储元件的剩余部分,则这些剩余部分可保留“现状”或者被清除。然而,在替代实施例中,程序计数能力存储元件的剩余字段被布置为设置为第三默认值,并且在一个特定实施例中第三默认值使得程序计数能力存储元件表示处理电路的最大能力,以确保处理电路对程序计数值的使用不受程序计数能力存储元件的内容约束。

多个异常级别可采取各种形式,但在一个实施例中被布置作为异常级别的层级,使得在层级中的较高异常级别处执行的软件具有约束在层级中的较低异常级别处执行的软件的至少一些行为的能力。在一个这样的实施例中,在每个异常级别,能力配置信息被布置为进一步标识在该异常级别处执行的软件是否能够管理能力,这些能力用于约束由处理电路在相同异常级别和较低异常级别中的至少一者处执行指令时所执行的操作。在一些实施例中,存储在能力配置信息内的额外信息将仅指示在特定异常级别处执行的软件是否可管理用于约束在较低异常级别处执行的操作的能力。然而,在一些实施例中,相同信息也可用于标识在特定异常级别处执行的软件是否可额外管理用于约束在同一异常级别处执行的操作的能力。此外,对于层级中的最低异常级别,能力配置信息内的能力管理信息可仅仅标识最低异常级别是否可管理用于约束在最低异常级别处的操作的能力。

在一个实施例中,当针对特定异常级别的能力配置信息标识该特定异常级别不能管理能力时,则至少当特定异常级别为并非最低异常级别的异常级别时,针对该特定异常级别的能力配置信息将进一步标识由处理电路在所述特定异常级别处执行指令时所执行的操作不受能力的约束。因此,对于除了最低异常级别外的任何异常级别,若能力配置信息指示该异常级别不能管理能力,则针对异常级别的能力配置信息也可标识在该异常级别处执行的操作不受能力的约束。因此,在最低异常级别的可能异常的情况下,若预定异常级别不能管理能力,则其在所描述的实施例中也可不受能力影响。最低异常级别同样可能是相同的,但是在替代实施例中,可以布置最低异常级别仍然受能力影响,即使其不能管理能力。

另外,在一个实施例中,当针对特定异常级别的能力配置信息标识该特定异常级别不能管理能力时,也可为针对每个较低异常级别的能力配置信息将标识该较低异常级别不能管理能力的情况。此外,至少当较低异常级别为除了最低异常级别以外的异常级别时,针对该较低异常级别的能力配置信息将进一步标识由处理电路在该较低异常级别处执行的操作不受能力的约束。如前所提及的,该约束也可应用于最低异常级别,但在一个实施例中最低异常级别可被布置为仍然受能力影响。

特定实施例现将参照附图进行描述。

图1示意性地图示包括用于处理指令的处理流水线4的数据处理设备2的示例。在此示例中,处理流水线4包括许多流水线级,该流水线级包括取出级6、解码级8、发布级10、执行级12和回写级14,但是应理解可提供其他类型的级或级的组合。例如,可在一些实施例中包括用于执行寄存器重名的重名级。要处理的指令逐级移动,并且当指令在一个级挂起时,另一个指令在流水线4的不同阶段处挂起。

取出级6从第1级(l1)指令缓存20取出指令。取出级6可通常从连续的指令地址顺序地取出指令。然而,取出级还可具有用于预测分支指令的结果的分支预测器22,并且若预测发生分支则取出级6可从(非连续)分支目标地址取出指令,或者若预测不发生分支则从下一个连续地址取出指令。分支预测器22可包括用于存储信息的一个或多个分支历史表格,该信息用于预测某些分支是否可能发生。例如,分支历史表格可包括用于追踪先前执行的分支的实际结果或表示对分支进行预测的置信度的计数器。分支预测器22还可包括分支目标地址缓存(btac)24,其用于缓存分支指令的先前目标地址以便这些地址可在后续遇到相同分支指令时被预测到。

将所取出的指令传递至解码级8,该级解码指令以生成解码指令。解码指令可包含用于控制执行级12以执行适当的处理操作的控制信息。对于从缓存20取出的一些更复杂指令,解码级8可将这些指令映射至多个解码指令,其可称作微操作(μops或uops)。因此,在从l1指令缓存20取出的指令与如由流水线的后续阶段所看到的指令之间可以不存在一对一关系。一般而言,对“指令”的引用在本申请中应解释为包括微操作。

将解码指令传递至发布级10,其确定执行指令所需的操作数是否可用并且当操作数可用时发布用于执行的指令。一些实施例可支持按顺序处理,使得指令被以与从l1指令缓存20取出指令的程序顺序相对应的顺序发布以供执行。其他实施例可支持乱序执行,以便可将指令以不同于程序顺序的顺序发布至执行级12。乱序处理可用于改进性能,因为虽然较早指令在等待操作数的同时停止了,但是可首先执行程序顺序中的其操作数可用的更迟指令。

发布级10将指令发布至执行级12,其中执行指令以执行各种数据处理操作。例如,执行级可包括许多执行单元30、32、34,这些执行单元包括用于对整数值执行算术或逻辑操作的算术/逻辑单元(alu)30、用于对以浮点形式表示的值执行操作的浮点(fp)单元32和用于执行用于将数据值从第1级(l1)数据缓存36加载到寄存器40的加载操作或用于将数据值从寄存器40存储到l1数据缓存36的存储操作的加载/存储单元34。将理解,这些只是能被提供的执行单元的类型的一些示例,并且还能提供许多其他种类。为了执行处理操作,执行级12可以从一组寄存器40读取数据值。然后可以通过回写级14将所执行的指令的结果回写到寄存器40。

l1指令缓存20和l1数据缓存36可以是包括多个级别的缓存的缓存层级的一部分。例如,还可提供第二级(l2)缓存44,并且可选地能提供缓存的另外的级别。在此示例中,l2缓存44在l1指令缓存20与l1数据缓存36之间共享,但其他示例可具有单独的l2指令和数据缓存。当要取出的指令不在l1指令缓存20中时,那么可从l2缓存44取出指令,并且类似地,如果指令不在l2缓存44中则可从主存储器50取出指令。类似地,响应于加载指令,如果数据不在l1数据缓存36中则可从l2缓存44中取出数据,并且可视需要而定从存储器50取出数据。任何已知方案可以被用于管理缓存层级。

由流水线4使用来引用程序指令和数据值的地址可为虚拟地址,但至少主存储器50以及可选地缓存层级的至少一些层级可以被以物理方式寻址。因此,可提供转换后备缓冲器(tlb)52以用于将由流水线4使用的虚拟地址转换成用于访问缓存或存储器的物理地址。例如,tlb52可包括许多条目,每个条目指定虚拟地址空间的对应页面的虚拟页地址和该虚拟页地址应映射至的对应物理页地址,以便将对应页内的虚拟地址转换成物理地址。例如,虚拟和物理页地址可对应于对应虚拟和物理地址的最有效部分,其中当将虚拟地址映射至物理地址时剩余的最不有效部分保持不变。除地址转换信息外,每个tlb条目还可包括一些信息指定访问许可,如指示某些地址页面是否能以流水线4的某些模式访问。在一些实施例中,tlb条目也可定义对应的地址页面的其他性质,如定义响应于读出或写入操作(例如,缓存应以回写模式还是直写模式操作)更新缓存层级的哪些级别的缓存修正信息,或者与流水线4发布的数据访问的顺序相比,定义对对应页面中的地址进行数据访问是否可由存储器系统重新排序的信息。

尽管图1示出了单级tlb52,但将理解可提供tlb的层级,使得第1阶(l1)tlb52可包括用于转换许多近来访问页面中的地址的tlb条目,并且第2阶(l2)tlb可提供以用于存储更大量页面的条目。当所需条目不存在于l1tlb中时,则其可从l2tlb中取出,或从层级中的另外tlb中取出。若要访问的页面的所需条目不在任何tlb中,则可执行页表查询以访问存储器50中的页表。任何已知tlb管理方案可在本技术中使用。

并且,将理解,一些系统可支持多级地址转换,使得例如第一tlb(或者tlb的层级)可用于将虚拟地址转换成中间地址,并且使用一个或多个另外tlb的第二阶地址转换可随后将中间地址转换成用于访问缓存或存储器的物理地址。例如,这可以用于支持虚拟化,其中第一级地址转换可以由操作系统管理并且第二级地址转换可以由超管理器管理。

如在图1中所示,设备2可具有一组有界指针寄存器60。尽管图1中示出的该组有界指针寄存器与该组通用数据寄存器40在物理分离,但在一个实施例中,同一物理存储装置可用于提供通用数据寄存器和有界指针寄存器两者。

每个有界指针寄存器60包括可用于确定要访问的数据值的地址的指针值62,并且当使用对应指针62时指定地址的可允许范围的范围信息64。有界指针寄存器60也可包括限制信息66(本文还称为许可信息),其可在使用指针时定义一个或多个限制/许可。例如,限制66可用于限制可使用指针62的指令的类型,或可使用指针的流水线4的模式。因此,范围信息64和限制信息66可被认为定义在其内允许使用指针62的能力。当尝试使用超出定义能力之外的指针62时,可触发错误。范围信息64可例如用于确保指针保持在某些已知界限内并且不分散至可包含敏感信息或安全信息的存储器地址空间的其他区域。在同一物理寄存器用于通用数据寄存器和有界指针寄存器两者的实施例中,则在一个实施例中指针值62可例如存储在同一存储位置内以供对应通用寄存器使用。

图2示出了可允许范围用于防止对数据或指令进行未授权访问的指令的类型的示例。如图2的顶部所示,特定有界指针寄存器prl包括给定指针值62和范围信息64,其在此示例中使用界定可允许范围的下界的下界地址68以及界定可允许范围的上界的上界地址69来指定。例如,界限68、69可被设置以界定地址80000至地址81000的范围。当某些指令引用有界指针寄存器prl并且由指针62确定的地址超出此范围时可触发错误。

例如,如图2的部分a所示,在一些系统中若尝试将指针寄存器60中的指针62的值设置为超出由范围信息64指定的范围的值(此处假定指针直接指定地址),则可触发错误。这避免指针62采取超出指定范围的任何值,以便可确保使用指针的任何访问安全地位于允许范围内。可选地,如图2的部分b所示,当指令尝试访问由指针62的地址标识的位置时,当地址超出指定范围时,可触发错误。因此,仍可允许将指针62设置为超出指定范围的值,但一旦尝试在指针地址(或来源于指针的地址)处进行数据访问,若地址超出允许范围,则可触发错误。其他系统可响应于在图2的部分a和部分b中所示的两个指令类型来触发错误。

范围信息64可以不同方式来设置。例如安全代码或者操作系统或超管理器可指定给定指针允许的范围。例如,指令集架构可包括用于设置或修改给定指针62的范围信息64的许多指令,并且这些指令的执行可限制于某些软件或某些模式或处理器4的异常级别。可使用用于设置或修改范围信息64的任何已知方法。

除了可当执行参考指针的某些指令时在执行状态12处使用的有界指针存储元件60组外,也可使用程序计数能力(pcc)寄存器80以提供当指令正在从第1阶指令缓存20取出时在取出级6处的类似功能性。具体地,程序计数指针可存储在字段82中,其中pcc80也可提供范围信息84和任何适当的限制信息86,类似于具备有界指针存储元件60组中的每个指针的范围和限制信息。

另外,在一个实施例中,无界指针也可在通用寄存器40内指定并且当执行存储器访问时使用。为了限制可使用这样的无界指针访问的存储器地址,可假定默认数据能力(ddc)寄存器90指定范围信息92和任何限制信息94两者,其类似于包括在任意能力寄存器内的范围和限制信息。随后,当执行参考通用寄存器40中的无界指针标识存储器地址的存储器访问指令时,类似于关于无界指针执行的界限检查操作的界限检查操作仍然可基于来源于无界指针的任何地址来执行,但在此情况下关于在ddc寄存器90内保存的范围和限制信息。通过这样的方法,能力知晓代码例如可能希望利用现有软件库中的一些能力未知代码来设置ddc寄存器90,以便对当执行该能力未知代码时如何使用从通用寄存器40访问的指针施加约束。具体地,范围信息可用于限制当执行这样的能力未知代码时访问的地址范围。

由有界指针寄存器内的有界指针标识的任何特定范围的存储器地址可包含数据、指令和/或其他能力(即,其他有界指针)。因此,应理解,在任何时间点用于访问存储器的处理电路的能力通过一组能力定义,该组能力包括在有界指针寄存器中标识的能力及能经由在这些有界指针寄存器中保存的能力可访问的任何另外能力,并且此组能力在此处将称作能力域。

在pcc寄存器80或者ddc寄存器90中指定的范围信息和任何关联的限制可以各种方式来设置。然而,在一个实施例中,使用当前能力域中的处理电路可用的一个或多个有界指针来确定信息,以便不能使用基于pcc或者ddc的界限检查来访问存储器地址,该界限检查驻留在针对当前能力域标识的(一个或多个)存储器地址范围之外。

图3示意性地图示如何使用标记位与个别数据块关联以标识数据块表示能力(即,有界指针和关联的限制信息)还是表示正常数据。具体地,存储器地址空间110将存储一系列数据块115,其通常将具有指定大小。仅为了说明起见,在此示例中假定每个数据块包含128位。与每个数据块115关联的情况下,提供标记字段120,在一个示例中其为称作标记位的单个位字段,其被设置以标识关联的数据块表示能力,并且被清除以指示关联的数据块表示正常数据,并且因此不能当作能力。应理解,与设置或清除状态关联的实际值可根据实施例变化,但仅以举例说明,在一个实施例中若标记位具有值1,则指示关联的数据块为能力,并且若具有值0,则指示关联的数据块包含正常数据。

当将能力加载进有界指针寄存器60(本文还称为能力寄存器)中的一者(如图3中示出的能力寄存器100)中时,则标记位与能力信息一起移动。因此,当将能力加载进能力寄存器100中时,指针102、范围信息104和限制信息106(此后称作许可信息)将加载进能力寄存器。另外,与能力寄存器相关联地,或作为能力寄存器内的特定位字段,标记位108将被设置以标识表示能力的内容。类似地,当将能力存储回至存储器时,相关标记位120将与存储能力的数据块相关联地设置。通过这样的方法,区分能力与正常数据是可行的,并且因此确保正常数据不会被用作能力。

在图示的实施例中,设备被布置为,使得其可在不同异常级别处进行操作,其中每个异常级别具有不同的软件执行特权。另外,异常机制用于在多个异常级别之间转换。具体地,在异常进入或异常退出期间,可执行切换操作以从源异常级别切换至目标异常级别。如在图1中所示,设备10可由各种控制/状态寄存器70访问,该控制/状态寄存器存储在其操作期间由处理电路引用的各种控制及状态信息,该控制/状态寄存器70包括在上述切换操作的执行期间使用的各种寄存器。

如图1所示,在控制/状态寄存器70内维持当前过程状态74,以捕获关于处理器的当前操作的各种执行状态信息。尽管示出为单框74,但当前过程状态将不一定全部存储在单个寄存器内,但可存储在可用控制/状态寄存器70内的许多控制和状态寄存器内。

在操作期间,异常可通过各种不同机制(例如中断、系统调用、故障等)来触发。根据一个实施例,当发生异常时,触发异常进入机制作为切换操作的部分,并且在此过程中当前过程状态74被捕获为经保存的过程状态72。此外,经保存的过程状态72可存储在单个寄存器内,或多个寄存器内。随后由处理电路执行异常处理操作以处理异常。当处理电路后续从异常返回时,经保存的过程状态将恢复成当前过程状态,从而允许处理电路继续在发生异常之前正在执行的操作。

为了使得处理电路的执行状态能够在多个异常级别维持,分离的经保存过程状态寄存器(spsr)72和当前过程状态寄存器(cpsr)74可维持多个异常级别,如需要。

图4图示在一个实施例中的各种异常级别之间的相互关系。异常级别el0具有最低软件执行特权,并且在el0处的执行称作无特权执行。n的增大值(自1至3)指示增大的软件执行特权。el2异常级别为处理器虚拟化提供支持。同时el3级为两个安全状态(即,安全和不安全状态)提供支持。

这产生图4中所示的一般树状结构。具体地,若提供el3异常级别,如图4中所示的el3200,则其将在安全状态中运行。在不安全状态中,若需要支持虚拟化,则因此可在不安全状态中提供el2异常级别205是可行的。在安全状态内,在一个实施例中,不提供el2级别,并且反而在安全状态内可提供el1级别230,在此情况下可提供许多不同el0级别240、242。

在不安全状态中,若提供el2级别205,则其可支持多个el1级别210、212、214,并且这些el1级别中的每一者可支持一个或多个el0级别,如附图标记220、222示意示出。

各种异常级别之间的转换经由发生异常而发生。然而,并非所有异常会使得异常级别变化。例如,在一个实施例中,来自el0的异常通常在el1中发生(尽管在一些配置el2中)。在一个实施例中,来自el1及以上的异常可通常在同一异常级别中发生。然而,从el1至el2/el3和从el2至el3的各种异常也可提供并用于类似目的。在一个实施例中,el3中的异常总在el3中发生。如图4中所示,经保存过程状态寄存器可设置成与异常级别中的每个级别关联。若总是来自el0的异常在el1中发生,则不需要与el0级别关联的分离spsr。然而,在一个实施例中,可布置来自el0的某些异常可在el0级别中发生,并且在该情况下可提供el0的分离spsr寄存器。

如将参照其余图描述,在本文描述的实施例中已经开发用于管理对能力的使用的灵活技术以与允许在多个异常级别处的操作的类型的处理电路一起使用。

具体地,如图1中所示,控制/状态寄存器70包括用于存储针对每个异常级别的能力配置信息的(一个或多个)每异常级别能力配置寄存器76。能力配置信息可捕获各种不同类型信息,但在一个实施例中,至少标识由处理电路在该异常级别处执行指令时所执行的操作是否受能力约束。

通过能够根据逐个异常级别指定这样的能力配置信息,这提供了灵活性,以允许在至少一个异常级别处的软件不受能力的约束,如需要。因此,例如,可允许在高异常级别处执行的高可信软件不受能力约束地操作,其可通过避免对于这样的软件执行能力检查例行程序的需要而产生性能益处。也可降低这样的软件需要修改的程度以使其与基于能力架构不矛盾。实际上,在一些实施例中,机制可允许传统、能力未知软件在至少一个异常级别处执行。

图5为根据一个实施例的示意性图示在(一个或多个)寄存器76内捕获的每异常级别能力配置信息的表格。在此实施例中,对于每个异常级别,寄存器300可以包含两个位字段。第一字段305可标识关联的异常级别是否受能力影响,此字段在本文也称作“a”位。因此,此位标识当软件在关联的异常级别处执行时,软件是否受能力约束。在图5中图示的示例中,“0”值指示软件不受能力约束,并且“1”值指示软件受能力约束。然而,应理解,在其他实施例中,逻辑零值和逻辑一值的意思可逆转,如需要。

尽管在一个实施例中,每异常级别能力配置信息可仅包含字段305,但在替代实施例中,提供额外字段310以标识在关联的异常级别处执行的软件是否可管理能力,这些能力随后用于约束由处理电路在一个或多个较低异常级别处执行的操作。可选地,此信息也可标识在特定异常级别处执行的软件是否也可管理用于约束由处理电路在相同异常级别处执行的操作的能力。例如,在一个实施例中,布置在特定异常级别处执行的软件在不同“隔室”中执行可是可行的,其中在一个隔室中执行的软件能够管理随后用于约束通过在另一隔室中执行的软件执行的操作的能力。作为特定示例,在特定异常级别处执行的软件可以能够在执行状态或者限制状态中操作,并且在一个隔室中执行的软件在执行状态中可被允许以管理随后用于约束在相同异常级别处在另一隔室中执行的软件的能力。

如图5中所示,字段310,用于捕获关于在特定异常级别处执行以管理能力的软件的能力的信息,可在一个实施例中称为“m”位。

如图5中所示,若清除a位和m位两者,则这意味着在关联的异常级别处执行的软件可为传统软件,因为软件不仅不受能力影响,而且不能管理能力,并且因此不需要修改以考虑设备的基于能力的架构。

还如图5中所示,另一可选状态为清除a位,但设置m位。这意味着在关联的异常级别处执行的软件不受能力本身影响,但可用于管理能力,该能力随后用于约束通过在较低异常级别处执行的软件执行的操作。

如另一选项,可设置a位和b位两者。这意味着在关联的异常级别处执行的软件受能力本身影响,并且也能够管理能力。如前所述,当设置m位时,在一个实施例中此可指示在关联的异常级别处执行的软件可管理随后用于约束在较低异常级别处由软件执行的操作的能力,但软件可能不能管理同一异常级别处的能力。然而,在替代实施例中也可允许在一些情况下管理与同一异常级别关联的能力。

在一个实施例中,仅图5中示出的前三组条目为a位和m位的有效状态。然而,在替代实施例中,如由表格300中的最后条目示出的另一组状态在一些情况下(例如与最低异常级别el0关联)可为有效的。具体地,根据此状态,清除m位但设置a位。这意味着在该异常级别处执行的软件不能管理能力,但可受能力约束。这可为用于允许最低异常级别el0的适当配置,其中没有要管理的较低异常级别。作为特定具体示例,这将允许在el0处执行的软件一般在这些能力由较高异常级别建立之后受能力(如程序计数能力80和ddc90)约束。

在一个实施例中,每异常级别能力配置寄存器76可认为由多个寄存器形成,每个寄存器由关联的异常级别“所有”并且包含该异常级别的a位和m位。显式访问这些寄存器,其中较高异常级别可访问该级别和以下的寄存器。例如,el2异常级别访问影响el2、el1和el0的能力配置寄存器。在一个特定实施例中,el0的能力配置本文受由el1或者el2所有的寄存器可配置地控制。

在一个实施例中,由每个异常级别对能力配置寄存器的访问可由任何适当机制控制。在一个实施例中,存储在可由特定异常级别访问的能力配置寄存器中的值可随后在操作期间动态变化,例如当分别在能力已知和能力未知的vm客体之间切换时。

图6为图示与较高配置级别关联的能力配置可如何影响在较低异常级别处可用的能力配置的表格320。在此表格中,较高异常级别p的m位值和a位值由字段325、330示出,并且较低异常级别q的对应m位和a位由字段335、340示出。在此实施例中,若针对异常级别p清除m位(即,在逻辑零值),则这意味着异常级别p不受能力影响(即,其a位也视为被清除,而不管其实际值),因为较高异常级别不可能受能力影响,同时不能在较低异常级别处配置能力。清除异常级别p的字段325中的m位也意味着必须清除异常级别q的m位(即,零),因为若较高异常级别不能管理能力,则较低异常级别不可能管理能力。如同异常级别p,清除异常级别q的字段335中的m位意味着字段340中的a位也可视为清除,以用于除读取字段340的值以外的所有目的。

接下来的三个条目示出以下情况:异常级别p可管理能力,但本身不受能力影响。在这样的布置中,在图5的表格300中示出的上三个条目中的每一者与异常级别q关联可用。另外,如前文参照图5所述,在一个实施例中,若异常级别q为最低异常级别,则有可能清除m位字段335和设置a位字段340以便异常级别q受能力约束,而不能管理能力。

图6中最后三个条目示出其中针对异常级别p设置m位和a位的情况。此外,图5的表格300中示出的上三个条目可用于异常级别q。另外,如前所述,当异常级别q为最低异常级别时,清除m位,但设置a位也是可行的。

如前所提及,在异常进入或异常退出/返回期间,可执行切换操作以从源异常级别切换至目标异常级别。根据所描述实施例,在允许能力的影响基于每异常级别而变化的情况下,此设备也作为切换操作的部分提供了机制——考虑了能力的影响在源异常级别与目标异常级别之间不同的可能性。具体地,在从源异常级别至目标异常级别的切换操作期间,能力配置存储装置中关于源异常级别和目标异常级别中的至少一者的能力配置信息用于确定在切换操作期间如何管理处理电路的执行状态。该过程将参照图7a、图7b和图8更详细地讨论。

图7a图示对从异常级别x至异常级别y的异常进入执行的步骤,以确定将保存源异常级别x的何种执行状态。在步骤400,确定a位是否针对源异常级别x设置,即异常级别x是否受能力影响。若是,则过程进行至步骤405,其中捕获异常级别x的能力状态。如前所讨论,这将意味着将异常级别x的当前过程状态寄存器(cpsr)的内容保存进可由异常级别y访问的经保存过程状态寄存器(spsr)72中。然而,另外,存储在pcc寄存器80内的当前程序计数能力需要用于标识源异常级别x的较佳返回地址能力。较佳返回地址将取决于异常类型,但通常将为程序计数值,或者程序计数值加4(假定位组长度寻址,以及32位指令)。除较佳返回地址外,也将来自当前程序计数能力的剩余能力信息复制进由pcc生成的返回地址能力中。在一个实施例中,以此方式生成的返回地址能力将存储进专用返回地址能力寄存器内,在一个特定实施例中这为能力异常链路寄存器(celr)78。

然而,若在步骤400确定不设置a位,意味着在源异常级别处执行的软件不受能力影响,则当仍在将异常级别x的当前过程状态74保存进经保存过程状态72中的情况时,不需要保存能力以形成返回地址信息。相反,较佳返回地址可由程序计数值82计算并且保存在适当返回地址存储元件内,在一个实施例中此为异常链路寄存器(elr)。然而,不需要从pcc寄存器80提取能力信息,因为在异常级别x处执行的软件不具有由能力约束的指令取出。

尽管一个实施例中可提供分离的celr寄存器78和分离的elr寄存器,但在替代实施例中同一物理结构78可用于两个情况中。当由于源异常级别x不受能力的约束,图7a中示出的过程进行至步骤410时,来源于pc值的较佳返回地址可存储在celr的地址字段内,而在一个实施例中将剩余字段中的至少一者设置为第一默认值。例如,参照前文参照图3讨论的标记位,在此情况下可清除与celr寄存器78关联的标记位以标识celr不存储有效能力,硬件则仅当稍后取回关于异常返回的信息时引用存储返回地址信息的celr部分。在替代实施例中,可清除celr寄存器78中的所有剩余字段,例如通过对在步骤410存储进celr寄存器78中的较佳返回地址进行零扩展。

除了确定在异常进入时需要保存源异常级别x的何种执行状态,也必须确定目标异常级别y的适当执行状态,并且具体地需要确定初始程序计数能力或值以存储进pcc寄存器80内。此过程在图7b中示意地示出。

如图所示,在步骤420确定a位是否针对目标异常级别y设置,即目标异常级别是否受能力影响。若是,过程进行至步骤425,其中使用存储在图1示出的能力控制存储元件79中的异常进入地址能力信息更新程序计数能力寄存器80。具体地,寄存器79将存储关于在异常进入时使用的适当地址的信息,并且还存储与地址一起提供的关联的能力信息以形成程序计数能力以存储在pcc寄存器80内。寄存器79中的异常进入地址信息可采取各种形式,但在一个实施例中寄存器79采取能力向量基础地址寄存器(cvbar)的形式。此寄存器提供异常进入的基础地址,并且异常根据此异常类型确定距离此基础地址的偏移。因此,关于此异常类型的信息将用于标识适当地址,此适当地址用于形成加载进pcc寄存器80中的程序计数能力,其中pcc寄存器的能力信息的剩余部分由cvbar中的能力的对应部分形成。

若针对目标异常级别y设置a位,这意味着异常级别y不受能力影响,并且因此不要求程序计数能力。相反,仅需要形成加载进pcc寄存器80的字段82中的初始程序计数值。因此,在一个实施例中,如由步骤430所示,在此情景中设置pcc寄存器80的字段84、86中的范围和限制信息以标识最大能力,并且使用从异常进入地址寄存器79获得的信息来更新pc指针值82。在此示例中,引用非能力异常进入地址寄存器,其在一个实施例中可为向量基础地址寄存器(vbar)。在一个特定实施例中,vbar寄存器形成于cvbar寄存器的较低64位中,从而允许cvbar和vbar寄存器两者共享同一物理存储器结构。

然而,在替代实施例中,可能不需要设置pcc寄存器80中的范围及限制信息以标识最大能力。例如,若布置硬件以便当前异常级别不受能力影响时,其忽略pcc寄存器80内的范围信息84和限制信息86,则反而范围和限制信息可依照要求保持不变,或者被清除。然而,在全部pcc寄存器80在所有情况下均被引用的实施例中,通过设置范围和限制信息以标识最大能力,这将确保在目标异常级别中执行的软件不受能力的约束。

图8为图示在从异常返回期间采取的步骤的流程图。在此情况下,假定源异常级别为异常级别y,并且目标异常级别为异常级别x。在步骤450,确定是否针对目标异常级别x设置a位。若是,则过程进行至步骤460,其中恢复目标异常级别的能力状态。这基本上逆转在图7a的步骤405处采取的步骤,方式是通过将celr寄存器78的内容恢复进pcc寄存器80中,并且针对异常级别x将spsr寄存器72的内容恢复进cpsr寄存器74中。

然而,若确定未针对目标异常级别x设置a位,这意味着异常级别x不受能力影响,则过程进行至步骤455。此处针对异常级别x恢复此(非能力)状态。在一个实施例中,此再次包括将针对异常级别x恢复进cpsr内容中的spsr内容。然而,关于pcc寄存器80,在一个实施例中,设置范围和限制信息以标识最大能力,并且使用来自elr的信息填充指针值字段82。以如前文参照图7b的步骤430讨论的大致相同的方式,在一些实施例中,作为设置范围和限制信息以标识最大能力的替换方案,相反可能仅保持范围和限制信息“现状”或清除该信息,只要硬件不引用当前异常级别不受能力影响的情况中的信息。

图9图示可以被使用的虚拟机实施方式。虽然较早描述的实施例在用于操作支持所涉及技术的具体处理硬件的设备和方法方面实现本发明,但是还可以提供硬件器件的所谓的虚拟机实现。这些虚拟机实现在运行支持虚拟机程序510的主机操作系统520的主机处理器530上运行。通常,需要大型强大的处理器来提供以合理速度执行的虚拟机实现,但是这样的方法在某些情况下(诸如当由于兼容性或重用原因期望运行另一处理器本机的代码时)可能是合理的。虚拟机程序510可以被存储在计算机可读存储介质(其可以是非暂态介质)上,并且向应用程序500提供与将由作为通过虚拟机程序510建模的器件的真实硬件提供的应用程序接口相同的应用程序接口(指令执行环境)。上述用于管理对能力的使用的方法可以在虚拟机环境中使用虚拟机程序510来建模与下层硬件的交互来实现。可以将虚拟机程序视为提供运行虚拟机(该虚拟机通常由客操作系统及其应用组成)的硬件/软件模拟环境。在这样的实施例中,例如,超管理器操作系统对虚拟机程序(通常在el0处运行)是否可受能力影响进行控制是可行的。还可以与虚拟机程序合作一起控制客操作系统及其应用是否可受管理能力影响。

应理解,上述实施例提供用于管理对能力的使用的非常灵活机制,通过使得能力配置信息能够基于每异常级别来指定,并且提供机制以控制在异常级别之间切换,以考虑到能力如何在源异常级别与目标异常级别之间使用的可能差异性。因此,在进入至异常级别及从异常级别退出时,可执行切换操作,其当确定在切换操作期间如何管理处理电路的执行状态时,考虑到关于源异常级别和目标异常级别中的至少一者的能力配置信息。

通过提供这样的可配置性级别,这使得能够在不同异常级别的每个级别处支持各种不同的使用模式。例如,在一个或多个异常级别处,可执行传统软件,即既不受能力影响又不管理本身或较低级别的能力。

作为另一示例,在某些较高异常级别处,如超管理器异常级别,可能运行不受能力限制的代码,但当仍然允许能力已知的软件时,使得可控制/切换用于约束较低异常级别的能力。

如另一示例,在一个或多个异常级别处,软件可既受能力影响并且能够管理用于约束较低异常级别(并且可选地,同一异常级别)的能力。

另外,切换机制确保在异常进入或异常退出时,可捕获或恢复必要信息,其考虑到源和/或目标异常级别是否受能力影响。

在一个实施例中,若需要在低异常级别处使用能力,则所有较高异常级别必须知道能力到达其可管理较低级别的这些能力的程度,因为这些较高异常级别将就较低异常级别对上下文切换负责。然而,通过使用上述技术,一个或多个较高异常级别本身不受能力约束仍然是可行的。这在这样的情况下可产生性能益处,因为任何被允许不受能力约束地运行的软件不需要能力检查。

在本申请中,使用用语“被配置为……”意味着设备元件具有能够执行所定义操作的配置。在此上下文中,“配置”意指硬件或软件的互连的布置或方式。例如,设备可具有提供所定义的操作的专用硬件,或处理器或其他处理器件可被编程来执行功能。“被配置为”不暗示需要以任何方式改变设备元件以提供所定义的操作。

尽管已在本文中参考附图详细地描述了说明性实施例,然而应理解,本发明不限于那些精确的实施例,并且在不脱离如由所附权利要求所限定的本发明的范围和精神的情况下,本领域的技术人员可在其中实现各种变化、添加和修改。例如,在不脱离本发明的范围的情况下,能利用从属权利要求的特征做出独立权利要求的特征的各种组合。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1