专利名称:处理异常事件的装置和方法
技术领域:
本发明涉及数据处理领域。更具体地,本发明涉及用于处理异常事件的装置和方法。
背景技术:
当数据处理正进行时,可能发生异常事件,从而指示应中断数据处理以使异常处理例程得以执行。举例而言,异常事件可指示处理结果不明确;处理资源已经溢出,或者已自外部设备接收到异常信号。可以处理多个异常状态中的异常事件。每个异常状态可具有不同的优先级别和与其相关联的不同资源。
在异常状态中对异常处理例程进行处理时,向每个异常状态提供其自身的堆栈数据储存器以储存临时变量可为有用的。堆栈数据储存器通常储存在存储器中,并且,为先进先出(first-in-first-out;FIFO)数据结构。堆栈数据储存器具有向其分配的预定量的存储器空间。如果堆栈上所储存的数据过多,则堆栈可能超过其所分配的存储器空间。堆栈可能超出页边界,并且,可能不具有在存储器中访问下ー页的访问权,因此触发了存储器中止。如果处理器试图将大于堆栈内余留空间的变量储存于堆栈上,则还可能导致错误。这种类型的错误称为堆栈溢出。通常而言,堆栈溢出是与堆栈过度使用有关的任何错误,所述错误防止将数据值储存于所述堆栈上。通常而言,当发生异常事件后,异常处理例程所执行的首要任务的ー个是将ー些变量压入堆栈上。因此,重要的是,堆栈容量在引入异常时对异常处理例程是可用的,以确保异常处理例程可成功地开始。如果堆栈溢出,则该溢出可能妨碍继续正常执行该异常处理例程,因为堆栈溢出自身可触发导致另ー异常处理例程的异常事件来试图将变量压入堆栈上,进而导致另ー堆栈溢出异常事件。此举可导致异常事件的无尽循环回路,其中每个异常事件均试图将变量加载到堆栈上并且,每个异常事件均触发由堆栈溢出所致的进ー步异常事件,并且,由于此递归异常的进入,这可使系统发生崩溃。本技术试图降低这种崩溃的可能性。
发明内容
从ー个方面来看,本发明提供数据处理装置,其包括处理电路,所述处理电路被配置为处理数据,其中,所述处理电路具有多个异常状态,所述异常状态包括基本级别异常状态及至少ー个进ー步的异常状态;至少ー个异常返回寄存器,所述异常返回寄存器用于储存异常返回数据以控制处理电路在处理异常事件后返回,所述至少ー个进一歩级别异常状态各具有相应的异常返回寄存器,所述异常返回寄存器在处于相应的进一歩级别异常状态中时由处理电路专用;基本级别堆栈指针寄存器,所述基本级别堆栈指针用于储存基本级别堆栈指针,以便在所述处理电路处于所述异常状态中任何ー者时使用,所述基本级别堆栈指针指示基本级别堆栈数据储存器在存储器中的位置;
至少一个进一步级别堆栈指针寄存器,进一步堆栈指针寄存器用于储存至少一个进一步级别堆栈指针,每个进一步的堆栈指针仅供所述处理电路处于对应的进一步级别异常状态中时使用,并且,指示对应的进一步级别堆栈数据储存器在所述存储器中所处的位置;以及堆栈指针选择电路,所述堆栈指针选择电路被配置为选择当前堆栈指针,并且,控制所述处理电路在处理数据时使用由所述当前堆栈指针所指示的当前堆栈数据储存器;其中 当所述处理电路处于所述基本级别异常状态中时,所述堆栈指针选择电路被配置为将所述基本级别堆栈指针选作所述当前堆栈指针;并且,当所述处理电路处于所述至少一个进一步级别状态中的一者时,所述堆栈指针选择电路被配置为将所述基本级别堆栈指针及对应于当前进一步级别异常状态的进一步级别堆栈指针中的一者选作所述当前堆栈指针,所述处理电路继续使用对应于所述当前进一 步级别异常状态的异常返回寄存器,而不论所述当前堆栈指针是所述基本级别堆栈指针还是所述进一步级别堆栈指针。本文提供一种装置,其包括具有多个异常状态的处理电路。所述异常状态包括基本级别异常状态及至少一个进一步级别异常状态。在一个实施例中,基本级别异常状态用于处理使用者应用,而异常事件导致异常处理例程在进一步级别异常状态中的目标状态下受到处理(尽管在可替换实施例中,异常事件也可针对于基本级别异常状态)。进一步级别异常状态至少具有相应的异常返回寄存器,以用于储存异常返回数据,以在处理完异常事件后控制返回到先前程序(如果基本级别异常状态用于处理异常处理例程,则基本级别异常状态也可具有相应的异常返回寄存器)。该装置还具有寄存器,该寄存器用于储存指示多堆栈数据储存器在存储器中所处的位置的堆栈指针以便在处理异常事件时使用的处理电路使用。当处理电路处于基本级别异常状态中时,由基本级别堆栈指针所指示的基本级别的堆栈数据储存器用以储存临时变量。通过提供可为处理电路所访问的两个堆栈数据储存器来降低导致递归异常的进入的堆栈溢出风险(及由此发生的异常事件未得到正确处理的风险)。当在任何进一步级别的异常状态中进行处理时,一个堆栈数据储存器可用于引入异常后立即进行少量处理,而另一个堆栈数据储存器用于在异常状态中进行更通常的处理。各进一步级别异常状态可访问基本级别堆栈指针及为相应的进一步级别异常状态所专用的相应的进一步级别堆栈指针两者。在引入异常后立即进行的少量处理期间,将基本级别堆栈指针的内容(与通用寄存器的内容一起)保存于存储器中,并且,在基本级别堆栈指针内置放有指向适合于更通用处理的堆栈的新的值。适合于在所述异常状态下进行更通用的处理的此堆栈,称为在所述异常状态下使用的基本级别的堆栈数据储存器。提供选择电路以在基本级别堆栈指针与进一步级别堆栈指针的间进行选择,并且,控制处理电路使用当前选择的堆栈指针访问存储器内堆栈数据储存器中的一者,其中,所述基本级别堆栈指针指示可在所述异常状态下使用的基本级别堆栈数据储存器的位置,而所述进一步级别堆栈指针在处理电路处于进一步级别异常状态中的一者时指示进一步级别堆栈数据储存器的位置。由于各进一步级别堆栈指针为特定进一步级别异常状态所专用,因此,每个进一步级别堆栈指针的使用频率相对较低,并且,储存于进一步级别堆栈数据储存器上的变量将会极少。此状况意味着发生堆栈溢出的风险降低,并且,在相应的进一歩级别异常状态下对异常事件进行处理时,进ー步级别堆栈数据储存器将可用于储存变量的可能性更高。在另ー方面,基本级别堆栈指针为用于在任何异常状态下处理的共享堆栈指针。举例而言,当异常处理例程的安全启动已经发生或不再为关键时,基本级别堆栈指针可用以指向可在异常状态下使用的基本级别的堆栈数据储存器,以便保留专用进一步级别堆栈数据储存器的资源。通过在任何可能的情况下使用基本级别堆栈数据储存器,进ー步级别堆栈数据储存器中的一者发生溢出的可能性显著降低。尽管可能已经通过在每个进一歩级别异常状态下提供两个专用堆栈指针来达成了对堆栈溢出的预防,然而本技术认识到由于各堆栈指针的使用频率将较低,因此,此办法将是低效率的,并且,造成硬件浪费。可通过以下以更有效方式来达成对堆栈溢出的预防提供对应于各异常状态的堆栈指针,并且,允许异常状态间共享基本级别堆栈指针,使得每个进一歩级别异常状态可访问其自身的基本级别堆栈数据储存器或进ー步级别堆栈数据储存器。因此,每个进ー步级别异常状态仍可访问两个堆栈数据储存器,以便提供对堆栈溢出的预防,但对每个异常状态仅提供一个堆栈指针。因此可存在两个用于各异常级别的堆栈储存器一一个在异常登录后立即使用,而另ー个用于更通常的处理(并且,可允许其溢出而不存在递归异常登录的风险)。 可将异常返回寄存器和堆栈指针寄存器共同视为经提供以储存上下文数据以供处理异常事件时使用的异常上下文寄存器。异常返回寄存器以不同方式组合到堆栈指针寄存器中,因为与其中提供有可在异常状态中的任何一者中使用的基本级别堆栈指针寄存器的堆栈指针寄存器相反,每个异常返回寄存器由特定异常状态专用。堆栈指针选择电路可响应于与目标进一歩级别异常状态相关的异常事件,来将对应于目标进一歩级别异常状态的进一步级别堆栈指针选作当前堆栈指针。因此,在开始处理异常事件进行时,当前堆栈数据储存器将变为对应于目标进一歩级别异常状态的专用进一步级别数据储存器。专用进一步级别堆栈数据储存器发生堆栈溢出的风险低于在所述异常级别下使用的基本级别的堆栈数据储存器发生溢出的风险。因此,在异常进入时切换到目标进ー步级别堆栈数据储存器可降低异常事件进入未正确处理的风险。一旦进入,则可往回切換来使用由基本级别堆栈指针内的新的值所指的堆栈。处理电路可响应于异常事件而在目标进一歩级别异常状态中处理异常处理例程,并且,堆栈指针选择电路可被配置为在处理电路对异常处理例程的初始部分已经完成后,将当前堆栈指针自对应于目标进一歩级别异常状态的进一步级别堆栈指针切换成基本级别堆栈指针。在对异常处理例程的初始部分已经完成后,则这指示异常处理已成功开始,由此无需再使用由进ー步级别堆栈指针所指示的进ー步级别堆栈数据储存器。如基本级别堆栈指针所指示的一般,为避免过多数据压入进ー步级别堆栈数据储存器上,当前堆栈指针可切換回基本级别堆栈指针,并且,处理可经由使用在异常状态下使用的基本级别的堆栈数据储存器而继续进行。此举使得在进入到处在相同的进ー步级别异常状态中的另ー异常事件时,进ー步级别堆栈发生溢出的机率降低。可使用指示异常处理例程的初始部分的结束的各种技木。举例而言,可提供计数器以用于计算自异常处理例程开始后所经过的处理周期的数目,或者自异常处理例程开始后所执行的指令的数目,并且,初始部分可在计数器达到预定临界值时结束。
然而,指示异常处理例程的初始部分的结束的有用方式为在异常处理例程内提供指令,该指令用于控制堆栈指针选择电路将当前堆栈指针自对应于目标进一步级别异常状态的进一步级别堆栈指针切换成基本级别堆栈指针。因此,代表异常处理例程的软件自身可定义当前堆栈指针切换成基本级别堆栈指针所达到的点位。由于一些异常处理例程可比其他异常处理例程更苛求安全性,因此,提供此指令允许异常处理例程的程序员根据具体情况决定安全的进一步级别堆栈指针在切换成基本级别堆栈指针的前应使用多长时间。该装置可包括堆栈指针选择寄存器,其被配置为储存指示当前堆栈指针为基本级别堆栈指针还是对应于当前进一步级别异常状态的进一步级别堆栈指针的堆栈指针选择值。所述装置的其他部分则可决定通过读取堆栈指针选择寄存器内储存的值,当前正在使用哪个堆栈指针。除了指示基本级别堆栈指针或进一步级别堆栈指针中何者当前有效的外,当处理电路处于进一步级别异常状态中的一者时,堆栈指针选择寄存器也可控制堆栈指针选择电路的操作。堆栈指针选择电路可被配置为取决于堆栈指针选择寄存器内所储存的堆栈指针选择值来选择当前堆栈指针。因此,修改堆栈指针选择寄存器内所储存的值改变了存储器 中堆栈数据储存器中的何者为处理电路所使用。堆栈指针选择电路可被配置使得如果处理电路处于进一步级别异常状态中的一者,则在堆栈指针选择值具有第一值时,将基本级别堆栈指针选作当前堆栈指针,而在堆栈指针选择值具有第二值时,将对应于当前进一步级别异常状态的进一步级别堆栈指针选作当前堆栈指针。举例而言,堆栈指针选择值可为一位值,其中第一值(例如0或I)控制堆栈指针选择电路将基本级别堆栈指针选择为当前堆栈指针,而第二值(除0与I以外的其他值)控制堆栈指针选择电路将对应于当前异常状态的进一步的堆栈指针选作当前堆栈指针。处理电路可响应于堆栈指针选择指令以将经更新的堆栈指针选择值写入堆栈指针选择寄存器。这允许程序或异常处理例程的程序员控制何时使用哪个堆栈。通过执行堆栈指针选择指令,将代表期望堆栈指针的更新堆栈指针选择值写入堆栈指针选择寄存器, 并且,堆栈指针选择电路随后将期望堆栈指针选作当前堆栈指针并控制处理电路使用由更新当前堆栈指针指示的堆栈数据储存器。该装置可包括异常控制器,其响应于堆栈指针选择寄存器内储存的堆栈指针选择值来控制应选择对应于特定异常事件的多个不同异常处理例程中的何者用于处理电路执行。堆栈指针选择寄存器指示处理器的当前状态(即,正在使用共享的基本级别的堆栈指针或专用的进一步级别堆栈指针),由此与进一步级别堆栈指针正在使用时相比,当用于异常状态的基本级别堆栈数据储存器正在使用时,可选择不同的异常处理例程。举例而言,当多个相应的异常处理例程包括用于处理至少一个进一步堆栈数据储存器的堆栈溢出的堆栈溢出处理例程时,则可能有用的是取决于堆栈指针选择值而选取相应的异常处理例程中的一者。尽管本技术降低了进一步级别异常堆栈数据储存器溢出的风险,但仍存在较小的堆栈溢出可能性(例如由于软件内错误所致),并且,可能需要提供堆栈溢出处理例程来解决此罕见情况。当异常事件针对与当前进一步级别异常状态相同的目标进一步级别异常状态,并且,堆栈指针选择值指示进一步级别堆栈指针为当前堆栈指针时,则可指示与当前级别异常状态相关的进一步级别堆栈存在发生堆栈溢出的风险,即,递归异常进入。的所以存在发生堆栈溢出的风险是因为指示进ー步级别堆栈指针为当前堆栈指针的堆栈指针选择值表明异常事件在先前执行的异常处理例程达到使用基本级别堆栈数据储存器的点位的前已发出,并且,由于新的异常事件所针对的异常状态与先前状态相同,故发生新的异常事件的可能起因是进ー步级别堆栈数据储存器的溢出。因此,进入正常异常处理例程可触发无尽循环回路,从而由于堆栈已溢出,因而调用了异常但无法执行相应的异常处理例程。为防止此情况,应选择堆栈溢出处理例程。储存堆栈数据储存器的存储器可为不属于处理装置的一部分的外部存储器。在此情形下,装置所处理的堆栈指针指示相应的堆栈数据储存器在外部存储器中所处的位置。或者,数据处理装置自身可包括存储器。存储器可包括一组或多组存储器或ー个或多个独立的存储器设备,从而可包括存储器设备的任何群组,其共同储存基本级别堆栈数据储存器及一个或多个进ー步级别堆栈数据储存器。从另一方面来看,本发明提供数据处理装置,其包括·用于处理数据的处理部件,所述处理部件具有多个异常状态,所述异常状态包括·一基本级别异常状态及至少ー个进ー步级别异常状态;用于储存异常返回数据以控制所述处理部件处理完异常事件后返回的至少ー个异常返回寄存器部件,所述至少ー个进一歩级别异常状态各具有在处于相应的进一步级别异常状态时处理部件所专用的一相应的异常返回寄存器部件;用于储存基本级别堆栈指针以便在所述处理部件在处于所述异常状态中的任何一者时所使用的一基本级别堆栈指针寄存器部件,所述基本级别堆栈指针指示基本级别堆栈数据储存器部件在存储器部件中所处的位置;用于储存至少ー个进ー步级别堆栈指针的至少ー个进ー步级别堆栈指针寄存器部件,每个进一歩级别堆栈指针在所述处理部件处于相应的进一歩级别异常状态中时所专用,并且,指示相应的进一步级别堆栈数据储存器部件在所述存储器部件中所处的位置;以及用于选择当前堆栈指针并用于控制所述处理部件在处理数据时使用由所述当前堆栈指针所指示的一前堆栈数据储存器部件的堆栈指针选择部件;其中当所述处理部件处于所述基本级别异常状态中时,所述堆栈指针选择部件被配置为将所述基本级别堆栈指针选作所述当前堆栈指针;以及当所述处理部件处于所述至少一个进ー步级别状态中的ー者时,所述堆栈指针选择部件被配置为将所述基本级别堆栈指针及对应于当前进ー步级别异常状态的进ー步级别堆栈指针中的ー者选作所述当前堆栈指针,所述处理部件继续使用对应于所述当前进ー步级别异常状态的异常返回寄存器部件,而不论所述当前堆栈指针是所述基本级别堆栈指针还是所述进ー步级别堆栈指针。从另一方面来看,本发明提供ー种数据处理方法,所述方法包括以下步骤在多个异常状态的ー者中处理数据,所述异常状态包括基本级别异常状态及至少ー个进一歩级别异常状态;响应于异常事件,在至少ー个异常返回寄存器内储存异常返回数据以控制自处理完异常事件后返回,所述至少ー个进一歩级别异常状态各具在所述相应的进ー步级别异常状态中进行处理时专用的相应的异常返回寄存器;
储存基本级别堆栈指针以在所述处理步骤处于所述异常状态中的任何一者时使用,所述基本级别堆栈指针指示基本级别堆栈数据储存器在存储器中所处的位置;储存至少一个进一步级别堆栈指针,每个进一步级别堆栈指针系在所述处理步骤处于相应的进一步级别异常状态中时专用,并且,指示相应的进一步级别堆栈数据储存器在所述存储器中所处的位置;以及选择当前堆栈指针并控制所述处理步骤在处理数据时使用由所述当前堆栈指针所指示的当前堆栈数据储存器;其中当所述处理步骤在所述基本级别异常状态中处理数据时,所述选择步骤将所述基本级别堆栈指针选作所述当前堆栈指针;并且,当所述处理步骤在所述至少一个进一步级别异常状态中的一者中处理数据时,所述选择步骤将所述基本级别堆栈指针及对应于当前进一步级别异常状态的进一步级别堆栈指针中的一者选作所述当前堆栈指针,所述处理步骤继续使用对应于所述当前进一步级 别异常状态的异常返回寄存器,而不论所述当前堆栈指针是所述基本级别堆栈指针还是所述进一步级别堆栈指针。从另一方面来看,本发明提供一种数据处理装置,其包括处理电路,其被配置为在包括基本级别异常状态及至少一个进一步级别异常状态的多个异常状态中的一者中处理数据;基本级别堆栈指针寄存器,其用于储存指示基本级别堆栈数据储存器在存储器中所处位置的基本级别堆栈指针;至少一个进一步级别堆栈指针寄存器,其用于储存指示至少一个进一步级别堆栈数据储存器在所述存储器中所处位置的至少一个进一步级别堆栈指针,至少一个进一步级别异常状态各具有相应的进一步级别堆栈指针;以及异常控制器,其响应于与目标进一步级别异常状态相关的异常事件,而触发所述处理电路使用由对应于所述目标进一步级别异常状态的进一步级别堆栈指针所指示的进一步级别堆栈数据储存器,在所述目标进一步级别异常状态中处理异常处理例程;其中,所述处理电路被配置为在处理完所述异常处理例程的初始部分后使用由所述基本级别堆栈指针所指示的所述基本级别堆栈数据储存器在所述目标进一步级别异常状态中处理所述异常处理例程的剩余部分。通过在进入目标进一步级别异常状态后使用进一步级别堆栈指针,使得相应的异常处理例程具备专用并且使用频率不高的堆栈,以确保安全启动异常处理例程。在完成对异常处理例程的初始部分的处理后,随后使用如基本级别堆栈指针所指示的用于异常级别基本级别的堆栈数据储存器,在目标进一步级别异常状态中对异常处理例程的剩余部分进行处理。一旦异常处理例程已安全开始后使用基本级别堆栈指针避免了对专用的进一步级别堆栈数据储存器的过度使用,由此降低了进一步级别堆栈数据储存器发生溢出的可能性。从另一方面来看,本发明提供一种数据处理装置,其包括用于在包括基本级别异常状态及至少一个进一步级别异常状态的多个异常状态中的一者中处理数据的处理部件;用于储存指示基本级别堆栈数据储存器部件在存储器部件中所处位置的基本级别堆栈指针的基本级别堆栈指针寄存器部件;用于储存指示至少ー个进ー步级别堆栈数据储存器部件在所述存储器部件中所处位置的至少ー个进ー步级别堆栈指针的至少ー个进ー步级别堆栈指针寄存器部件,至少ー个进一歩级别异常状态中中的每ー个具有相应的进ー步级别堆栈指针;以及响应于与目标进一歩级别异常状态相关的异常事件而触发所述处理部件使用由对应于所述目标进ー步级别异常状态的进一歩级别堆栈指针所指示的进ー步级别堆栈数据储存器在所述目标进ー步级别异常状态中处理异常处理例程的异常控制部件;其中,所述处理部件处理完所述异常处理例程的初始部分后被配置为使用由所述基本级别堆栈指针所指示的所述基本级别堆栈数据储存器部件,并且,在所述目标进ー步级别异常状态中处理所述异常处理例程的剰余部分。从另一方面来看,本发明提供ー种数据处理方法,包括以下步骤 在包括基本级别异常状态及至少ー个进ー步级别异常状态的多个异常状态中的一者中处理数据;储存指示基本级别堆栈数据储存器在存储器中所处位置的基本级别堆栈指针;储存指示至少ー个进ー步级别堆栈数据储存器在所述存储器内所处位置的至少ー个进一歩级别堆栈指针,其中至少ー个进ー步级别异常状态各具有相应的进一歩级别堆找指针;响应于与目标进一歩级别异常状态相关的异常事件,使用由对应于所述目标进ー步级别异常状态的进一歩级别堆栈指针所指示的进ー步级别堆栈数据储存器在所述目标进ー步级别异常状态中触发对异常处理例程的处理;以及在处理完所述异常处理例程的初始部分后,使用由所述基本级别堆栈指针所指示的所述基本级别堆栈数据储存器,并且,在所述目标进ー步级别异常状态中处理所述异常处理例程的剰余部分。
将參照附图通过示例来描述本技术的实施例,其中图I示意性地示出了具有用于处理异常事件的异常处理资源的数据处理装置;图2示出了所述处理装置的多个异常状态;图3示出了用于从基本级别堆栈指针及至少ー个进ー步级别堆栈指针选择当前堆栈指针的技术;图4示出了堆栈指针选择指令;图5示出了包括堆栈指针选择指令的异常处理例程;图6示出了指示用于访问异常处理例程的各自地址偏移量的异常向量表;图7示出了对异常事件响应的方法;图8示意性地示出了响应于异常事件而在异常状态间的切换;图9示意性地示出了对堆栈溢出处理例程的处理;以及图10示意性地示出了虚拟机实现。
具体实施方式
图I示出了具有异常处理资源的数据处理装置2。数据处理装置2包括处理管道4,其用于在存储器系统8加载的指令的控制下,处理储存在寄存器6或存储器系统8中的数据。处理管道4可包括各种管道阶段,诸如用于自存储器系统8取出指令的取出管道阶段10 ;用于对所取出指令进行译码的译码管道阶段12 ;用于发出待执行指令的发出阶段14(发出阶段14于每处理周期可发出一个指令或多个指令,并且,可按次序或不按次序发出指令);用于执行所发出指令的运行时间16 ;以及用于将处理结果回写入寄存器6的返回阶段
18。处理管道4并不局限于此等阶段并且,可能包括其他阶段,例如,用于对指令中所规定的寄存器区分符进行重新命名的重新命名阶段。装置2包括异常控制器20,其响应于一个或多个异 常事件以控制处理管道4对异常处理例程进行处理。处理管道4具有用于处理异常事件的多个异常状态。各异常状态均具有不同性质。举例而言,在图2所示的示例性实施例中,基本级别异常状态ELO为使用者级别异常状态;第一进一步级别异常状态ELl为操作系统级别异常状态;第二进一步级别异常状态EL2为超管理器级别异常状态,而第三进一步级别异常状态EL3为安全监控级别异常状态。如图2所示,在各异常状态中,可存在多种模式,诸如非安全模式及安全模式。并非所有异常状态均需要在两种模式下可用。举例而言,在第2图中,进一步级别异常状态EL2仅在非安全状态下可用,而进一步级别异常状态EL3仅在安全状态下可用。图2的异常状态图仅为示例性实施例,并且,可能存在其他数目和配置的异常状态。每个异常事件针对于进一步级别异常状态EL1-EL3中的具体一个。举例而言,具体的异常事件可需要在操作系统级别异常状态ELl或超管理器级别异常状态EL2中进行处理,并可针对于适当级别。异常控制器20随后在目标级别异常状态中控制处理管道4处理相应的异常处理例程。异常事件可经优先化以使得针对于当前或较高异常状态的异常事件在处于给定异常状态中时预先制止或中断执行,并且,在目标异常状态中导致执行。在罕见场合下,即在给定异常状态下使用执行而发生针对低异常状态的异常时,可忽视所述异常(如果这样做是安全的),或者预先制止执行并在当前异常级别中导致处理器的执行。针对与当前级别异常状态相同的级别异常状态的异常事件通常不会中断当前程序,但如果异常事件直接由已经使得当前处理停止的问题导致,则可能需要采取中断措施。再次参照图1,装置2包括若干上下文寄存器24,其用于储存可在处理异常事件时使用的异常上下文数据。上下文寄存器24包括如果干异常返回寄存器,其包括异常链路寄存器(exception link registers;ELR) 26 及保存程序状态寄存器(saved process stateregisters ;SPSR) 28。至少所述进一步级别异常状态(即,除基本级别异常状态ELO以外的所有异常状态)具有相应的异常返回寄存器(可将异常链路寄存器26及保存程序状态寄存器28共同视为代表异常返回寄存器)。一旦已经在相应的进一步级别异常状态下完成正在处理的异常处理例程,则每个异常链路寄存器26将储存指示待处理指令的异常返回地址。每个保存程序状态寄存器28储存各个上下文状态数据,诸如中断掩码、标志或执行掩码,以供在相应的进一步级别异常状态中处理异常处理例程时使用。在图I的实施例中,由于预计异常事件将针对于进一步级别异常状态中的一者,因此,基本级别异常状态ELO不具有相应的异常链路寄存器26或保存程序状态寄存器28。然而,在其中异常事件同样可在基本级别异常状态下处理的实施例中,基本级别异常状态ELO亦可具有相应的异常链路寄存器26或保存程序状态寄存器28。
上下文寄存器24还包括堆栈指针寄存器30。异常状态中中的每ー个具有相应的堆栈指针寄存器30,其指示相应的堆栈数据储存器35在存储器系统8中所处的位置。基本级别堆栈指针寄存器30-0识别基本级别堆栈数据储存器35-0、35-0’、35_0〃及35_0〃’在存储器系统8内所处的位置,所述基本级别堆栈指针寄存器30-0可在处理管道4处于异常状态EL0-EL3中任一个时进行访问。相反,进ー步级别堆栈指针寄存器30-1、30-2、30-3识别存储器系统8内相应的进一步级别堆栈数据储存器35-1、35-2、35-3,并且,每个进一歩级别堆栈指针寄存器仅可在处理管道4处于相应的进一歩级别异常状态EL1、EL2、EL3中时使用。本领域技术人员将了解尽管基本级别堆栈数据储存器35-0……35-0"'被称为基本级别堆栈数据储存器,但对处在异常状态下使用的基本级别堆栈数据储存器进行访问以在较低异常状态中执行是不恰当的。提供堆栈指针选择电路40以选择堆栈指针30中的哪ー个当前正在使用。当处理管道4处在基本级别异常状态ELO中时,选择基本级别堆栈指针寄存器30-0中所储存的基本级别的堆栈指针,并且,处理管道4由选择电路40控制以使用基本级别堆栈35-0储存变 量。当处理管道4处于进一歩级别异常状态EL1-EL3中的一个时,堆栈指针选择电路40响应于堆栈指针选择寄存器42中所储存的堆栈指针选择值,以选择基本级别堆栈指针寄存器30-0中所储存的,并且,对应于基本级别的堆栈数据储存器35-0’、35-0〃及35_0〃’中各别储存器的基本级别堆栈指针,或选择堆栈指针寄存器30-1、30-2、30-3中的ー个内所储存的,并对应于处理管道4的当前异常状态的进ー步级别堆栈指针。堆栈指针选择电路40可接收来自异常控制器20的信号,其指示处理管道4的当前异常状态。或者,处理管道4可告知堆栈指针选择电路40其当前异常状态。取决于堆栈指针选择寄存器42中所储存的值及当前异常状态,堆栈指针选择电路40选择当前堆栈指针,随后控制处理管道4使用所述当前堆栈指针以用于访问堆栈数据储存器35中的相应储存器。通过为各进ー步级别异常状态提供对两个不同堆栈(基本级别堆栈35-0’、35_0〃或35-0〃’中的一者,及进ー步级别堆栈35-1、35-2、35-3中的ー个)的访问,进而为各进一步级别异常状态提供安全专用堆栈,以使在所述异常状态中执行的异常处理程序在不发生溢出堆栈的风险的情况下安全地启动,同时各别基本级别的堆栈35-0’、35-0〃或35-0〃’可用于所述异常级别中的通常处理。在可能的情况下,使用基本级别(通常目的)堆栈35-0’、35-0"或35-0",以避免使得专用堆栈过载并在专用堆栈的上腾出空间以用于进入异常处理程序。堆栈指针选择寄存器42可储存具有两个可能值的堆栈指针选择值。当堆栈指针选择值具有第一值(例如,值为0)吋,则堆栈指针选择电路可将基本级别堆栈指针寄存器30-0中所储存的基本级别的堆栈指针选作当前堆栈指针。在另一方面,当堆栈指针选择值具有第二值(例如,值为I)吋,则堆栈指针选择电路40可将与当前进ー步级别异常状态相关的进一步级别堆栈指针选作当前堆栈指针。图3示出了当使用堆栈指针选择值的映射时,堆栈指针选择电路40的操作的示例。在开始处理后,在步骤50处,堆栈指针选择电路40检查处理管道4的当前异常状态。如上文所提及,可能要通过异常控制器20所提供的异常级别信号来进行此检查。如果在步骤50处,决定当前异常状态处于基本级别异常状态ELO,则方法行进行至步骤52,其中堆栈指针选择电路40将基本级别堆栈指针寄存器30-0中所储存的基本级别的堆栈指针选作当前堆栈指针。随后,控制处理管道4以将基本级别堆栈35-0用作当前堆栈数据储存器。在将异常引入异常状态后,SPSel经设置用于选择专用异常堆栈指针。在另一方面,如果在步骤50处,堆栈指针选择电路40决定当前异常状态为进一步级别异常状态ELx中的一个(其中,X为任何大于或等于I的整数),则方法行进行至步骤54,其中堆栈指针选择电路40读取堆栈指针选择寄存器42中所储存的堆栈指针选择值。在此实施例中,如果堆栈指针选择值为0,则方法行进行至步骤56,其中将基本级别堆栈指针选作当前堆栈指针,并控制处理管道4来使用基本级别堆栈35-0。在另一方面,如果在步骤54处,堆栈指针选择值为1,则方法行进行至步骤58,其中将对应于当前进一步级别异常状态ELx的堆栈指针SPx选作当前堆栈指针,并控制处理管道4以将对应于当前异常状态的堆栈数据储存器35-x用作当前堆栈数据储存器。
此后,当处理管道4需要堆栈指针时,堆栈指针选择电路40则将向处理管道4提供当前堆栈指针(以作为对应于当前堆栈指针的堆栈指针值,或者作为对储存当前堆栈指针的堆栈指针寄存器30中的一个的基准)。无论哪个堆栈指针为当前堆栈指针,除非通过异常预先制止,否则对各指令的处理将继续进行。如图3中所示,当处理管道4处于进一步级别异常状态中的一个时,堆栈指针选择寄存器42则将控制哪个堆栈指针应为当前堆栈指针。由处理管道4执行的堆栈指针选择指令可对堆栈指针选择寄存器42内所储存的值进行修改。第4标堆栈指针选择指令的示例性语法。堆栈指针选择指令包括规定堆栈指针选择寄存器42的位置的寄存器区分符SPSel,及规定待写入堆栈指针选择寄存器42的立即值的立即值举例而言,当立即值为0时,则此情况将把堆栈点选择寄存器42设定成控制堆栈指针选择电路40来将基本级别堆栈指针选作当前堆栈指针,而当立即值为I时,则此情况将把堆栈指针选择寄存器42设定成控制堆栈指针选择电路40来将进一步级别堆栈指针中的一者选作当前堆栈指针。当然,值0及值I与基本级别及进一步级别堆栈指针的间的映射可颠倒。堆栈指针选择指令可在立即值未写入寄存器组6的情况下,直接修改堆栈指针选择寄存器42。或者,堆栈指针选择指令可能需要在立即值写入到堆栈指针选择寄存器42的前,将立即值写入寄存器组6。通过提供如图4所示的堆栈指针选择指令,程序员能够将堆栈指针选择指令包括在异常处理例程中,以控制当前堆栈数据储存器自进一步级别堆栈数据储存器35-1、35-2、35-3切换至用于异常级别各别基本级别堆栈数据储存器35-0’、35-0〃或35-0〃’的点。如图5所示,此类异常处理例程包括初始部分与剩余部分,其中在初始部分中,进一步级别堆栈数据储存器35-1、35-2、35-3中的一者用作当前堆栈数据储存器,而在剩余部分中,基本级别堆栈数据储存器35-0用作当前堆栈数据储存器。堆栈指针选择指令在异常处理例程内所处位置决定初始部分与剩余部分的相对大小,并且,可取决于安全处理异常事件所需专用堆栈的程度而按需要变化。异常处理例程的初始部分使用进一步级别堆栈数据储存器,以便提供安全的专用堆栈储存器来启动异常处理例程的处理,而异常处理例程的其余部分使用用于异常级别相关基本级别的堆栈数据储存器,以避免使专用堆栈过载。
堆栈指针选择寄存器42还可用于选择应将多个相应的异常处理程序中的哪ー个用于处理特定异常事件。异常控制器20可包括异常向量表,此表指示用于处理异常级别的各种异常处理例程在存储器系统8中所处的位置。在图6中示出了异常向量表的示例。对于不同类型的异常事件(例如,如从ARM处理器架构同步、正常中断(normalinterrupt; IRQ)、快速中断(fast interrupt;FIQ)或错误异常事件中可得知)而言,多个不同异常处理例程由不同地址偏移量值识别。因而,在通过向异常处理器的基本地址寄存器中储存的基本地址添加相应地址偏移量后所获得的存储器地址处,可访问异常处理例程。针对不同情况可提供不同异常处理器来进行解决(例如,不同系统模式可能需要不同的异常处理例程)。当异常事件针对于与当前级别异常状态相同的级别异常状态时,则可能有用的是提供多个不同种类的异常处理器(包括至少ー个堆栈溢出异常处理器),这种异常处理器的选择取决于发生异常事件时当前堆栈指针是基本级别堆栈指针还是进一歩级别堆栈指针中的一者。此状况被在图6中示出,其中,针对当前堆栈指针为进一歩级别堆栈指针中的一者及当前堆栈指针为基本级别堆栈指针的各自情况,提供不同地址偏移量以识别不同异常处理例程。因此,异常控制器20可响应于堆栈指针选择寄存器42的当前值,以选择应对异 常处理器中何者进行处理。由于并非由先前处理的异常处理例程所导致的,并且,针对于与当前异常状态级别相同的异常事件可能并未中断先前处理的异常处理例程,因此,这可能是有用的,因为当新的异常事件针对于与当前异常状态相同的异常状态时,这指示在执行先前处理的异常处理例程期间已经发生问题。另外,如果堆栈指针选择寄存器指示当前堆栈指针为进一歩级别堆栈指针中的ー个,则这指示在当前堆栈指针切换成基本级别堆栈指针的前,在先前处理的异常处理例程的初始部分期间发生问题。因此,对于所述异常事件的原因可能为当前使用的进ー步级别堆栈35-1、35-2或35-3发生溢出。如果随后加载了正常异常处理器,则此处理器可能试图将变量压入已溢出的堆栈上,并且,这可能触发其自身又希望将变量加载至堆栈上的又ー异常,因此将系统送入递归异常登录。为避免异常事件的这种递归调用,提供堆栈溢出异常处理器以用于解决堆栈溢出的罕见情形,并且,当与目标异常事件相同的异常级别调用异常事件,并且,堆栈指针选择寄存器42指示当前堆栈指针为进一歩级别堆栈指针中的ー个时,调用此异常处理器。因此,此情况可不同于异常状态内的异常(所述异常正在使用基本堆栈指针而无需使用任何寄存器),因为使用寄存器的正常方式将为把紧接着可能导致递归的旧值保存在堆栈上的所述寄存器中。因此,与使处理器在递归异常进入的无尽循环回路中自旋相反,即使堆栈溢出异常处理例程无法修复堆栈,也可获得错误情况的完整诊断信息及对其更干净的处理。图7示出了处理异常事件的方法。最初,在步骤100处,处理管道4在异常状态ELm (其中,m为大于或等于0的整数)的一者中处理数据。因此,管道4在异常状态的任何一者中处理数据。随后,在步骤102处,发生针对于特定进ー步级别异常状态ELn (其中,n为大于或等于I的整数;并且,n亦大于或等于m (如果n小于m,则异常事件将不会中断当前处理))的异常事件。在步骤104处,异常控制器20将处理管道4置放于异常状态ELn中(或者如果n=m,则将处理管道4保持在与的前相同的异常状态中),并将异常返回数据储存在对应于目标异常状态ELn的异常链路寄存器26及保存程序状态寄存器28中。所储存的异常返回数据为用于一旦异常事件的处理完成则使系统能够返回至初始处理的数据。
在步骤106处,异常控制器20决定在发生异常事件时,异常状态ELm是否与目标异常状态ELn相同。如果初始异常状态与目标异常状态不同,则在步骤108处,将堆栈指针选择寄存器42设定为值1,以指示与目标异常状态SPn相关的堆栈指针为当前堆栈指针。在步骤110处,异常控制器20随后选择对应于异常事件的异常处理例程,并控制处理管道4开始执行异常处理例程。处理管道4随后使用与目标异常状态ELn相关的堆栈35-n而继续处理异常处理例程。对异常处理例程的处理一直持续至步骤112,在步骤112处,决定对异常处理例程的初始部分的处理已经完成。用于决定对异常处理例程的初始部分的处理何时完成的方式为提供图4所示的堆栈指针选择指令。或者,可在堆栈指针选择电路40内提供计数器,以计算自从异常处理例程开始后所经历的处理周期或指令的预定数目,并在计数器达到预定值后触发对初始部分的处理的结束。在切换为使用基本级别堆栈指针的 前,基本级别堆栈指针的内容则改成指向用于此异常级别的基本级别堆栈数据储存器。当对异常处理例程的初始部分的处理完成时,则在步骤114处,将堆栈指针选择寄存器42中所储存的堆栈指针选择值设为0,并且,当前堆栈指针因此变成基本级别堆栈指针O。随后将各别基本级别的堆栈数据储存器35-0’、35-0〃或35-0〃’用作当前堆栈来对异常处理例程的剩余部分进行处理。处理随后继续进行,直至异常处理例程在步骤116处结束为止。随后,在步骤118处,自对应于目标异常状态ELn的异常链路寄存器26及保存程序状态寄存器28加载异常返回数据,并且,随后使处理管道4回置放于初始异常状态Elm中。在步骤120处,处理随后在异常状态Elm中继续进行。方法随后结束。如果在步骤106处,初始异常状态ELm与关于异常事件的目标异常状态ELn相同,则在步骤122处决定堆栈指针选择寄存器42中所储存的堆栈指针选择值为I或0(图7示出了其中0指示正使用基本级别堆栈指针,而I指示正使用进一步级别堆栈指针,但很清楚,I与0的意义可颠倒)。如果堆栈指针选择值为0,则处理继续进行至步骤108-120。尽管当m与n相等时,由中断控制器120所选择的具体的异常处理例程可能与当m与n不相等时所选择的异常处理例程不相同(这取决于中断控制器的向量表内的地址偏移量集),然而步骤108-120中所示的堆栈指针处理相同。在另一方面,如果堆栈指针选择值在步骤122处相等,则在步骤124处,异常控制器20选择对应于堆栈溢出处理例程的异常向量,并控制处理管道4执行用于处理堆栈溢出的堆栈溢出处理例程。这是因为堆栈35-n存在发生堆栈溢出的风险。堆栈溢出处理例程至少能够为系统重置做好准备(通过储存一些上下文数据从而防止数据丢失)。在步骤126处,决定堆栈溢出异常是否已经恢复。如果恢复已达成并且,处理可照常继续执行,则方法行进行至步骤108,在步骤108处,以与堆栈指针选择值为0时所经由的方式相同的方式执行正常的异常处理例程。然而,如果恢复尚未达成,则处理随后结束。因此,图7所示的技术使安全专用堆栈能够用于异常处理例程的初始部分,以确保异常处理例程安全地开始。这避免异常处理例程由于共享堆栈发生溢出而无法开始。在对异常处理例程的初始部分的处理完成的后,则使用基本级别堆栈继续处理,以便保留专用安全的堆栈的资源。如果出现本可发生溢出的不可能事件,则可根据已经在堆栈指针选择值指示当前堆栈为进一步级别堆栈中的一个时发出针对于当前异常状态的异常的事实而识别此状况,并且,在此情形下,可执行紧急堆栈溢出处理例程,而不论堆栈实际上是否已经溢出,从而防止堆栈溢出。如果在图7处理期间的任意时刻,发生异常控制器20决定其具有足以中断当前处理的高异常级别的进ー步异常事件,则经由将步骤100中所执行的处理用作先前执行的处理,同时将步骤102中所发生的异常事件用作进ー步异常事件来使图7的方法重新开始。举例而言,如果图7的步骤108与100的间发生针对于与当前异常状态相同的异常状态的异常事件,则这可触发对步骤106及步骤122-126的处理,因为堆栈指针选择值仍将设定为I以用于指示当前堆栈指针为进ー步级别堆栈指针。图8示出了根据图7的方法的用于处理异常事件的实例。举例而言,在图8的步骤I处,使用基本级别堆栈指针SPO在基本级别异常状态ELO中进行处理。在图8的步骤2处,异常控制器20检测到以进一歩级别异常状态EL2为目标的异常事件。系统随后切換至 进ー步级别异常状态EL2,并且,异常返回数据经储存至与异常状态EL2相关的异常返回寄存器26、28 (根据图7的步骤104)。在图8的步骤3处,随后选择堆栈指针寄存器30_2中所储存的堆栈指针SP2,并且,使用其位置由堆栈指针SP2指示的堆栈35-2来处理异常处理例程。在图8的步骤4处,在异常处理例程内会遇到堆栈指针选择指令,由此将当前堆栈指针切换成基本级别堆栈指针寄存器30-0中所储存的基本级别堆栈指针SPO (根据第7图的步骤114)。在图8的步骤5处,异常处理例程使用基本级别堆栈数据储存器35-0来继续执行。在图8的步骤6处,异常处理例程结束,并且,所述处理使用对应于异常状态EL2的异常返回寄存器26、28中所储存的异常返回数据,而返回至基本级别异常状态ELO中的原始处理。在图8的步骤7处,随后在基本级别异常状态ELO中,使用由基本级别堆栈指针SPO所指示的基本级别堆栈35-0来继续处理。图9示出了根据图7的方法在需要堆栈溢出处理例程的情形下处理异常事件吋,对异常状态进行切換的另ー实例。在图9的步骤I处,使用基本级别堆栈指针SPO在基本级别异常状态ELO中进行处理。在图9的步骤2处接收到针对于进ー步级别异常状态ELl的异常事件。根据图7的步骤104,系统切换至进ー步级别异常状态EL1,并且,异常返回数据经储存在与进ー步级别异常状态ELl相关的异常返回寄存器26、28中。异常控制器20随后选择与异常事件相关的异常处理例程,并使用与异常状态ELl相关的堆栈指针寄存器30-1中所储存的进ー步级别堆栈指针SPl来处理所选择的异常处理例程。然而,在完成对异常处理例程的初始部分的处理的前,还发生针对于相同异常状态ELl的另ー异常事件。因此,重新开始图7的方法,并且,在图7的步骤106及122处,决定当前异常状态ELl与目标异常状态ELl相同,及堆栈指针选择寄存器42内所储存的堆栈指针选择值指示当前堆栈指针为进一歩级别堆栈指针SP1。这意味着,在图9的步骤5处(井根据第7图的步骤124),作为万一在图9的步骤4处发生的异常事件指示与当前异常状态相关的堆栈35-1发生溢出时的防护措施来执行堆栈溢出处理例程。堆栈溢出处理例程随后修复堆栈35-1或者至少将系统置放于可中止处理而不丢失过量数据的状态中。如果必要,则在图9的步骤6处(图7的步骤126)提供合适的诊断信息的同时终止处理。在另一方面,如果处理可继续,则使用进ー步级别堆栈指针SPl在图9的步骤7处的进一歩级别异常状态ELl中处理原始异常处理程序。在完成对异常处理例程的初始部分的处理后,随后在图9的步骤8处,当前堆栈指针切换成基本级别的堆栈指针SP0。在异常处理例程的结束,随后在图9的步骤9处,使用自异常返回寄存器26、28所加载的异常返回数据,处理返回至基本级别的异常状态。随后,使用基本级别堆栈指针SPO在基本级别的异常状态中继续处理。图10示出了可以使用的虚拟机实施例。当较早描述的实施例依据用于操作可支持所关心的技术的具体处理硬件的装置及方法而实施本发明时,还可为硬设备提供所谓的虚拟机实现。这种虚拟机实现在主处理器530上执行,而主处理器530执行可支持虚拟机程序510的主操作系统520。通常而言,需要大功率处理器来提供以合理速度执行的虚拟机实现,但此途径可能仅在某些境况下(诸如出于兼容性或重复使用原因,期望执行另一处理器的本地代码时)证明有效。虚拟机程序510向应用程序500提供应用程序编程接口,该应用程序编程接口与将由作为虚拟机程序510模型化设备的实际硬件提供的应用程序编程接口相同。因此,可使用虚拟机程序510,自应用程序500内部执行包括对如上所述的存储器访问进行控制的程序指令,以将其与虚拟机硬件的互动模型化。尽管此处已参照附图详细描述了本发明的阐释性实施例,但是,要理解本发明并 不限于那些精确的实施例,并且,在不脱离所附权利要求所定义的本发明范围的情况下,本领域技术人员可进行各种变更和修改。
权利要求
1.一种数据处理装置,包括 处理电路,所述处理电路被配置为处理数据,所述处理电路具有多个异常状态,所述异常状态包括基本级别异常状态及至少一个进一步级别异常状态; 至少一个异常返回寄存器,所述异常返回寄存器用于储存异常返回数据以控制所述处理电路从处理异常事件返回,所述至少一个进一步级别异常状态各具有相应的异常返回寄存器,在处于相应的进一步级别异常状态中时,所述异常返回寄存器由所述处理电路专用; 基本级别堆栈指针寄存器,所述基本级别堆栈指针寄存器用于储存基本级别堆栈指针以便在所述处理电路处于所述异常状态中的任何一者时使用,所述基本级别堆栈指针指示基本级别堆栈数据储存器在存储器中的位置; 至少一个进一步级别堆栈指针寄存器,所述进一步级别堆栈指针寄存器用于储存至少一个进一步级别堆栈指针,每个进一步级别堆栈指针专用于所述处理电路处于相应的进一步级别异常状态中时,并且,指示相应的进一步级别堆栈数据储存器在所述存储器中的位置;以及 堆栈指针选择电路,所述堆栈指针选择电路被配置为选择当前堆栈指针,并且,被配置为控制所述处理电路在处理数据时使用由所述当前堆栈指针所指示的当前堆栈数据储存器;其中: 当所述处理电路处于所述基本级别异常状态中时,所述堆栈指针选择电路被配置为将所述基本级别堆栈指针选作所述当前堆栈指针;以及 当所述处理电路处于所述至少一个进一步级别状态中的一者时,所述堆栈指针选择电路被配置为将所述基本级别堆栈指针及对应于当前进一步级别异常状态的所述进一步级别堆栈指针中的一者选作所述当前堆栈指针,所述处理电路继续使用对应于所述当前进一步级别异常状态的所述异常返回寄存器,而不论所述当前堆栈指针是所述基本级别堆栈指针还是所述进一步级别堆栈指针。
2.如权利要求I所述的数据处理装置,其中,所述堆栈指针选择电路响应于与目标进一步级别异常状态相关的异常事件,来将对应于所述目标进一步级别异常状态的所述进一步级别堆栈指针选作所述当前堆栈指针。
3.如权利要求2所述的数据处理装置,其中,所述处理电路响应于所述异常事件,而在所述目标进一步级别异常状态中处理异常处理例程;以及 所述堆栈指针选择电路被控制为在所述处理电路已经完成对所述异常处理例程的初始部分的处理之后,将所述当前堆栈指针自对应于所述目标进一步级别异常状态的所述进一步级别堆栈指针切换成所述基本级别堆栈指针。
4.如权利要求3所述的数据处理装置,其中,所述异常处理例程包括指令,所述指令用于控制所述堆栈指针选择电路,以将所述当前堆栈指针自对应于所述目标进一步级别异常状态的所述进一步级别堆栈指针切换成所述基本级别堆栈指针。
5.如前述权利要求中的任一项所述的数据处理装置,包括堆栈指针选择寄存器,所述堆栈指针选择寄存器被配置为储存堆栈指针选择值,所述堆栈指针选择值指示所述当前堆栈指针是所述基本级别堆栈指针还是对应于所述当前进一步级别异常状态的所述进一步级别堆栈指针。
6.如权利要求5所述的数据处理装置,其中,当所述处理电路处于所述至少一个进一步级别异常状态中的一者时,所述堆栈指针选择电路取决于所述堆栈指针选择值而选择所述当前堆栈指针。
7.如权利要求6所述的数据处理装置,其中,当所述处理电路处于所述至少一个进一步级别异常状态中的一者时,所述堆栈指针选择电路被配置为 (i)当所述堆栈指针选择值具有第一值时,将所述基本级别堆栈指针选作所述当前堆栈指针;以及 (ii)当所述堆栈指针选择值具有第二值时,将对应于所述当前进一步级别异常状态的所述进一步级别堆栈指针选作所述当前堆栈指针。
8.如权利要求6和7中的任一项所述的数据处理装置,其中所述处理电路响应于堆栈指针选择指令,而将一更新的堆栈指针选择值写入所述堆栈指针选择寄存器。
9.如权利要求5至8中的任一项所述的数据处理装置,包括异常控制器,所述异常控制器响应于异常事件而控制所述处理电路来处理对应于所述异常事件的异常处理例程,至少一个异常事件具有多个相应的异常处理例程; 其中,一旦发生所述至少一个异常事件,则所述异常控制器选择所述多个相应的异常处理例程中的一者,以用于通过所述处理电路取决于所述堆栈指针选择值来作处理。
10.如权利要求9所述的数据处理装置,其中,所述多个相应的异常处理例程包括堆栈溢出处理例程,所述堆栈溢出处理例程用于处理所述至少一个进一步堆栈数据储存器的堆栈溢出,并且,所述异常控制器被配置为当与所述至少一个异常事件相关的目标进一步级别异常状态与所述处理电路的所述当前进一步级别异常状态相同,并且,所述堆栈指针选择值指示所述进一步级别堆栈指针是所述当前堆栈指针时,一旦发生所述至少一个异常事件,则控制所述处理电路处理所述堆栈溢出处理例程。
11.如前述权利要求中的任一项所述的数据处理装置,还包括所述存储器。
12.—种数据处理装置,包括 用于处理数据的处理部件,所述处理部件具有多个异常状态,所述异常状态包括基本级别异常状态及至少一个进一步级别异常状态; 至少一个异常返回寄存器部件,用于储存异常返回数据以控制所述处理部件从处理异常事件返回,所述至少一个进一步级别异常状态各具有在处于所述相应的进一步级别异常状态时所述处理部件所专用的相应的异常返回寄存器部件; 基本级别堆栈指针寄存器部件,用于储存基本级别堆栈指针以便在所述处理部件处于所述异常状态中的任何一者时使用,所述基本级别堆栈指针指示基本级别堆栈数据储存器部件在存储器部件中所处的位置; 至少一个进一步级别堆栈指针寄存器部件,用于储存至少一个进一步级别堆栈指针,每个进一步级别堆栈指针为在所述处理部件处于相应的进一步级别异常状态中时所专用,并且,指示相应的进一步级别堆栈数据储存器部件在所述存储器部件中所处的位置;以及 堆栈指针选择部件,用于选择当前堆栈指针,并且,用于控制所述处理部件在处理数据时,使用由所述当前堆栈指针所指示的当前堆栈数据储存器部件;其中 当所述处理部件处于所述基本级别异常状态中时,所述堆栈指针选择部件被配置为将所述基本级别堆栈指针选作所述当前堆栈指针;以及当所述处理部件处于所述至少一个进ー步级别状态中的ー者时,所述堆栈指针选择部件被配置为将所述基本级别堆栈指针及对应于当前进ー步级别异常状态的所述进ー步级别堆栈指针中的ー者选作所述当前堆栈指针,所述处理部件继续使用对应于所述当前进ー步级别异常状态的所述异常返回寄存器部件,而不论所述当前堆栈指针是所述基本级别堆栈指针还是所述进ー步级别堆栈指针。
13.一种数据处理的方法,所述方法包括以下步骤 在多个异常状态的ー者中处理数据,所述异常状态包括基本级别异常状态及至少ー个进ー步级别异常状态; 响应于异常事件,在至少ー个异常返回寄存器内储存异常返回数据以控制从处理异常事件返回,所述至少ー个进一歩级别异常状态各具有在所述相应的进ー步级别异常状态中进行处理时专用的相应的异常返回寄存器; 储存基本级别堆栈指针,以在所述处理步骤处于所述异常状态中的任何ー者时使用,所述基本级别堆栈指针指示基本级别堆栈数据储存器在存储器中的位置; 储存至少ー个进ー步级别堆栈指针,每个进ー步级别堆栈指针在所述处理步骤处于相应的进一歩级别异常状态中时专用,并且,指示相应的进一步级别堆栈数据储存器在所述存储器中所处的位置;以及 选择当前堆栈指针并控制所述处理步骤在处理数据时使用由所述当前堆栈指针指示的当前堆栈数据储存器;其中 当所述处理步骤在所述基本级别异常状态中处理数据时,所述选择步骤将所述基本级别堆栈指针选作所述当前堆栈指针;并且, 当所述处理步骤在所述至少ー个进一歩级别异常状态中的一者中处理数据时,所述选择步骤将所述基本级别堆栈指针及对应于当前进ー步级别异常状态的所述进一歩级别堆栈指针中的ー者选作所述当前堆栈指针,所述处理步骤继续使用对应于所述当前进ー步级别异常状态的所述异常返回寄存器,而不论所述当前堆栈指针是所述基本级别堆栈指针还是所述进ー步级别堆栈指针。
14.ー种数据处理装置,包括 处理电路,所述处理电路被配置为在包括基本级别异常状态及至少ー个进ー步级别异常状态的多个异常状态中的一者中处理数据; 基本级别堆栈指针寄存器,用于储存指示基本级别堆栈数据储存器在存储器中所处位置的基本级别堆栈指针; 至少ー个进ー步级别堆栈指针寄存器,用于储存指示至少ー个进ー步级别堆栈数据储存器在所述存储器中的位置的至少ー个进ー步级别堆栈指针,所述至少ー个进一歩级别异常状态各具有相应的进ー步级别堆栈指针;以及 异常控制器,所述异常控制器响应于与目标进一歩级别异常状态相关的异常事件,而触发所述处理电路使用由对应于所述目标进ー步级别异常状态的所述进ー步级别堆栈指针所指示的所述进ー步级别堆栈数据储存器,在所述目标进ー步级别异常状态中处理异常处理例程; 其中,所述处理电路被配置为在处理完所述异常处理例程的初始部分后,使用由所述基本级别堆栈指针所指示的所述基本级别堆栈数据储存器在所述目标进ー步级别异常状态中处理所述异常处理例程的剰余部分。
15.ー种数据处理装置,包括 处理部件,用于在包括基本级别异常状态及至少ー个进ー步级别异常状态的多个异常状态中的一者中处理数据; 基本级别堆栈指针寄存器部件,用于储存指示基本级别堆栈数据储存器部件在存储器部件中所处位置的基本级别堆栈指针; 至少ー个进ー步级别堆栈指针寄存器部件,用于储存指示至少ー个进ー步级别堆栈数据储存器部件在所述存储器部件内的位置的至少ー个进ー步级别堆栈指针,所述至少ー个进ー步级别异常状态各具有相应的进一歩级别堆栈指针;以及 异常控制部件,所述异常控制部件响应于与目标进一歩级别异常状态相关的异常事件,而触发所述处理部件使用由对应于所述目标进一歩级别异常状态的所述进一歩级别堆栈指针所指示的所述进ー步级别堆栈数据储存器,在所述目标进ー步级别异常状态中处理异常处理例程; 其中,所述处理部件被配置为在处理完所述异常处理例程的初始部分后,使用由所述基本级别堆栈指针所指示的所述基本级别堆栈数据储存器部件,在所述目标进ー步级别异常状态中处理所述异常处理例程的剰余部分。
16.一种数据处理的方法,所述方法包括以下步骤 在包括基本级别异常状态及至少ー个进ー步级别异常状态的多个异常状态中的一者中处理数据; 储存指示基本级别堆栈数据储存器在存储器中所处位置的基本级别堆栈指针; 储存指示至少ー个进ー步级别堆栈数据储存器在所述存储器中所处的位置的至少ー个进一歩级别堆栈指针,所述至少ー个进一歩级别异常状态各具有相应的进ー步级别堆栈指针; 响应于与目标进一歩级别异常状态相关的异常事件,使用由对应于所述目标进ー步级别异常状态的所述进一歩级别堆栈指针所指示的所述进ー步级别堆栈数据储存器,在所述目标进一歩级别异常状态中触发对异常处理例程的处理;以及 在处理完所述异常处理例程的初始部分后,使用由所述基本级别堆栈指针所指示的所述基本级别堆栈数据储存器,在所述目标进ー步级别异常状态中处理所述异常处理例程的剩余部分。
17.—种虚拟机,所述虚拟机由在数据处理装置上执行的计算机程序提供,所述虚拟机提供对应于如权利要求I至10中的任一项所述的装置的指令执行环境。
全文摘要
处理电路(4)具有用于处理异常事件的多个异常状态EL0-EL3,该异常状态包括基本级别异常状态EL0及至少一个进一步级别异常状态EL1-EL3。每个异常状态具有相应的堆栈指针,其指示相应的堆栈数据储存器(35)在所述存储器中的所处位置。当该处理电路处于基本级别异常状态EL0中时,堆栈指针选择电路(40)将该基本级别堆栈指针选作指示当前堆栈数据储存器的当前堆栈指针,以供该处理电路(4)使用。当该处理电路(4)处于进一步的异常状态中时,该堆栈指针选择电路(40)将对应于所述当前进一步级别异常状态的所述基本级别堆栈指针或所述进一步级别堆栈指针选作当前堆栈指针。
文档编号G06F9/38GK102804134SQ201180014331
公开日2012年11月28日 申请日期2011年2月28日 优先权日2010年3月15日
发明者理查德·罗伊·格里森思怀特 申请人:Arm 有限公司