CN102804134B - 处理异常事件的装置和方法 - Google Patents

处理异常事件的装置和方法 Download PDF

Info

Publication number
CN102804134B
CN102804134B CN201180014331.5A CN201180014331A CN102804134B CN 102804134 B CN102804134 B CN 102804134B CN 201180014331 A CN201180014331 A CN 201180014331A CN 102804134 B CN102804134 B CN 102804134B
Authority
CN
China
Prior art keywords
stack pointer
rank
exception state
basic
level exception
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201180014331.5A
Other languages
English (en)
Other versions
CN102804134A (zh
Inventor
理查德·罗伊·格里森思怀特
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
ARM Ltd
Original Assignee
Advanced Risc Machines Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Advanced Risc Machines Ltd filed Critical Advanced Risc Machines Ltd
Publication of CN102804134A publication Critical patent/CN102804134A/zh
Application granted granted Critical
Publication of CN102804134B publication Critical patent/CN102804134B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3861Recovery, e.g. branch miss-prediction, exception handling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/14Protection against unauthorised use of memory or access to memory
    • G06F12/1458Protection against unauthorised use of memory or access to memory by checking the subject access rights
    • G06F12/1491Protection against unauthorised use of memory or access to memory by checking the subject access rights in a hierarchical protection system, e.g. privilege levels, memory rings
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30101Special purpose registers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/30134Register stacks; shift registers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30181Instruction operation extension or modification
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30181Instruction operation extension or modification
    • G06F9/30189Instruction operation extension or modification according to execution mode, e.g. mode flag
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/461Saving or restoring of program or task context
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4812Task transfer initiation or dispatching by interrupt, e.g. masked

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Executing Machine-Instructions (AREA)
  • Advance Control (AREA)
  • Hardware Redundancy (AREA)
  • Debugging And Monitoring (AREA)

Abstract

处理电路(4)具有用于处理异常事件的多个异常状态EL0-EL3,该异常状态包括基本级别异常状态EL0及至少一个进一步级别异常状态EL1-EL3。每个异常状态具有相应的堆栈指针,其指示相应的堆栈数据储存器(35)在所述存储器中的所处位置。当该处理电路处于基本级别异常状态EL0中时,堆栈指针选择电路(40)将该基本级别堆栈指针选作指示当前堆栈数据储存器的当前堆栈指针,以供该处理电路(4)使用。当该处理电路(4)处于进一步的异常状态中时,该堆栈指针选择电路(40)将对应于所述当前进一步级别异常状态的所述基本级别堆栈指针或所述进一步级别堆栈指针选作当前堆栈指针。

Description

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

Claims (14)

1.一种数据处理装置,包括:
处理电路,所述处理电路被配置为处理数据,所述处理电路具有多个异常状态,所述异常状态包括基本级别异常状态及至少一个进一步级别异常状态;
至少一个异常返回寄存器,所述异常返回寄存器用于储存异常返回数据以控制所述处理电路从处理异常事件返回,所述至少一个进一步级别异常状态各具有相应的异常返回寄存器,在处于相应的进一步级别异常状态中时,所述异常返回寄存器由所述处理电路专用;
基本级别堆栈指针寄存器,所述基本级别堆栈指针寄存器用于储存基本级别堆栈指针以便在所述处理电路处于所述异常状态中的任何一者时使用,所述基本级别堆栈指针指示基本级别堆栈数据储存器在存储器中的位置;
至少一个进一步级别堆栈指针寄存器,所述至少一个进一步级别堆栈指针寄存器中的每一个分别用于储存相应的进一步级别堆栈指针,每个进一步级别堆栈指针专用于所述处理电路处于相应的进一步级别异常状态中时,并且,指示相应的进一步级别堆栈数据储存器在所述存储器中的位置;以及
堆栈指针选择电路,所述堆栈指针选择电路被配置为选择当前堆栈指针,并且,被配置为控制所述处理电路在处理数据时使用由所述当前堆栈指针所指示的当前堆栈数据储存器;其中:
当所述处理电路处于所述基本级别异常状态中时,所述堆栈指针选择电路被配置为将所述基本级别堆栈指针选作所述当前堆栈指针;以及
当所述处理电路处于所述至少一个进一步级别异常状态中的一者时,所述堆栈指针选择电路被配置为将所述基本级别堆栈指针及对应于当前进一步级别异常状态的所述进一步级别堆栈指针中的一者选作所述当前堆栈指针,所述处理电路继续使用对应于所述当前进一步级别异常状态的所述异常返回寄存器,而不论所述当前堆栈指针是所述基本级别堆栈指针还是所述进一步级别堆栈指针。
2.如权利要求1所述的数据处理装置,其中,所述堆栈指针选择电路响应于与目标进一步级别异常状态相关的异常事件,来将对应于所述目标进一步级别异常状态的所述进一步级别堆栈指针选作所述当前堆栈指针。
3.如权利要求2所述的数据处理装置,其中,所述处理电路响应于所述异常事件,而在所述目标进一步级别异常状态中处理异常处理例程;以及
所述堆栈指针选择电路被控制为在所述处理电路已经完成对所述异常处理例程的初始部分的处理之后,将所述当前堆栈指针自对应于所述目标进一步级别异常状态的所述进一步级别堆栈指针切换成所述基本级别堆栈指针。
4.如权利要求3所述的数据处理装置,其中,所述异常处理例程包括指令,所述指令用于控制所述堆栈指针选择电路,以将所述当前堆栈指针自对应于所述目标进一步级别异常状态的所述进一步级别堆栈指针切换成所述基本级别堆栈指针。
5.如权利要求1所述的数据处理装置,包括堆栈指针选择寄存器,所述堆栈指针选择寄存器被配置为储存堆栈指针选择值,所述堆栈指针选择值指示所述当前堆栈指针是所述基本级别堆栈指针还是对应于所述当前进一步级别异常状态的所述进一步级别堆栈指针。
6.如权利要求5所述的数据处理装置,其中,当所述处理电路处于所述至少一个进一步级别异常状态中的一者时,所述堆栈指针选择电路取决于所述堆栈指针选择值而选择所述当前堆栈指针。
7.如权利要求6所述的数据处理装置,其中,当所述处理电路处于所述至少一个进一步级别异常状态中的一者时,所述堆栈指针选择电路被配置为:
(i)当所述堆栈指针选择值具有第一值时,将所述基本级别堆栈指针选作所述当前堆栈指针;以及
(ii)当所述堆栈指针选择值具有第二值时,将对应于所述当前进一步级别异常状态的所述进一步级别堆栈指针选作所述当前堆栈指针。
8.如权利要求6所述的数据处理装置,其中所述处理电路响应于堆栈指针选择指令,而将一更新的堆栈指针选择值写入所述堆栈指针选择寄存器。
9.如权利要求5所述的数据处理装置,包括异常控制器,所述异常控制器响应于异常事件而控制所述处理电路来处理对应于所述异常事件的异常处理例程,至少一个异常事件具有多个相应的异常处理例程;
其中,一旦发生所述至少一个异常事件,则所述异常控制器选择所述多个相应的异常处理例程中的一者,以用于通过所述处理电路取决于所述堆栈指针选择值来作处理。
10.如权利要求9所述的数据处理装置,其中,所述多个相应的异常处理例程包括堆栈溢出处理例程,所述堆栈溢出处理例程用于处理所述进一步级别堆栈数据储存器的堆栈溢出,并且,所述异常控制器被配置为:当与所述至少一个异常事件相关的目标进一步级别异常状态与所述处理电路的所述当前进一步级别异常状态相同,并且,所述堆栈指针选择值指示所述进一步级别堆栈指针是所述当前堆栈指针时,一旦发生所述至少一个异常事件,则控制所述处理电路处理所述堆栈溢出处理例程。
11.如前述权利要求中的任一项所述的数据处理装置,还包括所述存储器。
12.一种数据处理的方法,所述方法包括以下步骤:
在多个异常状态的一者中处理数据,所述异常状态包括基本级别异常状态及至少一个进一步级别异常状态;
响应于异常事件,在至少一个异常返回寄存器内储存异常返回数据以控制从处理异常事件返回,所述至少一个进一步级别异常状态各具有在所述相应的进一步级别异常状态中进行处理时专用的相应的异常返回寄存器;
储存基本级别堆栈指针,以在所述处理步骤处于所述异常状态中的任何一者时使用,所述基本级别堆栈指针指示基本级别堆栈数据储存器在存储器中的位置;
储存至少一个进一步级别堆栈指针,每个进一步级别堆栈指针在所述处理步骤处于相应的进一步级别异常状态中时专用,并且,指示相应的进一步级别堆栈数据储存器在所述存储器中所处的位置;以及
选择当前堆栈指针并控制所述处理步骤在处理数据时使用由所述当前堆栈指针指示的当前堆栈数据储存器;其中:
当所述处理步骤在所述基本级别异常状态中处理数据时,所述选择步骤将所述基本级别堆栈指针选作所述当前堆栈指针;并且,
当所述处理步骤在所述至少一个进一步级别异常状态中的一者中处理数据时,所述选择步骤将所述基本级别堆栈指针及对应于当前进一步级别异常状态的所述进一步级别堆栈指针中的一者选作所述当前堆栈指针,所述处理步骤继续使用对应于所述当前进一步级别异常状态的所述异常返回寄存器,而不论所述当前堆栈指针是所述基本级别堆栈指针还是所述进一步级别堆栈指针。
13.一种数据处理装置,包括:
处理电路,所述处理电路被配置为在包括基本级别异常状态及至少一个进一步级别异常状态的多个异常状态中的一者中处理数据;
基本级别堆栈指针寄存器,用于储存指示基本级别堆栈数据储存器在存储器中所处位置的基本级别堆栈指针;
至少一个进一步级别堆栈指针寄存器,用于储存至少一个进一步级别堆栈指针,所述至少一个进一步级别堆栈指针中的每一个分别指示相应的进一步级别堆栈数据储存器在所述存储器中的位置,所述至少一个进一步级别异常状态各具有相应的进一步级别堆栈指针;以及
异常控制器,所述异常控制器响应于与目标进一步级别异常状态相关的异常事件,而触发所述处理电路使用由对应于所述目标进一步级别异常状态的所述进一步级别堆栈指针所指示的所述进一步级别堆栈数据储存器,在所述目标进一步级别异常状态中处理异常处理例程;
其中,所述处理电路被配置为在处理完所述异常处理例程的初始部分后,使用由所述基本级别堆栈指针所指示的所述基本级别堆栈数据储存器在所述目标进一步级别异常状态中处理所述异常处理例程的剩余部分。
14.一种数据处理的方法,所述方法包括以下步骤:
在包括基本级别异常状态及至少一个进一步级别异常状态的多个异常状态中的一者中处理数据;
储存指示基本级别堆栈数据储存器在存储器中所处位置的基本级别堆栈指针;
储存至少一个进一步级别堆栈指针,所述至少一个进一步级别堆栈指针中的每一个分别指示相应的进一步级别堆栈数据储存器在所述存储器中所处的位置,所述至少一个进一步级别异常状态各具有相应的进一步级别堆栈指针;
响应于与目标进一步级别异常状态相关的异常事件,使用由对应于所述目标进一步级别异常状态的所述进一步级别堆栈指针所指示的所述进一步级别堆栈数据储存器,在所述目标进一步级别异常状态中触发对异常处理例程的处理;以及
在处理完所述异常处理例程的初始部分后,使用由所述基本级别堆栈指针所指示的所述基本级别堆栈数据储存器,在所述目标进一步级别异常状态中处理所述异常处理例程的剩余部分。
CN201180014331.5A 2010-03-15 2011-02-28 处理异常事件的装置和方法 Active CN102804134B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
GB1004303.2 2010-03-15
GB1004303.2A GB2478733B (en) 2010-03-15 2010-03-15 Apparatus and method for handling exception events
PCT/GB2011/050389 WO2011114124A1 (en) 2010-03-15 2011-02-28 Apparatus and method for handling exception events

Publications (2)

Publication Number Publication Date
CN102804134A CN102804134A (zh) 2012-11-28
CN102804134B true CN102804134B (zh) 2015-02-25

Family

ID=42261618

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201180014331.5A Active CN102804134B (zh) 2010-03-15 2011-02-28 处理异常事件的装置和方法

Country Status (10)

Country Link
US (3) US8677107B2 (zh)
EP (1) EP2548115B1 (zh)
JP (1) JP5680679B2 (zh)
KR (1) KR101782313B1 (zh)
CN (1) CN102804134B (zh)
GB (1) GB2478733B (zh)
IL (1) IL221068A (zh)
MY (1) MY155863A (zh)
TW (1) TWI478052B (zh)
WO (1) WO2011114124A1 (zh)

Families Citing this family (26)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2478733B (en) 2010-03-15 2013-08-14 Advanced Risc Mach Ltd Apparatus and method for handling exception events
US8448022B1 (en) * 2010-10-26 2013-05-21 Vmware, Inc. Fault recovery to a call stack position stored in thread local storage
US10210349B2 (en) 2012-02-08 2019-02-19 Arm Limited Data processing apparatus and method using secure domain and less secure domain
US9477834B2 (en) * 2012-02-08 2016-10-25 Arm Limited Maintaining secure data isolated from non-secure access when switching between domains
US9116711B2 (en) 2012-02-08 2015-08-25 Arm Limited Exception handling in a data processing apparatus having a secure domain and a less secure domain
GB2501343A (en) * 2012-02-08 2013-10-23 Advanced Risc Mach Ltd Data processing apparatus and method using secure domain and less secure domain
US9202071B2 (en) 2012-02-08 2015-12-01 Arm Limited Exception handling in a data processing apparatus having a secure domain and a less secure domain
US9213828B2 (en) * 2012-02-08 2015-12-15 Arm Limited Data processing apparatus and method for protecting secure data and program code from non-secure access when switching between secure and less secure domains
US9672164B2 (en) * 2012-05-31 2017-06-06 Nxp Usa, Inc. Methods and systems for transitioning between a user state and a supervisor state based on a next instruction fetch address
US9619230B2 (en) 2013-06-28 2017-04-11 International Business Machines Corporation Predictive fetching and decoding for selected instructions
US9513924B2 (en) * 2013-06-28 2016-12-06 Globalfoundries Inc. Predictor data structure for use in pipelined processing
GB2532777B (en) * 2014-11-28 2021-07-07 Advanced Risc Mach Ltd System error handling in a data processing apparatus
US10176329B2 (en) * 2015-08-11 2019-01-08 Symantec Corporation Systems and methods for detecting unknown vulnerabilities in computing processes
GB2547912B (en) * 2016-03-02 2019-01-30 Advanced Risc Mach Ltd Register access control
GB2573041B (en) * 2016-04-28 2021-01-06 Imagination Tech Ltd Method for handling exceptions in exception-driven system
GB2549774B (en) * 2016-04-28 2019-04-10 Imagination Tech Ltd Method for handling exceptions in exception-driven system
US10114573B1 (en) * 2017-04-26 2018-10-30 International Business Machines Corporation Dynamic reduction of stack-overflow errors in a recursive data-serialization algorithm
GB2562102B (en) * 2017-05-05 2019-09-04 Advanced Risc Mach Ltd An apparatus and method for managing use of capabilities
GB2563885B (en) * 2017-06-28 2019-10-23 Advanced Risc Mach Ltd Interrupting export of memory regions
GB2563887B (en) * 2017-06-28 2019-12-25 Advanced Risc Mach Ltd Masking of architectural state associated with a realm
GB2577729C (en) * 2018-10-04 2021-10-27 Advanced Risc Mach Ltd Processor with Register Bank having Banked Versions of a Register each Associated with an Operating State of the Processor
GB2579617B (en) * 2018-12-06 2021-01-27 Advanced Risc Mach Ltd An apparatus and method for handling exception causing events
JP7131486B2 (ja) * 2019-06-03 2022-09-06 オムロン株式会社 制御システム、プログラマブルロジックコントローラおよび情報処理方法
CN110515766B (zh) * 2019-08-01 2023-01-20 深圳供电局有限公司 一种基于云的电力灾备数据安全防护系统、设备及介质
US11442739B2 (en) 2019-09-16 2022-09-13 International Business Machines Carporation Exception handling
US11216280B2 (en) * 2019-11-26 2022-01-04 Arm Limited Exception interception

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4575817A (en) * 1983-06-27 1986-03-11 International Business Machines Corporation Switching of programming routine supporting storage stacks
CN1476559A (zh) * 2000-11-27 2004-02-18 Arm 用于保存返回状态的数据处理设备和方法
GB2461848A (en) * 2008-07-10 2010-01-20 Cambridge Consultants Processor with a privileged stack pointer and a stack pointer used in privileged and non-privileged modes

Family Cites Families (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4488227A (en) * 1982-12-03 1984-12-11 Honeywell Information Systems Inc. Program counter stacking method and apparatus for nested subroutines and interrupts
US4866599A (en) * 1985-06-27 1989-09-12 Bull Hn Information Systems Inc. Call instruction, return instruction and trap procedure for ring crossing architecture
JPH03163630A (ja) * 1989-11-21 1991-07-15 Mitsubishi Electric Corp プロセッサのスタック制御方法
US5386563A (en) * 1992-10-13 1995-01-31 Advanced Risc Machines Limited Register substitution during exception processing
US5634046A (en) * 1994-09-30 1997-05-27 Microsoft Corporation General purpose use of a stack pointer register
US5649136A (en) * 1995-02-14 1997-07-15 Hal Computer Systems, Inc. Processor structure and method for maintaining and restoring precise state at any instruction boundary
US5761491A (en) * 1996-04-15 1998-06-02 Motorola Inc. Data processing system and method for storing and restoring a stack pointer
US6304963B1 (en) * 1998-05-14 2001-10-16 Arm Limited Handling exceptions occuring during processing of vector instructions
US6006323A (en) * 1998-05-20 1999-12-21 Industrial Technology Research Institute Intelligent multiple stack management unit
US7941647B2 (en) * 1999-01-28 2011-05-10 Ati Technologies Ulc Computer for executing two instruction sets and adds a macroinstruction end marker for performing iterations after loop termination
US6490509B1 (en) * 1999-09-17 2002-12-03 Keihin Corporation Car controlling unit using a multitasking system
US6665793B1 (en) * 1999-12-28 2003-12-16 Institute For The Development Of Emerging Architectures, L.L.C. Method and apparatus for managing access to out-of-frame Registers
US6757771B2 (en) * 2000-08-09 2004-06-29 Advanced Micro Devices, Inc. Stack switching mechanism in a computer system
US7451324B2 (en) * 2002-05-31 2008-11-11 Advanced Micro Devices, Inc. Secure execution mode exceptions
US7797681B2 (en) * 2006-05-11 2010-09-14 Arm Limited Stack memory selection upon exception in a data processing system
WO2009137108A1 (en) * 2008-05-08 2009-11-12 Mips Technologies, Inc. Microprocessor with compact instruction set architecture
TWI368165B (en) * 2008-08-13 2012-07-11 Faraday Tech Corp Processor and method for recovering global history shift register and return address stack thereof
GB2478733B (en) 2010-03-15 2013-08-14 Advanced Risc Mach Ltd Apparatus and method for handling exception events

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4575817A (en) * 1983-06-27 1986-03-11 International Business Machines Corporation Switching of programming routine supporting storage stacks
CN1476559A (zh) * 2000-11-27 2004-02-18 Arm 用于保存返回状态的数据处理设备和方法
GB2461848A (en) * 2008-07-10 2010-01-20 Cambridge Consultants Processor with a privileged stack pointer and a stack pointer used in privileged and non-privileged modes

Also Published As

Publication number Publication date
TWI478052B (zh) 2015-03-21
IL221068A (en) 2015-07-30
US9727343B2 (en) 2017-08-08
US20110225402A1 (en) 2011-09-15
EP2548115A1 (en) 2013-01-23
US20140122849A1 (en) 2014-05-01
GB201004303D0 (en) 2010-04-28
CN102804134A (zh) 2012-11-28
KR20130012126A (ko) 2013-02-01
EP2548115B1 (en) 2016-10-12
US8677107B2 (en) 2014-03-18
US20150301833A1 (en) 2015-10-22
KR101782313B1 (ko) 2017-10-23
WO2011114124A1 (en) 2011-09-22
GB2478733A (en) 2011-09-21
TW201203105A (en) 2012-01-16
MY155863A (en) 2015-12-15
US9104425B2 (en) 2015-08-11
GB2478733B (en) 2013-08-14
JP2013522750A (ja) 2013-06-13
IL221068A0 (en) 2012-09-24
JP5680679B2 (ja) 2015-03-04

Similar Documents

Publication Publication Date Title
CN102804134B (zh) 处理异常事件的装置和方法
CN101788949B (zh) 一种实现嵌入式系统函数监控的方法及装置
CN110737453A (zh) 安全芯片的升级方法、装置及安全芯片
EP3040854B1 (en) Method, apparatus and storage medium for dynamically patching function
EP4012554A1 (en) Chip patching method and chip
US7228543B2 (en) Technique for reaching consistent state in a multi-threaded data processing system
CN105224403B (zh) 一种中断处理方法及装置
CN104391754A (zh) 一种任务异常的处理方法及装置
CN109582542B (zh) 一种嵌入式系统核心转储的方法
CN107818034B (zh) 监测计算机设备中的进程的运行空间的方法以及装置
JP4983142B2 (ja) プログラム監視方法、コンピュータ、および異常監視用プログラム
CN108062251A (zh) 一种服务器资源回收方法以及计算机设备
US20140025870A1 (en) Computer reprogramming method, data storage medium and motor vehicle computer
CN111026526B (zh) 程序的定时器配置方法、装置、存储介质及终端设备
CN108701031B (zh) 寄存器访问控制
CN103106089B (zh) 一种智能平台管理控制器的升级方法和系统
KR100304355B1 (ko) 실시간시스템을위한스택관리방법
CN111158317A (zh) 数控加工控制方法、装置、系统、设备及存储介质
GB2500844A (en) Selecting either base level or further level stack when processing data in current further level exception state above base level
KR101397911B1 (ko) 역부팅시스템을 통한 단말기의 역부팅 방법
CN113672424A (zh) 修复异常任务的方法及装置
CN113742122A (zh) 异常处理方法、装置、存储介质及电子设备
JP2016173746A (ja) 情報処理装置及びその制御方法、プログラム
CN114691296A (zh) 中断处理方法、装置、介质及设备
EP1450255A1 (en) Microcontroller device for complex processing procedures and corresponding interrupt management process

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant