在具有安全域和次安全域的数据处理设备中的异常处理的制作方法

文档序号:6533006阅读:160来源:国知局
在具有安全域和次安全域的数据处理设备中的异常处理的制作方法
【专利摘要】提供了一种用于处理异常的数据处理设备和方法,所述数据处理设备具有被配置成响应于程序代码而执行数据处理操作的处理电路,所述处理电路包括用于控制异常处理的异常控制电路。多个寄存器被提供来存储数据,所述寄存器包括寄存器的第一子集和寄存器的第二子集,并且数据存储装置同样被提供来存储数据,所述数据存储装置包括包括安全区和次安全区在内的多个区,其中,安全区用于存储可由处理电路在安全域中操作时访问并且不可由处理电路在次安全域中操作时访问的数据。响应于来自由处理电路所执行的后台处理的初始异常,异常控制电路在触发处理电路执行与异常相对应的异常处理例程之前执行对来自寄存器的第一子集的数据的状态保存,其中,异常处理例程负责执行对来自寄存器的第二子集的数据的状态保存。响应于引起从安全域到次安全域的转变的第一异常,在后台处理由处理电路在安全域中执行的情况下,异常控制电路在触发处理电路在次安全域中执行异常处理例程之前执行额外的对来自寄存器的第二子集的数据的状态保存。本发明的硬件机制使得能够实现安全异常的有效处理,而无需通过异常处理程序进行代理。
【专利说明】在具有安全域和次安全域的数据处理设备中的异常处理

【技术领域】
[0001] 本【技术领域】涉及数据处理的领域,并且特别地涉及敏感数据和代码的处理。

【背景技术】
[0002] 许多数据处理系统和架构提供了隔离并且保护敏感数据和代码段以免于由未授 权的人或进程访问的方式。尽管重要的是能够提供安全性,但是在与这种保护相关联的性 能和电路面积中存在开销。
[0003] 在诸如微控制器之类的小型系统中,使这些开销保持在低值是非常重要的,并且 因此可能需要做出在安全性的级别与性能之间的某种权衡。
[0004] 使数据和代码保持安全的一个方式由英国剑桥的ARM?用其Trustzone架构提 供,其中存在安全状态和非安全状态(也被称为安全域和非安全域),并且异常指令被用来 在状态之间转变,异常处理程序保护安全侧的安全性。尽管这种方式提供高度的安全性,但 是需要软件异常处理程序形式的大量的软件干预来改变安全性状态,这既降低了系统的性 能又增加了为安全软件开发外部应用程序接口 API所需要的努力量,因为所有调用都必须 通过异常处理程序来代理。类似地,需要在非安全域中处理的在安全域中发生的异常同样 需要通过安全异常处理程序来代理,这允许安全状态在控制传递给非安全异常处理程序之 前得以保护。
[0005] US7966466和US2008/0250216公开了可替代的安全系统,其中数据存储装置具有 安全侧和非安全侧,并且当前正被执行的代码在数据存储装置内的位置确定处理器正在操 作的域,以及因此确定被允许访问的数据。


【发明内容】

[0006] 从第一方面看,本发明提供了一种数据处理设备,其包括:被配置成响应于程序代 码而执行数据处理操作的处理电路,处理电路包括用于控制异常处理的异常控制电路;被 配置成存储数据的多个寄存器,寄存器包括寄存器的第一子集和寄存器的第二子集;以及 被配置成存储数据的数据存储装置,数据存储装置包括包括安全区和次安全区在内的多个 区,其中,安全区用于存储可由处理电路当在安全域中操作时访问并且不可由处理电路当 在次安全域中操作时访问的数据;其中:响应于来自由处理电路所执行的后台处理的初始 异常,异常控制电路被配置成在触发处理电路执行与异常相对应的异常处理例程之前执行 对来自寄存器的第一子集的数据的状态保存,其中,异常处理例程负责执行对来自寄存器 的第二子集的数据的状态保存;并且响应于引起从安全域到次安全域的转变的第一异常, 在后台处理由处理电路在安全域中执行的情况下,异常控制电路被配置成在触发处理电路 在次安全域中执行异常处理例程之前执行额外的对来自寄存器的第二子集的数据的状态 保存。
[0007] 当在后台处理期间发生异常时,后台处理可能已将数据值放入寄存器,并且以便 允许这些数据值在异常结束时被保持和存储,系统可以执行数据从寄存器到数据存储装置 (典型地,到在数据存储装置中提供的堆栈)的状态保存。如上面所讨论的那样,对于一些 系统来说,重要的是实现在所实现的安全性级别与处理性能之间的权衡。这在响应于异常 而执行状态保存时同样成立。
[0008] 由于性能原因,执行寄存器的第一子集和第二子集中的数据的状态保存可能是有 用的。依照本发明,对来自第一子集的数据的状态保存能够由硬件中的异常控制电路在触 发异常处理例程之前执行。相比之下,异常处理例程(即软件)可以负责执行对来自寄存 器的第二子集的数据的状态保存。
[0009] 然而,从安全性观点看,在异常处理例程的控制下的寄存器的第二子集的状态保 存有时是有问题的。如果异常引起从安全域到次安全域的转变,则紧跟在安全域中执行的 后台处理之后,异常处理例程能够修改在安全域中位于寄存器的第二子集的安全数据。 [0010] 为了防止这种安全性漏洞,依照本发明,如果在后台处理是在安全域中的情况下 发生引起从安全域到次安全(在本文中也被称为非安全)域的转变的第一异常,则异常控 制电路在次安全域中触发异常处理例程之前,除了第一子集之外,还执行额外的对来自寄 存器的第二子集的数据的状态保存。通过提供用于在触发异常处理例程之前保存寄存器的 第二子集的状态的硬件机制,能够防止数据被次安全域中的软件修改。
[0011] 因此,本技术能够在响应于异常而执行状态保存时实现安全性与性能之间的改进 的平衡。本发明的硬件机制使得能实现次安全异常的有效处理,而无需通过安全异常处理 程序进行代理。
[0012] 响应于第一异常,异常控制电路在一个实施例中被配置成在触发处理电路执行异 常处理例程之前清除寄存器的第二子集。这意味着,在次安全域中的异常处理例程不能够 访问当在安全域中时放入寄存器的第二子集的任何数据。
[0013] 进一步地,在一个实施例中,响应于第一异常,在异常控制电路触发处理电路执行 异常处理例程之前,数据处理设备被配置成确保寄存器的第一子集不包含安全数据。存在 能够实现此情况的许多方式。例如,硬件或软件都可以确保寄存器的第一子集被清除使得 那些寄存器不包含任何安全数据。可替代地,可以是寄存器的第一子集能够被巧妙地设计 以便仅在处理电路被触发执行异常处理例程之前包括非安全数据,在这种情况下可以没有 必要清除寄存器的第一子集。
[0014] 在本申请中,术语"调用寄存器"和"被调用寄存器"可以被用来分别指示寄存器 的第一子集和第二子集。
[0015] 虽然异常处理例程负责执行对来自寄存器的第二子集(被调用寄存器)的数据 的状态保存,但是异常处理例程实际地执行对来自第二子集的数据的状态保存不总是必要 的。例如,如果异常控制电路已经执行额外的对寄存器的第二子集的状态保存,则异常处理 例程能够省略对这些寄存器的状态保存。
[0016] 可替代地,更简单的方式可以是即使额外的状态保存已经由硬件执行了,异常处 理例程也总是执行对来自被调用寄存器的数据的状态保存。因为寄存器可能已经被硬件 清除,所以异常处理例程无论如何都将不能够访问在被调用寄存器中预先保持的安全数据 值,并且与将已清除数据值保存到数据存储装置的次安全区以及之后(在异常完成时)恢 复已清除数据值相关联的开销可能小于与提供用于允许异常处理例程检测硬件是否已经 执行了额外的状态保存的机制相关联的开销。
[0017] 关于寄存器的第一子集(调用寄存器)和寄存器的第二子集(被调用寄存器), 在一个实施例中寄存器的第一子集有可包括零个寄存器,使得需要在异常处理程序附近保 持的全部寄存器都是在第二子集中。在这种情况下,对于大多数异常,没有状态保存将由异 常控制电路来执行,异常处理例程负责第二子集中的所有寄存器的保存。然而,响应于引起 从安全域到次安全域的转变的第一异常,额外的状态保存可以使用异常控制电路将第二子 集(需要被保持的所有寄存器)保存在硬件中,以防止通过异常处理例程在次安全域中对 这种数据的访问。
[0018] 另外的异常有可能在在当前异常已完成的时刻是待决的。在这种情况下,处理电 路可以在返回到在当前异常之前正被执行的后台处理之前向另外的异常提供服务。这种情 形被称为"尾链",并且另外的异常被称为"尾链化"异常。
[0019] 触发额外的状态保存的第一异常可以是当处理电路正在执行后台处理时发生的 初始异常。可替代地,第一异常它本身可以是在初始异常之后但在返回到后台处理之前被 处理的尾链化异常。
[0020] 在本申请中,术语"后台处理"被用来指示被更高优先级的异常中断的处理。如果 异常处理例程它本身被更高优先级异常(在本文中被称为占先异常)中断,则对于占先异 常来说,被中断的异常处理例程它本身可以称为"后台处理",并且占先异常然后可以触发 在异常处理例程被中断之前正由异常处理例程所使用的数据的状态保存。
[0021] 在使用尾链的一个实施例中,可以降低与尾链化异常有关地需要的状态保存的 量。特别地,在一个实施例中,异常控制电路被配置成,响应于比其对应的异常处理例程正 被执行的当前异常优先级更低的新的异常,在使处理电路返回到后台处理之前将新的异常 的处理作为尾链化异常控制。进一步地,异常控制电路被配置成,除了在当前异常在安全 域中被执行、新的异常指示切换到次安全域、并且后台处理在安全域中被执行的情况下,在 控制新的异常的处理时不再执行另外的状态保存操作,因此异常控制电路被配置成,在当 前异常的异常处理例程的完成之后,执行额外的对来自寄存器的第二子集的数据的状态保 存,并且确保寄存器的第二子集在触发处理电路执行与新的异常相对应的异常处理例程之 前被清除。如较早地提到的那样,寄存器的第一子集的清除取决于实施方式而可以是必要 的或不是必要的。当非安全的尾链化异常跟随它本身在安全后台处理中引起中断的安全异 常时,这样的方法允许数据的安全性被维持。
[0022] 在处理尾链化异常时,关于状态恢复操作,还能够实现另外的效率。例如,在一个 实施例中,异常控制电路被配置成,除了在当前异常在次安全域中被执行、新的异常指示切 换到安全域、并且后台处理在安全域中被执行的情况下,在控制新的异常的处理时不执行 状态恢复操作,因此异常控制电路被配置成,在针对当前异常的异常处理例程的完成之后, 在触发处理电路执行与新的异常相对应的异常处理例程之前执行数据到寄存器的第二子 集中的状态恢复操作。
[0023] 如较早地提到的那样,当当前异常正被处理时发生的更高优先级异常被作为占先 异常处理。如果早些时候在当前异常的处理中发生这样的占先异常,并且特别是当异常控 制电路在触发处理电路执行针对当前异常的异常处理例程之前仍然在处理较早地提到的 状态保存或额外的状态保存操作时,则在一个实施例中能够修改异常控制电路的状态保存 和额外的状态保存操作。特别地,在一个实施例中,如果当执行额外的寄存器的第二子集的 状态保存时发生比第一异常具有更高优先级的占先异常,并且占先异常不需要从安全域到 次安全域的转变,则异常控制电路被配置成在触发处理电路处理占先异常的异常处理例程 之前取消额外的状态保存。
[0024] 可替代地,或另外地,如果当前异常不引起从安全域到次安全域的转变,并且如果 在与当前异常相关联的异常处理例程的处理开始之前发生比当前异常具有更高优先级并 且需要从安全域到次安全域的转变的占先异常,则异常控制电路可以被配置成在触发处理 电路处理占先异常的异常处理例程之前额外地执行额外的来自寄存器的第二子集的数据 的状态保存。
[0025] 如果在异常控制电路已执行了任何需要的关于当前异常的状态保存或额外的状 态保存并且处理电路已被触发来执行针对该当前异常的异常处理例程之后但是在该异常 处理例程已完成之前发生占先异常,则在一个实施例中,异常控制电路被配置成,当确定寄 存器的第一子集或寄存器的第一和第二子集二者的状态保存在触发处理电路执行占先异 常的异常处理例程之前是需要的时,将当前异常视为后台处理。
[0026] 在一个实施例中,数据存储装置包括多个堆栈,所述多个堆栈包括在安全区中的 安全堆栈和在次安全区中的次安全堆栈。在这样的实施例中,当执行来自寄存器的第一子 集的数据的状态保存和额外的来自寄存器的第二子集的数据的状态保存时,异常控制电路 被配置成将数据保存到与处理电路在执行后台处理时正在操作的域的安全性相对应的安 全堆栈和次安全堆栈中的一个。
[0027] 在一个实施例中,数据处理设备进一步包括安全配置存储位置以用于存储指示多 个寄存器中的哪些可用于通过当前执行代码用于存储安全数据的安全配置值,其中,响应 于引起从安全域到次安全域的转变的异常,异常控制电路被配置成将由安全配置值所指示 的寄存器中的一个或多个包括在寄存器的第二子集内。因此,这允许关于至少形成寄存器 的第二子集的寄存器的某种可配置性,并且因此允许关于哪些寄存器经受由异常控制电路 所执行的额外的状态保存操作的某种可配置性。
[0028] 在一个实施例中,数据处理设备进一步包括用于存储异常返回值的存储位置,处 理电路被配置成将域值设置在异常返回值内以指示数据处理设备在从后台处理取得初始 异常时操作的域,异常控制电路依靠域值来确定寄存器中的哪些应该经受状态保存或状态 恢复操作。这提供用于在任何特定情形下允许异常控制电路确定状态保存和/或额外的状 态保存是否是需要的简单机制。
[0029] 从第二方面看,本发明提供了一种数据处理设备,其包括:用于响应于程序代码而 执行数据处理操作的数据处理电路;多个寄存器;以及用于存储数据的数据存储装置,数 据存储装置包括每个区都具有安全级别的多个区,并包括用于存储数据处理电路在安全域 中操作时可访问的而在次安全域中操作时不可访问的敏感数据的至少一个安全区和用于 存储次安全数据的次安全区;数据存储装置包括至少两个堆栈,在安全区中的安全堆栈和 在次安全区中的次安全堆栈;其中数据处理电路包括异常处理电路,异常处理电路被配置 成在数据处理电路正在安全域中执行并且异常指示切换到次安全域中执行程序代码以清 除寄存器的寄存器集合时对异常的接收做出响应,在寄存器集合内的寄存器取决于执行的 域的安全级别和将发生异常的域。
[0030] 在一个这样的实施例中,数据处理电路被进一步配置成在清除一组寄存器之前, 将存储在该组寄存器中的状态保存到数据处理电路正在执行的域的堆栈。
[0031] 此外,在一个实施例中,数据处理设备包括安全配置存储位置以用于存储指示多 个寄存器中的哪些可用于通过当前执行代码用于存储安全状态的值,数据处理电路被配置 成依靠由安全配置值所指示的多个寄存器以及执行的域的安全级别和将发生异常的域来 确定哪些寄存器是在该组寄存器内。
[0032] 从第三方面看,本发明提供了一种在数据处理设备上处理数据的方法,数据处理 设备包括:用于响应于程序代码而执行数据处理操作的处理电路,处理电路包括用于控制 异常处理的异常控制电路;用于存储数据的多个寄存器,寄存器包括寄存器的第一子集合 和寄存器的第二子集;以及用于存储数据的数据存储装置,数据存储装置包括包括安全区 和次安全区在内的多个区,其中,安全区用于存储可由处理电路当在安全域中操作时访问 并且不可由处理电路在次安全域中操作时访问的数据,方法包括:响应于来自由处理电路 所执行的后台处理的初始异常,采用异常控制电路来在触发处理电路执行与异常相对应的 异常处理例程之前执行对来自寄存器的第一子集的数据的状态保存,其中,异常处理例程 负责执行对来自寄存器的第二子集的数据的状态保存;并且响应于引起从安全域到次安全 域的转变的第一异常,在后台处理由处理电路在安全域中执行的情况下,采用异常控制电 路来在触发处理电路在次安全域中执行异常处理例程之前执行额外的对来自寄存器的第 二子集的数据的状态保存。
[0033] 从第四方面看,本发明提供了一种数据处理设备,其包括:用于响应于程序代码而 执行数据处理操作的处理装置,处理装置包括用于控制异常处理的异常控制装置;用于存 储数据的多个寄存器装置,包括寄存器装置的第一子集和寄存器装置的第二子集;以及用 于存储数据的数据存储装置,包括包括安全区和次安全区在内的多个区,其中,安全区用于 存储可由处理装置在安全域中操作时访问并且不可由处理装置在次安全域中操作时访问 的数据;其中:响应于来自由处理装置所执行的后台处理的初始异常,异常控制装置在触 发处理装置执行与异常相对应的异常处理例程之前执行对来自寄存器装置的第一子集的 数据的状态保存,其中,异常处理例程负责执行对来自寄存器装置的第二子集的数据的状 态保存;并且响应于引起从安全域到次安全域的转变的第一异常,在后台处理由处理装置 在安全域中执行的情况下,异常控制装置在触发处理装置在次安全域中执行异常处理例程 之前执行额外的对来自寄存器装置的第二子集的数据的状态保存。

【专利附图】

【附图说明】
[0034] 本发明将参考如附图中所图示的其实施例仅通过示例的方式来描述,在附图中:
[0035] 图1示出了具有带安全区和非安全区的数据存储装置的根据一个实施例的数据 处理设备;
[0036] 图2示意性地图示了依照一个实施例数据处理设备的一组寄存器如何可以被分 割成调用寄存器和被调用寄存器;
[0037] 图3A和3B示意性地图示了依照实施例的由异常控制电路所执行的压栈和出栈操 作;
[0038] 图4示意性地示出了在代码执行期间针对各种不同场景的异常(在这个示例中为 中断)的取得;
[0039] 图5是示出了依照一个实施例在初始异常以及然后另外的异常被接收到时所被 保存的状态的表;
[0040] 图6针对示例实施例示出了其状态在异常的取得时取决于为了取得该异常所需 要的域转变而被保存到堆栈的寄存器;
[0041] 图7A和7B图示了依照一个实施例的两个示例尾链场景;
[0042] 图8A和8B图示了依照一个实施例的另外两个尾链场景;
[0043] 图9A和9B图示了依照一个实施例的两个早期占先场景;
[0044] 图10示意性地图示了依照一个实施例的能够在处理占先异常时使用的分解技 术;
[0045] 图11示意性地图示了依照一个实施例用来存储包括安全性位的异常返回值的链 路寄存器的使用;
[0046] 图12是图示了依照一个实施例在接收到异常时执行的压栈操作的流程图;以及
[0047] 图13是图示了依照一个实施例在完成异常时执行的出栈操作的流程图。

【具体实施方式】
[0048] 图1示出了例如可以是微控制器的数据处理设备10。它包括用于处理指令的处理 电路20和数据存储装置30,该数据存储装置30用于存储由处理电路20所处理的数据并且 同样用于存储处理电路20执行的程序代码。
[0049] 数据存储装置30具有不同安全性的两个区,安全区32和非安全区34 (在本文中 也被称为次安全区)。被存储在非安全区34中的代码在执行时不可访问在安全区32中存 储的数据。
[0050] 数据处理设备10还具有控制对安全32和非安全34区的访问的存储器保护单元 MPU40。尽管这种控制可以通过存储器保护单元来执行,但是在其它实施例中,它可以由在 该处理设备内的电路以更分布式的方式完成,所述电路监控当前正被执行的代码所被存储 在里面的区,并且依靠此来控制对存储器的不同区的访问。
[0051] 在这个实施例中,处理电路20正在其中执行的域的安全性根据当前正被执行的 代码所被存储在的区来确定(用于确定操作的当前域的其它技术也是可能的)。因此,在安 全数据存储装置32中存储的安全程序代码在安全域中被执行并且使用安全堆栈36将数据 值存储在里面。类似地,在非安全数据存储装置34中存储的非安全代码在非安全域(在本 文中也被称为次安全域)中被执行,并且使用非安全堆栈38用于在执行期间存储数据值。
[0052] 处理电路20具有用于取出要被执行的指令的取出电路22。它同样具有用于对这 些指令进行解码的解码电路24和用于执行它们的执行电路26。要被执行的指令由取出电 路22经由存储器保护单元MPU40从数据存储装置30取出。指令和数据经由MPU40来检索, 所述MPU40控制对安全区和非安全区的访问并且使安全数据与非安全侧隔离。
[0053] 在这个实施例中,存在具有在数据处理期间使用的通用寄存器的寄存器组60。这 些通用寄存器具有指示哪一个指令是要被执行的下一个指令的程序计数器PC,以及指示当 前堆栈框架位于在堆栈中的哪一个点处的堆栈指针SP。在这个实施例中,因为在安全侧 中存在堆栈并且在非安全侧中也存在堆栈,所以存在安全堆栈指针SSP和非安全堆栈指针 NSP,但是在任何时候仅其中一个对于正在执行的程序而言是直接可见的。应该注意的是, 在一些实施例中,对于每个堆栈来说可以存在多个堆栈指针,但是同样在任何时候仅一个 将是可见的。在寄存器组60中还存在通用寄存器以用于存储由处理电路20正在处理的数 据值。在这个实施例中,这些数据值被标记为R0至R12。
[0054] 寄存器组60还包括链路寄存器65,所述链路寄存器65可以被用来在异常被取得 或者函数被调用时存储返回值。返回值允许系统确定返回是异常返回还是函数返回,并且 确定在从异常或函数返回时需要什么处理。可以使用不同种类的返回值,包括指示异常返 回并且能够包括信息的异常返回(EXC_RETURN)值,诸如后台处理在里面被处理的域的安 全性级别的指示,所述指示能够使得处理器能够确定如何处理异常返回,例如在恢复状态 时要访问哪一个堆栈以及有多少寄存器需要被加载。
[0055] 图1还示出了具有诸如浮点寄存器之类的额外的专用寄存器的额外的寄存器组 64。在一个实施例中,能够将值设置在安全配置寄存器(SCR)62中以标识在额外的寄存器 组64中的寄存器中的任一个是否能够存储安全数据,并且如果是这样的话,则那些寄存器 将被认为(连同寄存器组60的寄存器一起)形成在控制从安全域到次安全域的转变时需 要被管理的一组寄存器的一部分,并且反之亦然。
[0056] 依照所描述的实施例,能够被用来在安全性域之间转变的一个机制是异常机制。 依照这种机制,在发生异常时,将临时地暂停当前软件例程的执行,并且替代地执行将分支 到用来处理该异常的异常处理例程,所使用的异常处理例程取决于异常发生的类型。一旦 异常处理例程已被执行,异常返回然后将被用来返回到作为异常发生的结果而被临时地暂 停的原始软件例程。
[0057] 异常控制电路28被提供来控制异常的取得,并且在这些异常导致从更安全到次 安全域的转变的情况下,在异常的取得之前清除可以存储敏感数据的该组寄存器以避免在 这些寄存器中存储的数据可被非安全侧获得。在这些寄存器中的一些或全部中存储的状态 将在异常控制电路28的控制下被存储在安全堆栈上,使得在从异常返回时能够恢复该状 态。
[0058] 虽然在图1中数据存储装置30包含单个安全区和单个非安全区,但是在本文中所 描述的技术同样地适用于包括两个以上的不同安全性区的不同实施方式。
[0059] 并且,虽然图1将异常控制电路28示出为与诸如执行级26之类的处理电路20的 其它部分分离,但是在实践中,异常控制电路28可以至少部分再使用处理电路20的一些元 件来控制异常的处理。
[0060] 在控制从安全域到次安全域的转变并且反之亦然时需要被管理的寄存器的集合 100在图2中被示意性地图示。依照所描述的实施例,这些寄存器中的一些被定义为调用寄 存器110,而寄存器中的其它寄存器被定义为被调用寄存器120。调用寄存器是异常控制电 路28将总是负责将状态保存到堆栈上的那些寄存器,而不管异常处理例程将在其中执行 的域如何。在默认情况下,异常处理例程则负责将对被调用寄存器的状态保存。特别地,异 常处理例程然后将被调用寄存器的状态保存到与异常处理例程正在其中执行的域相关联 的堆栈上。进一步地,异常处理例程然后将负责在发出异常返回之前恢复那些被调用寄存 器的状态(典型地通过将它们从堆栈往回拷贝到有关寄存器中)。
[0061] 然而,依照所描述的实施例,在异常将需要从安全域到次安全域的转变、并且后台 处理是在安全域中的情形下,异常控制电路28在使处理电路转变到异常处理例程的执行 之前额外地负责将被调用寄存器的状态保存在安全堆栈36的堆栈帧内。
[0062] 如较早地讨论的那样,SCR寄存器62的内容将定义哪些寄存器可以被用来存储安 全数据,以及因此哪些寄存器需要被包含在寄存器的集合100内。在一个实施例中,SCR寄 存器62的内容将标识额外的专用寄存器64中的任一个是否同样将被包括在除通用寄存器 60之外的集合100内。
[0063] 图3A图示了针对三个不同场景的异常控制电路对异常的发生和对该异常的后续 完成的操作。场景中的第一个是其中后台处理是在安全域中,并且异常将由异常处理例程 在安全域中处理,场景中的第二个是其中后台处理是在非安全域中,并且异常将由异常处 理例程在安全域处理,以及第三场景是其中后台处理是在非安全域中,并且异常将由异常 处理例程在非安全域中处理。
[0064] 在这三个场景中的每一个中,当后台处理130被异常中断时,异常控制电路28被 布置成在触发处理电路执行所需要的异常处理例程140以便处理异常之前,在点135处将 来自调用寄存器的数据压栈到与后台处理在其中正被执行的域相关联的堆栈上。在异常完 成时,异常控制电路在点150处恢复后台处理之前同样在点145处将预先压栈的数据从有 关堆栈出栈回到调用寄存器中。
[0065] 异常处理例程将典型地负责在异常处理例程期间在使用这些寄存器之前将来自 被调用寄存器的数据压栈,并且负责稍后在异常处理例程的结束之前将该数据出栈回到被 调用寄存器中。
[0066] 在图3A的示例中,取决于特定实施方式,调用存储器在异常处理例程被执行之前 可以被或者不被硬件清除。在一个实施例中,将不清除调用寄存器的内容,因为所设想的三 个场景要么在异常被取得时不导致域的转变,要么仅导致从非安全域到安全域的转变,并 且在一个实施例中,安全域被允许看到非安全数据。
[0067] 图3B图示了针对其正在安全域中处理后台处理并且异常需要到非安全域的转变 的场景的异常控制电路对异常的发生并且对异常的后续完成的操作。在这个示例中,当后 台处理160被异常中断时,异常控制电路被配置成在点165处将来自调用寄存器的数据压 栈到安全堆栈上,并且额外地在点170处被布置成将来自被调用寄存器的数据压栈到安全 堆栈上。异常控制电路然后还将确保在触发处理电路执行异常处理例程175之前清除调用 和被调用寄存器的内容。因此,在这种场景中,非安全异常处理例程不能够访问在调用或被 调用寄存器中预先保持的安全数据。
[0068] 在完成异常处理例程时,异常控制电路然后将在点180处将预先压栈的被调用数 据从安全堆栈出栈回到被调用寄存器中,并且在点190处恢复后台处理之前,还将在点185 处将预先压栈的调用数据从安全堆栈出栈回到调用寄存器中。
[0069] 在一个特定实施例中,非安全异常处理例程仍然能够被布置成照常保存被调用寄 存器的状态,但是在这种场景中,那些被调用寄存器将是空的,并且因此异常处理例程将仅 仅将清除值存储到它将在发出异常返回之前稍后恢复到寄存器中的非安全堆栈上。
[0070] 如上面所说明的那样,作为架构中的默认位置,寄存器状态的一部分由硬件在异 常(例如中断)发生并且完成时自动地保存和恢复。通过扩展这样的架构以保存并且清除 整个寄存器状态或安全域使用的寄存器状态中的至少全部,在中断引起安全到非安全转变 的情况下,硬件能够在异常附近维持安全性。
[0071] 通过利用上述技术,有可能通过扩展自动寄存器堆栈系统来去除通过安全状态代 理中断的要求以便使异常控制电路将调用和被调用寄存器中的全部压入到堆栈(代替仅 仅调用保存的寄存器),以及然后以便在切换到非安全状态并且跳转到异常处理例程(在 中断的示例中为中断向量)之前清除它们的值。为了使中断延迟时间保持尽可能低,额外 的寄存器状态在从安全向非安全状态转变时被仅压入到堆栈上。这在异常处理期间发生较 高优先级异常(所谓的占先异常)时或在处理尾链异常时引入很多复杂性。图4示出了一 些示例。
[0072] 在第一示例中,在安全状态下执行后台程序代码并且接收到第一安全中断。寄存 器(即调用寄存器)的子集被保存到安全堆栈,并且然后(虽然第一安全中断仍然正经由 适当的中断向量处理)需要在非安全域中处理的第二较高优先级中断被接收到。因为它需 要在非安全域中处理,所以在安全寄存器中的信息都不应该对于新的中断向量例程而言是 可见的,并且因此所有安全寄存器(调用和被调用寄存器两者)应该被保存到安全堆栈并 且然后在取得这个中断之前清除。当第二中断已完成时,处理返回到非完成的初始安全中 断,并且响应于第二中断而被压入到安全堆栈的寄存器在该点通过弹出安全堆栈来恢复。 这个第一安全中断然后能够完成,因此在重新开始安全后台处理之前,被压入到堆栈的原 始子集然后能够通过弹出安全堆栈来恢复。
[0073] 在第二示例中,第二中断具有比第一中断更低的优先级,并且因此第一中断将因 此在取得非安全第二中断之前完成。一旦第一中断已完成,然后剩余的寄存器(即被调用 寄存器)就被压入到安全堆栈,并且在取得非安全中断之前清除所有寄存器。虽然重要的 是在该点处清除调用和被调用寄存器两者,但异常控制电路实际上可以不需要在这个阶段 清除所有寄存器,因为例如可能已经较早地清除了调用寄存器。在非安全中断的末期,已被 压入到安全堆栈的寄存器中的全部被恢复。
[0074] 第三示例示出了接收到安全中断因此存在寄存器(调用寄存器)到非安全堆栈的 部分保存的非安全后台代码。如果然后接收到具有较高优先级的第二非安全中断,则安全 寄存器(调用和被调用)中的全部都将需要被压入到安全堆栈并且在它能够被取得之前清 除。当非安全中断完成时,所有的安全寄存器需要从堆栈弹出,并且然后当安全中断完成 时,非安全寄存器的原始子集被弹出。
[0075] 第四示例示出了接收到使调用保存的寄存器被压入到安全堆栈的安全中断、但是 在这个过程完成之前发生第二较高优先级非安全中断的安全后台代码。这个第二中断使剩 余的寄存器(即被调用寄存器)在调用寄存器已被压栈之后被压入到安全堆栈上,从而导 致所有寄存器的压入被执行。所有寄存器然后在取得非安全中断之前被清除。在完成这个 中断时,被调用保存的寄存器在取得安全中断之前被从安全堆栈弹出。当安全中断完成时, 从安全堆栈弹出原始调用寄存器。
[0076] 图5示出了指示潜在中断和需要被执行的状态保存的表。在这点上,"压入子集" 是将寄存器的调用保存的子集压入到堆栈上,"压入剩余"是将寄存器的被调用保存的子集 压入到堆栈上,以及"压入所有"是将调用和被调用寄存器状态两者压入到堆栈上。在这点 上,在一些寄存器不可用于存储敏感数据并且这是已知的情况下,然后这些寄存器可以无 需被压入到堆栈上。
[0077] 在表中,"异常进入"列标识如果在分支到初始中断的异常向量(其将在本文中被 称为早期占先场景)之前发生比初始中断具有更高优先级的另外的中断则什么状态被压 入到堆栈上。"异常返回"列标识如果发生具有低于或等于初始中断的优先级的另外的中断 并且因此未被取得直到初始中断完成为止则什么状态被压入、弹出或者清除(这将在本文 中被称为尾链场景)。虽然表中所标识的动作典型地是由异常控制电路硬件28所承担的动 作,但是紧跟安全中断之后清除与非安全中断的尾链相关联的调用寄存器("清除子集") 的动作在后台处理是在非安全域中的情形下事实上可以由软件而不是异常控制电路硬件 来执行。对于在后台处理是在安全域中的情形下紧跟安全中断之后与非安全中断的尾链相 关联的寄存器清除(形成"压入剩余并且清除所有"操作的一部分)的至少一部分情况也 可能是这样的,其中软件能够被布置成清除调用寄存器,可是硬件然后将压入并且清除被 调用寄存器。
[0078] 如从图5的表的回顾显而易见,当从安全向非安全状态转变时,需要从寄存器去 除能够保存安全状态的所有寄存器中的值,使得它们不可被非安全侧获得,并且因此除常 见调用保存的寄存器状态之外,还执行额外的保存和清除。
[0079] 图6示出了一个实施例的堆栈帧,并且特别是在从相同状态或次安全状态取得中 断时保存到堆栈的堆栈帧上的寄存器内容(图6的左手侧)和在转变为次安全状态时保存 到堆栈帧上的内容(图6的右手侧)。在这点上,在后者情况下需要保存并且清除更多寄存 器,因为当这是必须不可被次安全状态获得的安全状态时不能够让寄存器存储任何状态。
[0080] 图6标识了依照特定实施例的哪些寄存器被认为是调用寄存器并且哪些寄存器 被认为是被调用寄存器。然而,如较早地讨论的那样,确切地哪些寄存器需要被包括在调用 和被调用寄存器内可以取决于实施例而不同,并且能够由安全配置寄存器62中的值来指 示,使得所需要的状态的保存和寄存器的清除能够通过使用这个值来确定。这个值可以由 编译器针对特定设备来设置,并且这允许特定设备被以不同的方式使用以及在产品中提供 某种灵活性。在其它实施例中,它可以由软件例如在系统正在启动时设置。
[0081] 如将从上述描述所指出的那样,异常控制电路在发生异常时将寄存器状态的调用 保存的段自动地压入和弹出到堆栈,并且必要时改变哪一个堆栈指针以及因此哪一个堆栈 被使用。这甚至在具有安全和次安全域的系统中也允许以下优点被呈现:降低的中断延迟 时间;降低的中断抖动;能够用C语言代替汇编语言编写异常处理程序;它使得能实现像异 常进入上的异常和尾链这样的最优化。
[0082] 图7A和7B图示了一些特定尾链示例场景。在图7A的示例中,在点250处正在执行 安全后台处理,但是在点255处发生需要异常处理例程在安全域中被执行的初始异常。因 此,在点255处,异常控制电路将来自调用寄存器的数据压栈到安全堆栈上,随后在点260 处执行异常处理例程。
[0083] 在点257处,发生另外的较低优先级异常,并且因此该异常仍然是未决的直到初 始异常在点265处完成为止。在该点处,异常控制电路确定从安全到非安全域的转变是需 要的以便处理另外的异常,并且因此在该点处将被调用寄存器压栈。它同样确保在触发处 理电路在非安全域中执行所需要的异常处理例程以便在点270处处理另外的异常之前,被 调用寄存器已被清除(调用寄存器已例如被软件较早地清除)。在点275处完成另外的异 常时,异常控制电路然后在点280处重新开始后台处理之前将调用和被调用寄存器中的全 部的内容出栈。
[0084] 图7B图示了类似的示例,但在这个示例中,后台处理在点300处是在非安全域中。 当在点305处发生初始异常时,然后在点310处执行针对初始异常的异常处理例程之前,异 常控制电路像它在图7A的示例中所做的那样将调用寄存器压栈。在点307处发生的另外 的较低优先级异常然后保持未决直到初始异常的处理在点315处结束为止。然而,在该点 处,因为后台处理是非安全的,所以异常控制电路不执行压栈。如参考图5的表较早地讨论 的那样,可以在这个阶段进行的可选步骤是清除调用寄存器,但是这个步骤可以替代地由 软件代替异常控制电路硬件来执行。其后在点320处,在非安全域中处理针对另外的异常 的异常处理例程。在点325处完成该另外的异常时,异常控制电路在点330处返回到后台 处理之前将调用寄存器出栈。
[0085] 在一个实施例中,图7A的示例是异常控制电路不得不在另外的异常紧跟初始异 常的完成之后作为尾链化异常被处理时执行某种额外的压栈、并且因此执行压栈的开销保 持至最小同时在处理尾链化异常时保持安全数据的安全性的仅有示例。
[0086] 图8A和8B图示了两个另外的尾链示例。在图8A的示例中,在点350处正在执行 安全后台处理,但是在点355处发生需要异常处理例程在非安全域中执行的初始异常。因 此,在点355处,异常控制电路将来自调用寄存器和被调用寄存器的数据压栈到安全堆栈 上,随后在点360处执行异常处理例程。
[0087] 在点357处,发生另外的较低优先级异常,并且因此该异常仍然是未决的直到初 始异常在点365处完成为止。在该点处,异常控制电路确定从非安全到安全域的转变是需 要的以便处理另外的异常,并且因此在该点处在触发处理电路在安全域中执行所需要的异 常处理例程以便在点370处处理该另外的异常之前将被调用寄存器出栈。在点375处完成 该另外的异常时,异常控制电路然后在点380处重新开始后台处理之前将调用寄存器的内 容出栈。
[0088] 图8B图示了类似的示例,但在这个示例中,后台处理在点400处是在非安全域中。 当在点405处发生初始异常时,然后在点410处执行针对初始异常的异常处理例程之前,异 常控制电路将调用寄存器压栈。在点407处发生的另外的较低优先级异常然后保持未决直 到初始异常的处理在点415处结束为止。然而,在该点处,异常控制电路确定不需要堆栈操 作。其后在点420处在安全域中处理针对该另外的异常的异常处理例程。在点425处完成 该另外的异常时,异常控制电路在点430处返回到后台处理之前将调用寄存器出栈。
[0089] 在一个实施例中,图8A的示例是在异常控制电路不得不在另外的异常紧跟初始 异常的完成之后作为尾链化异常被处理时执行出栈操作、并且因此执行出栈的开销保持至 最小同时在处理尾链化异常时保持安全数据的安全性的简单尾链情形下的仅有示例。
[0090] 图9A和9B图示了依照一个实施例的两个早期占先场景。在图9A的示例中,在 安全域中在点450处执行的后台处理具有优先等级1,但是在接收到具有优先等级10并且 需要在安全域中处理的异常时,异常控制电路开始在点455处将调用寄存器压栈以为在点 460处转变到安全异常处理例程作准备。然而,在完成调用寄存器的压栈之前,在点465处 接收到另外的异常,其具有较高的优先等级(在这个示例中优先等级为12),并且需要转变 到非安全域。如在图9A的右手侧所示,在该点处,异常控制电路的压栈活动性被修改使得 它将调用和被调用寄存器两者压栈(见点470),随后处理电路被触发来在点475处执行针 对该另外的异常的异常处理代码。其后,优先等级10的安全异常然后能够作为尾链化异常 被处理。
[0091] 在图9B的示例中,在安全域中在点500处执行的后台处理具有优先等级1,但是在 接收到具有优先等级10并且需要在非安全域中处理的异常时,异常控制电路开始在点505 处将调用和被调用寄存器压栈以为在点510处转变到非安全异常处理例程作准备。然而, 在完成寄存器的压栈之前,在点515处接收到另外的异常,其具有较高的优先等级(在这个 示例中优先等级为12),并且需要转变到安全域。如在图9B的右手侧所示,在该点处,异常 控制电路的压栈活动性被修改使得它仅将调用寄存器压栈(见点520),并且必要时这牵涉 取消已经发生的任何被调用寄存器压栈的效果(例如,通过将那些受影响被调用寄存器的 数据出栈)。其后,处理电路被触发来在点525处在安全域中执行针对该另外的异常的异常 处理代码。其后,优先等级10的安全异常然后能够作为尾链化异常被处理。
[0092] 图10示意性地图示了依照一个实施例能够在处理占先异常时使用的分解技术。 不像参考图9A和9B所讨论的较早示例,在图10的示例中假定了到发生占先异常的时刻, 已经发生了与当前异常相关联的任何状态保存,并且处理电路已被触发来执行所必要的异 常处理例程。因此,在该点处,然后将需要中断当前异常处理例程的处理以便允许占先异常 被取得。
[0093] 如图10所示,在这样的场景中,占先异常的各种层次能够通过改变什么被视为后 台处理来分解。特别地,如由转变550、560所示,这些能够被分解回为简单情况565,并且 因此当取得第一异常时,后台处理是安全处理Si,以及最终当第一异常完成时,所返回到的 后台处理再次是Si。对于第二异常,在取得占先异常的时刻,后台处理的视图像由虚线圆 555示意性地图示的那样被改变,使得后台处理被认为是非安全处理N 2,并且因此异常控制 电路将占先异常视为简单情况570。因此,出于决定在取得异常S3时需要什么状态保存和 /或恢复的目的,异常控制电路将后台处理视为非安全处理N 2。
[0094] 如图11所示,在一个实施例中,为了让异常控制电路能够确定在异常返回时要从 哪一个堆栈恢复寄存器状态,以及处理电路应该返回到哪一个域,链路寄存器590可以被 设置为特殊的EXC_RETURN值而不是返回地址。这个EXC_RETURN值可以包括向处理设备指 示在取得异常之前处理电路在后台处理正被执行时所处于的域的安全性级别的安全性位。 要返回到的实际程序计数器位置连同另一个寄存器状态一起被存储在这个域的堆栈上。在 这种情况下,分支到EXC_RETURN值指示返回地址是在该堆栈上并且这是哪一个堆栈。
[0095] 在一个实施例中,链路寄存器590不需要保持EXC_RETURN值长达异常处理例程正 被执行的整个时间,并且替代地它可以在开始被设置为这个值,以及然后在之后不久移动 到堆栈。当异常完成时,软件分支到由EXC_RETURN值所指示的地址,CPU将此定点为特殊 事件,因为它不是有效的指令地址。
[0096] 如果取得占先异常,则用于当前异常的EXC_RETURN值可以在针对新的占先异常 在链路寄存器中设置新的EXC_RETURN值之前被存储在有关堆栈上(依照较早地讨论的过 程)(其中设置的安全性位S适当地注意其处理正被中断的当前异常的域)。
[0097] 图12是图示了依照一个实施例在接收到异常时执行的压栈操作的流程图。在步 骤600处,确定是否已接收到异常,并且如果是这样的话,则过程进行到步骤605,其中确定 处理电路是否当前正在执行后台处理,以及因此这种异常是否将是来自该后台处理的初始 异常。如果确定了这个异常是来自后台处理的初始异常,则过程进行到步骤610,其中确定 在取得异常时是否将需要安全到非安全转变(即,后台处理是否是在安全域中,并且将需 要在非安全域中执行所需要的异常处理例程)。如果情况是这样的,则在步骤615处,调用 和被调用寄存器两者都将使它们的数据通过异常控制电路28保存到安全堆栈。如果不是, 则仅调用寄存器使它们的数据在步骤620处通过异常控制电路压栈,这种数据被保存到哪 一个堆栈由后台处理正在其中执行的域来确定。过程然后返回到步骤600。
[0098] 如果在步骤605处确定了在步骤600处接收到的异常不是来自后台处理的初始异 常,则过程进行到步骤625,其中确定在步骤600处接收到的这个新的异常是否是比当前正 被处理的现有异常更高的优先级。如果不是,则新的异常将被视为尾链化异常,并且在步骤 630处将确定当前异常是否已结束。一旦当前异常已结束,然后就在步骤635处确定S位 595是否在EXC_RETURN值内被设置。如果其没有被设置,则过程进行到步骤640,其中不执 行另外的压栈,并且过程然后返回到步骤600。
[0099] 然而,如果S位被设置,指示处理电路在来自后台处理的初始异常被取得的时刻 正在安全域中操作,则在步骤645处确定新的异常是否需要安全到非安全转变以便让所需 要的异常处理例程被执行。如果不是,则再次在步骤640处不执行另外的压栈并且过程返 回到步骤600。然而,如果需要安全到非安全转变,则过程进行到步骤650,其中在过程然后 返回到步骤600之前,在被调用寄存器内的数据同样被压栈在安全堆栈内。
[0100] 如果在步骤625处确定了新的异常的确具有比当前异常更高的优先级,则新的异 常将被视为占先异常。在步骤655处,然后将确定是否仍然针对当前异常执行压栈。如果 是,则在步骤660处,压栈行为取决于新的异常而被修改,如参考图9A和9B预先所讨论的 那样。其后,过程然后返回到步骤600。
[0101] 如果在步骤655处,确定了对于当前异常仍然不在执行压栈,并且替代地处理电 路已开始执行针对该当前异常的有关异常处理例程,则过程进行到步骤665,其中当前异常 被视为后台处理,并且过程然后返回到步骤610。因此,在步骤665处,执行参考图10较早 地讨论的分解技术。
[0102] 图13是图示了依照一个实施例在完成异常时执行的出栈操作的流程图。在步骤 700处,确定异常是否已完成,并且如果是这样的话,则过程进行步骤705,其中确定后台处 理是否是在安全域中。如较早地提到的那样,这能够参考存储在EXC_RETURN值内的S位 595来确定。如果从其返回的异常是占先异常,则像较早地讨论的那样,后台处理将被认为 是被占先异常中断的异常处理例程。
[0103] 如果后台处理是在安全域中,则在步骤710处,确定作为当前异常的完成的结果 非安全到安全转变是否是需要的。如果是,则在步骤715处被调用寄存器的内容被出栈,随 后过程进行到步骤720。如果在步骤710处确定了非安全到安全转变是不需要的,则过程直 接地进行到步骤720。
[0104] 在步骤720处,确定作为异常完成的结果返回到后台处理是否是需要的,并且如 果不是,则过程返回到步骤700以等待下一个异常完成。然而,如果在步骤720处确定了返 回到后台处理是需要的,则过程进行到步骤725,其中在过程返回到步骤700之前,调用寄 存器的内容被出栈。
[0105] 上面描述的实施例的技术实现了在响应于异常而执行状态保存时安全性与性能 之间的平衡的改进,其中异常控制电路的硬件机制在无需通过异常处理程序进行代理的情 况下实现了安全异常的有效处理。
[0106] 本申请的主题与在共同转让的共同待决的美国申请号13/368, 419和英国专利申 请号1217531. 1中所讨论的主题有关,并且这两个文档的全部内容从而通过引用并入。
[0107] 尽管已经在本文中对特定实施例进行了描述,但是将了解的是,本发明不限于此, 并且可以在本发明的范围内对其做出许多修改和添加。例如,在不背离本发明的范围的情 况下,能够用独立权利要求的特征做出以下从属权利要求的特征的各种组合。
【权利要求】
1. 一种数据处理设备,其包括: 被配置成响应于程序代码而执行数据处理操作的处理电路,所述处理电路包括用于控 制异常处理的异常控制电路; 被配置成存储数据的多个寄存器,所述寄存器包括寄存器的第一子集和寄存器的第二 子集;以及 被配置成存储数据的数据存储装置,所述数据存储装置包括包括安全区和次安全区在 内的多个区,其中,安全区用于存储可由处理电路当在安全域中操作时访问并且不可由处 理电路当在次安全域中操作时访问的数据;其中: 响应于来自由处理电路所执行的后台处理的初始异常,异常控制电路被配置成在触发 处理电路执行与异常相对应的异常处理例程之前执行对来自寄存器的第一子集的数据的 状态保存,其中,异常处理例程负责执行对来自寄存器的第二子集的数据的状态保存;并且 响应于引起从安全域到次安全域的转变的第一异常,在后台处理由处理电路在安全域 中执行的情况下,异常控制电路被配置成在触发处理电路在次安全域中执行异常处理例程 之前执行额外的对来自寄存器的第二子集的数据的状态保存。
2. 根据权利要求1所述的数据处理设备,其中,响应于所述第一异常,异常控制电路被 配置成在触发处理电路执行异常处理例程之前清除寄存器的第二子集。
3. 根据权利要求2所述的数据处理设备,其中,响应于所述第一异常,数据处理设备被 配置成在异常控制电路触发处理电路执行异常处理例程之前确保寄存器的第一子集不包 含安全数据。
4. 根据任何前述权利要求所述的数据处理设备,其中,如果异常控制电路已在触发处 理电路执行异常处理例程之前执行了额外的状态保存,则异常处理例程不执行寄存器的第 二子集的状态保存。
5. 根据权利要求1至3中任一项所述的数据处理设备,其中,如果异常控制电路已在触 发处理电路执行异常处理例程之前执行了额外的状态保存,则异常处理例程同样执行寄存 器的第二子集的状态保存。
6. 根据任何前述权利要求所述的数据处理设备,其中,所述第一异常包括在后台处理 期间发生的初始异常。
7. 根据权利要求1至5中任一项所述的数据处理设备,其中,所述第一异常包括在初始 异常已被处理之后并且在返回到在初始异常之前正被执行的后台处理之前所处理的尾链 化异常。
8. 根据任何前述权利要求所述的数据处理设备,其中,响应于在所述初始异常已被处 理并且在处理电路已返回到在初始异常之前正被执行的所述后台处理之前为待决的另外 的异常,异常控制电路被配置成在使处理电路返回到后台处理之前将另外的异常的处理作 为尾链化异常控制。
9. 根据任何前述权利要求所述的数据处理设备,其中: 所述异常控制电路被配置成,响应于比正在被执行的异常处理例程所对应的当前异常 更低的优先级的新的异常,在使处理电路返回到后台处理之前将新的异常的处理作为尾链 化异常控制; 异常控制电路被配置成在控制新的异常的处理时不再执行状态保存操作,除非所述当 前异常在所述安全域中被执行,所述新的异常指示切换到所述次安全域,并且所述后台处 理在所述安全域中被执行,在这种情况下,所述异常控制电路被配置成,在完成针对所述当 前异常的异常处理例程之后,执行所述额外的对来自寄存器的所述第二子集的数据的状态 保存,并且确保寄存器的所述第二子集在触发处理电路执行与新的异常相对应的异常处理 例程之前被清除。
10. 根据任何前述权利要求所述的数据处理设备,其中: 所述异常控制电路被配置成,响应于比正在被执行的异常处理例程所对应的当前异常 具有更低的优先级的新的异常,在使处理电路返回到后台处理之前将新的异常的处理作为 尾链化异常控制; 异常控制电路被配置成在控制新的异常的处理时不执行状态恢复操作,除非所述当前 异常在所述次安全域中被执行,所述新的异常指示切换到所述安全域,并且所述后台处理 在所述安全域中被执行,在这种情况下,所述异常控制电路被配置成,在完成针对所述当前 异常的异常处理例程之后,在触发处理电路执行与新的异常相对应的异常处理例程之前执 行数据到寄存器的所述第二子集中的状态恢复操作。
11. 根据任何前述权利要求所述的数据处理设备,其中,如果当执行额外的寄存器的第 二子集的状态保存时发生比所述第一异常具有更高优先级的占先异常,并且该占先异常不 需要从安全域到次安全域的转变,则异常控制电路被配置成在触发处理电路处理占先异常 的异常处理例程之前取消额外的状态保存。
12. 根据任何前述权利要求所述的数据处理设备,其中,如果当前异常未引起从安全域 到次安全域的转变,并且如果在与当前异常相关联的异常处理例程的处理开始之前发生比 当前异常具有更高优先级以及需要从安全域到次安全域的转变的占先异常,则异常控制电 路被配置成在触发处理电路处理占先异常的异常处理例程之前额外地执行额外的对来自 寄存器的第二子集的数据的状态保存。
13. 根据任何前述权利要求所述的数据处理设备,其中,如果在异常控制电路已触发处 理电路执行与当前异常相对应的异常处理例程之后、但是在该异常处理例程已完成之前发 生占先异常,则异常控制电路被配置成在触发处理电路执行占先异常的异常处理例程之前 确定是需要对寄存器的所述第一子集进行状态保存还是寄存器的所述第一和第二子集均 进行状态保存时将当前异常视为所述后台处理。
14. 根据任何前述权利要求所述的数据处理设备,其中,数据存储装置包括包括在安全 区中的安全堆栈和在次安全区中的次安全堆栈在内的多个堆栈。
15. 根据权利要求14所述的数据处理设备,其中,在对来自寄存器的第一子集的数据 的状态保存和额外的对来自寄存器的第二子集的数据的状态保存中,异常控制电路被配置 成将数据保存到与处理电路在执行所述后台处理时正在操作的域的安全性相对应的安全 堆栈和次安全堆栈中的一个。
16. 根据任何前述权利要求所述的数据处理设备,进一步包括安全配置存储位置以用 于存储指示所述多个寄存器中的哪些可用于通过当前执行代码存储安全数据的安全配置 值,其中,响应于引起从安全域到次安全域的转变的异常,异常控制电路被配置成将由所述 安全配置值所指示的寄存器中的一个或多个包括在寄存器的所述第二子集内。
17. 根据任何前述权利要求所述的数据处理设备,进一步包括用于存储异常返回值的 存储位置,所述处理电路被配置成将域值设置在所述异常返回值内以指示所述数据处理设 备在从所述后台处理取得初始异常后正在里面操作的域,所述异常控制电路依靠所述域值 来确定所述寄存器中的哪些应该经受状态保存或状态恢复操作。
18. -种数据处理设备,其包括: 用于响应于程序代码而执行数据处理操作的数据处理电路; 多个寄存器;以及 用于存储数据的数据存储装置,所述数据存储装置包括每个区都具有安全级别的多个 区,并包括用于存储所述数据处理电路在所述安全域中操作时可访问的而在次安全域中操 作时不可访问的敏感数据的至少一个安全区和用于存储次安全数据的次安全区; 所述数据存储装置包括至少两个堆栈,在所述安全区中的安全堆栈和在所述次安全区 中的次安全堆栈;其中 所述数据处理电路包括异常处理电路,所述异常处理电路被配置成在所述数据处理电 路正在所述安全域中执行并且所述异常指示切换到次安全域中执行程序代码以清除所述 寄存器的寄存器集合时对异常的接收做出响应,在所述寄存器集合内的寄存器取决于执行 的所述域的安全级别和将发生所述异常的所述域。
19. 根据权利要求18所述的数据处理设备,其中,所述数据处理电路被进一步配置成 在清除所述寄存器集合之前,将存储在所述寄存器集合中的状态保存到所述数据处理电路 正在里面执行的域的所述堆栈。
20. 根据权利要求18所述的数据处理设备,其中,所述数据处理设备包括安全配置存 储位置以用于存储指示所述多个寄存器中的哪些可用于由当前执行代码用于存储安全状 态的值,所述数据处理电路被配置成依靠由所述安全配置值所指示的所述多个寄存器以及 执行的域的安全级别和将发生所述异常的域来确定哪些寄存器是在寄存器集合内。
21. -种在数据处理设备上处理数据的方法,所述数据处理设备包括:用于响应于程 序代码而执行数据处理操作的处理电路,所述处理电路包括用于控制异常处理的异常控制 电路;用于存储数据的多个寄存器,所述寄存器包括寄存器的第一子集合和寄存器的第二 子集;以及用于存储数据的数据存储装置,所述数据存储装置包括包括安全区和次安全区 在内的多个区,其中,安全区用于存储可由处理电路当在安全域中操作时访问并且不可由 处理电路在次安全域中操作时访问的数据,所述方法包括: 响应于来自由处理电路所执行的后台处理的初始异常,采用异常控制电路来在触发处 理电路执行与异常相对应的异常处理例程之前执行对来自寄存器的第一子集的数据的状 态保存,其中,异常处理例程负责执行对来自寄存器的第二子集的数据的状态保存;并且 响应于引起从安全域到次安全域的转变的第一异常,在后台处理由处理电路在安全域 中执行的情况下,采用异常控制电路来在触发处理电路在次安全域中执行异常处理例程之 前执行额外的对来自寄存器的第二子集的数据的状态保存。
22. -种数据处理设备,其包括: 用于响应于程序代码而执行数据处理操作的处理装置,所述处理装置包括用于控制异 常处理的异常控制装置; 用于存储数据的多个寄存器装置,包括寄存器装置的第一子集和寄存器装置的第二子 集;以及 用于存储数据的数据存储装置,包括包括安全区和次安全区在内的多个区,其中,安全 区用于存储可由处理装置在安全域中操作时访问并且不可由处理装置在次安全域中操作 时访问的数据;其中: 响应于来自由处理装置所执行的后台处理的初始异常,异常控制装置在触发处理装置 执行与异常相对应的异常处理例程之前执行对来自寄存器装置的第一子集的数据的状态 保存,其中,异常处理例程负责执行对来自寄存器装置的第二子集的数据的状态保存;并且 响应于引起从安全域到次安全域的转变的第一异常,在后台处理由处理装置在安全域 中执行的情况下,异常控制装置在触发处理装置在次安全域中执行异常处理例程之前执行 额外的对来自寄存器装置的第二子集的数据的状态保存。
【文档编号】G06F21/52GK104115155SQ201380008455
【公开日】2014年10月22日 申请日期:2013年1月17日 优先权日:2012年2月8日
【发明者】托马斯·克里斯托弗·乔洛卡特, 理查德·罗伊·格里森思怀特 申请人:Arm有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1