欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

處理異常事件的裝置和方法

文檔序號:6359911閱讀:248來源:國知局
專利名稱:處理異常事件的裝置和方法
技術領域
本發(fā)明涉及數(shù)據(jù)處理領域。更具體地,本發(fā)明涉及用于處理異常事件的裝置和方法。
背景技術
當數(shù)據(jù)處理正進行時,可能發(fā)生異常事件,從而指示應中斷數(shù)據(jù)處理以使異常處理例程得以執(zhí)行。舉例而言,異常事件可指示處理結果不明確;處理資源已經(jīng)溢出,或者已自外部設備接收到異常信號??梢蕴幚矶鄠€異常狀態(tài)中的異常事件。每個異常狀態(tài)可具有不同的優(yōu)先級別和與其相關聯(lián)的不同資源。
在異常狀態(tài)中對異常處理例程進行處理時,向每個異常狀態(tài)提供其自身的堆棧數(shù)據(jù)儲存器以儲存臨時變量可為有用的。堆棧數(shù)據(jù)儲存器通常儲存在存儲器中,并且,為先進先出(first-in-first-out;FIFO)數(shù)據(jù)結構。堆棧數(shù)據(jù)儲存器具有向其分配的預定量的存儲器空間。如果堆棧上所儲存的數(shù)據(jù)過多,則堆??赡艹^其所分配的存儲器空間。堆??赡艹鲰撨吔?,并且,可能不具有在存儲器中訪問下ー頁的訪問權,因此觸發(fā)了存儲器中止。如果處理器試圖將大于堆棧內余留空間的變量儲存于堆棧上,則還可能導致錯誤。這種類型的錯誤稱為堆棧溢出。通常而言,堆棧溢出是與堆棧過度使用有關的任何錯誤,所述錯誤防止將數(shù)據(jù)值儲存于所述堆棧上。通常而言,當發(fā)生異常事件后,異常處理例程所執(zhí)行的首要任務的ー個是將ー些變量壓入堆棧上。因此,重要的是,堆棧容量在引入異常時對異常處理例程是可用的,以確保異常處理例程可成功地開始。如果堆棧溢出,則該溢出可能妨礙繼續(xù)正常執(zhí)行該異常處理例程,因為堆棧溢出自身可觸發(fā)導致另ー異常處理例程的異常事件來試圖將變量壓入堆棧上,進而導致另ー堆棧溢出異常事件。此舉可導致異常事件的無盡循環(huán)回路,其中每個異常事件均試圖將變量加載到堆棧上并且,每個異常事件均觸發(fā)由堆棧溢出所致的進ー步異常事件,并且,由于此遞歸異常的進入,這可使系統(tǒng)發(fā)生崩潰。本技術試圖降低這種崩潰的可能性。

發(fā)明內容
從ー個方面來看,本發(fā)明提供數(shù)據(jù)處理裝置,其包括處理電路,所述處理電路被配置為處理數(shù)據(jù),其中,所述處理電路具有多個異常狀態(tài),所述異常狀態(tài)包括基本級別異常狀態(tài)及至少ー個進ー步的異常狀態(tài);至少ー個異常返回寄存器,所述異常返回寄存器用于儲存異常返回數(shù)據(jù)以控制處理電路在處理異常事件后返回,所述至少ー個進一歩級別異常狀態(tài)各具有相應的異常返回寄存器,所述異常返回寄存器在處于相應的進一歩級別異常狀態(tài)中時由處理電路專用;基本級別堆棧指針寄存器,所述基本級別堆棧指針用于儲存基本級別堆棧指針,以便在所述處理電路處于所述異常狀態(tài)中任何ー者時使用,所述基本級別堆棧指針指示基本級別堆棧數(shù)據(jù)儲存器在存儲器中的位置;
至少一個進一步級別堆棧指針寄存器,進一步堆棧指針寄存器用于儲存至少一個進一步級別堆棧指針,每個進一步的堆棧指針僅供所述處理電路處于對應的進一步級別異常狀態(tài)中時使用,并且,指示對應的進一步級別堆棧數(shù)據(jù)儲存器在所述存儲器中所處的位置;以及堆棧指針選擇電路,所述堆棧指針選擇電路被配置為選擇當前堆棧指針,并且,控制所述處理電路在處理數(shù)據(jù)時使用由所述當前堆棧指針所指示的當前堆棧數(shù)據(jù)儲存器;其中 當所述處理電路處于所述基本級別異常狀態(tài)中時,所述堆棧指針選擇電路被配置為將所述基本級別堆棧指針選作所述當前堆棧指針;并且,當所述處理電路處于所述至少一個進一步級別狀態(tài)中的一者時,所述堆棧指針選擇電路被配置為將所述基本級別堆棧指針及對應于當前進一步級別異常狀態(tài)的進一步級別堆棧指針中的一者選作所述當前堆棧指針,所述處理電路繼續(xù)使用對應于所述當前進一 步級別異常狀態(tài)的異常返回寄存器,而不論所述當前堆棧指針是所述基本級別堆棧指針還是所述進一步級別堆棧指針。本文提供一種裝置,其包括具有多個異常狀態(tài)的處理電路。所述異常狀態(tài)包括基本級別異常狀態(tài)及至少一個進一步級別異常狀態(tài)。在一個實施例中,基本級別異常狀態(tài)用于處理使用者應用,而異常事件導致異常處理例程在進一步級別異常狀態(tài)中的目標狀態(tài)下受到處理(盡管在可替換實施例中,異常事件也可針對于基本級別異常狀態(tài))。進一步級別異常狀態(tài)至少具有相應的異常返回寄存器,以用于儲存異常返回數(shù)據(jù),以在處理完異常事件后控制返回到先前程序(如果基本級別異常狀態(tài)用于處理異常處理例程,則基本級別異常狀態(tài)也可具有相應的異常返回寄存器)。該裝置還具有寄存器,該寄存器用于儲存指示多堆棧數(shù)據(jù)儲存器在存儲器中所處的位置的堆棧指針以便在處理異常事件時使用的處理電路使用。當處理電路處于基本級別異常狀態(tài)中時,由基本級別堆棧指針所指示的基本級別的堆棧數(shù)據(jù)儲存器用以儲存臨時變量。通過提供可為處理電路所訪問的兩個堆棧數(shù)據(jù)儲存器來降低導致遞歸異常的進入的堆棧溢出風險(及由此發(fā)生的異常事件未得到正確處理的風險)。當在任何進一步級別的異常狀態(tài)中進行處理時,一個堆棧數(shù)據(jù)儲存器可用于引入異常后立即進行少量處理,而另一個堆棧數(shù)據(jù)儲存器用于在異常狀態(tài)中進行更通常的處理。各進一步級別異常狀態(tài)可訪問基本級別堆棧指針及為相應的進一步級別異常狀態(tài)所專用的相應的進一步級別堆棧指針兩者。在引入異常后立即進行的少量處理期間,將基本級別堆棧指針的內容(與通用寄存器的內容一起)保存于存儲器中,并且,在基本級別堆棧指針內置放有指向適合于更通用處理的堆棧的新的值。適合于在所述異常狀態(tài)下進行更通用的處理的此堆棧,稱為在所述異常狀態(tài)下使用的基本級別的堆棧數(shù)據(jù)儲存器。提供選擇電路以在基本級別堆棧指針與進一步級別堆棧指針的間進行選擇,并且,控制處理電路使用當前選擇的堆棧指針訪問存儲器內堆棧數(shù)據(jù)儲存器中的一者,其中,所述基本級別堆棧指針指示可在所述異常狀態(tài)下使用的基本級別堆棧數(shù)據(jù)儲存器的位置,而所述進一步級別堆棧指針在處理電路處于進一步級別異常狀態(tài)中的一者時指示進一步級別堆棧數(shù)據(jù)儲存器的位置。由于各進一步級別堆棧指針為特定進一步級別異常狀態(tài)所專用,因此,每個進一步級別堆棧指針的使用頻率相對較低,并且,儲存于進一步級別堆棧數(shù)據(jù)儲存器上的變量將會極少。此狀況意味著發(fā)生堆棧溢出的風險降低,并且,在相應的進一歩級別異常狀態(tài)下對異常事件進行處理時,進ー步級別堆棧數(shù)據(jù)儲存器將可用于儲存變量的可能性更高。在另ー方面,基本級別堆棧指針為用于在任何異常狀態(tài)下處理的共享堆棧指針。舉例而言,當異常處理例程的安全啟動已經(jīng)發(fā)生或不再為關鍵時,基本級別堆棧指針可用以指向可在異常狀態(tài)下使用的基本級別的堆棧數(shù)據(jù)儲存器,以便保留專用進一步級別堆棧數(shù)據(jù)儲存器的資源。通過在任何可能的情況下使用基本級別堆棧數(shù)據(jù)儲存器,進ー步級別堆棧數(shù)據(jù)儲存器中的一者發(fā)生溢出的可能性顯著降低。盡管可能已經(jīng)通過在每個進一歩級別異常狀態(tài)下提供兩個專用堆棧指針來達成了對堆棧溢出的預防,然而本技術認識到由于各堆棧指針的使用頻率將較低,因此,此辦法將是低效率的,并且,造成硬件浪費??赏ㄟ^以下以更有效方式來達成對堆棧溢出的預防提供對應于各異常狀態(tài)的堆棧指針,并且,允許異常狀態(tài)間共享基本級別堆棧指針,使得每個進一歩級別異常狀態(tài)可訪問其自身的基本級別堆棧數(shù)據(jù)儲存器或進ー步級別堆棧數(shù)據(jù)儲存器。因此,每個進ー步級別異常狀態(tài)仍可訪問兩個堆棧數(shù)據(jù)儲存器,以便提供對堆棧溢出的預防,但對每個異常狀態(tài)僅提供一個堆棧指針。因此可存在兩個用于各異常級別的堆棧儲存器一一個在異常登錄后立即使用,而另ー個用于更通常的處理(并且,可允許其溢出而不存在遞歸異常登錄的風險)。 可將異常返回寄存器和堆棧指針寄存器共同視為經(jīng)提供以儲存上下文數(shù)據(jù)以供處理異常事件時使用的異常上下文寄存器。異常返回寄存器以不同方式組合到堆棧指針寄存器中,因為與其中提供有可在異常狀態(tài)中的任何一者中使用的基本級別堆棧指針寄存器的堆棧指針寄存器相反,每個異常返回寄存器由特定異常狀態(tài)專用。堆棧指針選擇電路可響應于與目標進一歩級別異常狀態(tài)相關的異常事件,來將對應于目標進一歩級別異常狀態(tài)的進一步級別堆棧指針選作當前堆棧指針。因此,在開始處理異常事件進行時,當前堆棧數(shù)據(jù)儲存器將變?yōu)閷谀繕诉M一歩級別異常狀態(tài)的專用進一步級別數(shù)據(jù)儲存器。專用進一步級別堆棧數(shù)據(jù)儲存器發(fā)生堆棧溢出的風險低于在所述異常級別下使用的基本級別的堆棧數(shù)據(jù)儲存器發(fā)生溢出的風險。因此,在異常進入時切換到目標進ー步級別堆棧數(shù)據(jù)儲存器可降低異常事件進入未正確處理的風險。一旦進入,則可往回切換來使用由基本級別堆棧指針內的新的值所指的堆棧。處理電路可響應于異常事件而在目標進一歩級別異常狀態(tài)中處理異常處理例程,并且,堆棧指針選擇電路可被配置為在處理電路對異常處理例程的初始部分已經(jīng)完成后,將當前堆棧指針自對應于目標進一歩級別異常狀態(tài)的進一步級別堆棧指針切換成基本級別堆棧指針。在對異常處理例程的初始部分已經(jīng)完成后,則這指示異常處理已成功開始,由此無需再使用由進ー步級別堆棧指針所指示的進ー步級別堆棧數(shù)據(jù)儲存器。如基本級別堆棧指針所指示的一般,為避免過多數(shù)據(jù)壓入進ー步級別堆棧數(shù)據(jù)儲存器上,當前堆棧指針可切換回基本級別堆棧指針,并且,處理可經(jīng)由使用在異常狀態(tài)下使用的基本級別的堆棧數(shù)據(jù)儲存器而繼續(xù)進行。此舉使得在進入到處在相同的進ー步級別異常狀態(tài)中的另ー異常事件時,進ー步級別堆棧發(fā)生溢出的機率降低??墒褂弥甘井惓L幚砝痰某跏疾糠值慕Y束的各種技木。舉例而言,可提供計數(shù)器以用于計算自異常處理例程開始后所經(jīng)過的處理周期的數(shù)目,或者自異常處理例程開始后所執(zhí)行的指令的數(shù)目,并且,初始部分可在計數(shù)器達到預定臨界值時結束。
然而,指示異常處理例程的初始部分的結束的有用方式為在異常處理例程內提供指令,該指令用于控制堆棧指針選擇電路將當前堆棧指針自對應于目標進一步級別異常狀態(tài)的進一步級別堆棧指針切換成基本級別堆棧指針。因此,代表異常處理例程的軟件自身可定義當前堆棧指針切換成基本級別堆棧指針所達到的點位。由于一些異常處理例程可比其他異常處理例程更苛求安全性,因此,提供此指令允許異常處理例程的程序員根據(jù)具體情況決定安全的進一步級別堆棧指針在切換成基本級別堆棧指針的前應使用多長時間。該裝置可包括堆棧指針選擇寄存器,其被配置為儲存指示當前堆棧指針為基本級別堆棧指針還是對應于當前進一步級別異常狀態(tài)的進一步級別堆棧指針的堆棧指針選擇值。所述裝置的其他部分則可決定通過讀取堆棧指針選擇寄存器內儲存的值,當前正在使用哪個堆棧指針。除了指示基本級別堆棧指針或進一步級別堆棧指針中何者當前有效的外,當處理電路處于進一步級別異常狀態(tài)中的一者時,堆棧指針選擇寄存器也可控制堆棧指針選擇電路的操作。堆棧指針選擇電路可被配置為取決于堆棧指針選擇寄存器內所儲存的堆棧指針選擇值來選擇當前堆棧指針。因此,修改堆棧指針選擇寄存器內所儲存的值改變了存儲器 中堆棧數(shù)據(jù)儲存器中的何者為處理電路所使用。堆棧指針選擇電路可被配置使得如果處理電路處于進一步級別異常狀態(tài)中的一者,則在堆棧指針選擇值具有第一值時,將基本級別堆棧指針選作當前堆棧指針,而在堆棧指針選擇值具有第二值時,將對應于當前進一步級別異常狀態(tài)的進一步級別堆棧指針選作當前堆棧指針。舉例而言,堆棧指針選擇值可為一位值,其中第一值(例如0或I)控制堆棧指針選擇電路將基本級別堆棧指針選擇為當前堆棧指針,而第二值(除0與I以外的其他值)控制堆棧指針選擇電路將對應于當前異常狀態(tài)的進一步的堆棧指針選作當前堆棧指針。處理電路可響應于堆棧指針選擇指令以將經(jīng)更新的堆棧指針選擇值寫入堆棧指針選擇寄存器。這允許程序或異常處理例程的程序員控制何時使用哪個堆棧。通過執(zhí)行堆棧指針選擇指令,將代表期望堆棧指針的更新堆棧指針選擇值寫入堆棧指針選擇寄存器, 并且,堆棧指針選擇電路隨后將期望堆棧指針選作當前堆棧指針并控制處理電路使用由更新當前堆棧指針指示的堆棧數(shù)據(jù)儲存器。該裝置可包括異常控制器,其響應于堆棧指針選擇寄存器內儲存的堆棧指針選擇值來控制應選擇對應于特定異常事件的多個不同異常處理例程中的何者用于處理電路執(zhí)行。堆棧指針選擇寄存器指示處理器的當前狀態(tài)(即,正在使用共享的基本級別的堆棧指針或專用的進一步級別堆棧指針),由此與進一步級別堆棧指針正在使用時相比,當用于異常狀態(tài)的基本級別堆棧數(shù)據(jù)儲存器正在使用時,可選擇不同的異常處理例程。舉例而言,當多個相應的異常處理例程包括用于處理至少一個進一步堆棧數(shù)據(jù)儲存器的堆棧溢出的堆棧溢出處理例程時,則可能有用的是取決于堆棧指針選擇值而選取相應的異常處理例程中的一者。盡管本技術降低了進一步級別異常堆棧數(shù)據(jù)儲存器溢出的風險,但仍存在較小的堆棧溢出可能性(例如由于軟件內錯誤所致),并且,可能需要提供堆棧溢出處理例程來解決此罕見情況。當異常事件針對與當前進一步級別異常狀態(tài)相同的目標進一步級別異常狀態(tài),并且,堆棧指針選擇值指示進一步級別堆棧指針為當前堆棧指針時,則可指示與當前級別異常狀態(tài)相關的進一步級別堆棧存在發(fā)生堆棧溢出的風險,即,遞歸異常進入。的所以存在發(fā)生堆棧溢出的風險是因為指示進ー步級別堆棧指針為當前堆棧指針的堆棧指針選擇值表明異常事件在先前執(zhí)行的異常處理例程達到使用基本級別堆棧數(shù)據(jù)儲存器的點位的前已發(fā)出,并且,由于新的異常事件所針對的異常狀態(tài)與先前狀態(tài)相同,故發(fā)生新的異常事件的可能起因是進ー步級別堆棧數(shù)據(jù)儲存器的溢出。因此,進入正常異常處理例程可觸發(fā)無盡循環(huán)回路,從而由于堆棧已溢出,因而調用了異常但無法執(zhí)行相應的異常處理例程。為防止此情況,應選擇堆棧溢出處理例程。儲存堆棧數(shù)據(jù)儲存器的存儲器可為不屬于處理裝置的一部分的外部存儲器。在此情形下,裝置所處理的堆棧指針指示相應的堆棧數(shù)據(jù)儲存器在外部存儲器中所處的位置?;蛘撸瑪?shù)據(jù)處理裝置自身可包括存儲器。存儲器可包括一組或多組存儲器或ー個或多個獨立的存儲器設備,從而可包括存儲器設備的任何群組,其共同儲存基本級別堆棧數(shù)據(jù)儲存器及一個或多個進ー步級別堆棧數(shù)據(jù)儲存器。從另一方面來看,本發(fā)明提供數(shù)據(jù)處理裝置,其包括·用于處理數(shù)據(jù)的處理部件,所述處理部件具有多個異常狀態(tài),所述異常狀態(tài)包括·一基本級別異常狀態(tài)及至少ー個進ー步級別異常狀態(tài);用于儲存異常返回數(shù)據(jù)以控制所述處理部件處理完異常事件后返回的至少ー個異常返回寄存器部件,所述至少ー個進一歩級別異常狀態(tài)各具有在處于相應的進一步級別異常狀態(tài)時處理部件所專用的一相應的異常返回寄存器部件;用于儲存基本級別堆棧指針以便在所述處理部件在處于所述異常狀態(tài)中的任何一者時所使用的一基本級別堆棧指針寄存器部件,所述基本級別堆棧指針指示基本級別堆棧數(shù)據(jù)儲存器部件在存儲器部件中所處的位置;用于儲存至少ー個進ー步級別堆棧指針的至少ー個進ー步級別堆棧指針寄存器部件,每個進一歩級別堆棧指針在所述處理部件處于相應的進一歩級別異常狀態(tài)中時所專用,并且,指示相應的進一步級別堆棧數(shù)據(jù)儲存器部件在所述存儲器部件中所處的位置;以及用于選擇當前堆棧指針并用于控制所述處理部件在處理數(shù)據(jù)時使用由所述當前堆棧指針所指示的一前堆棧數(shù)據(jù)儲存器部件的堆棧指針選擇部件;其中當所述處理部件處于所述基本級別異常狀態(tài)中時,所述堆棧指針選擇部件被配置為將所述基本級別堆棧指針選作所述當前堆棧指針;以及當所述處理部件處于所述至少一個進ー步級別狀態(tài)中的ー者時,所述堆棧指針選擇部件被配置為將所述基本級別堆棧指針及對應于當前進ー步級別異常狀態(tài)的進ー步級別堆棧指針中的ー者選作所述當前堆棧指針,所述處理部件繼續(xù)使用對應于所述當前進ー步級別異常狀態(tài)的異常返回寄存器部件,而不論所述當前堆棧指針是所述基本級別堆棧指針還是所述進ー步級別堆棧指針。從另一方面來看,本發(fā)明提供ー種數(shù)據(jù)處理方法,所述方法包括以下步驟在多個異常狀態(tài)的ー者中處理數(shù)據(jù),所述異常狀態(tài)包括基本級別異常狀態(tài)及至少ー個進一歩級別異常狀態(tài);響應于異常事件,在至少ー個異常返回寄存器內儲存異常返回數(shù)據(jù)以控制自處理完異常事件后返回,所述至少ー個進一歩級別異常狀態(tài)各具在所述相應的進ー步級別異常狀態(tài)中進行處理時專用的相應的異常返回寄存器;
儲存基本級別堆棧指針以在所述處理步驟處于所述異常狀態(tài)中的任何一者時使用,所述基本級別堆棧指針指示基本級別堆棧數(shù)據(jù)儲存器在存儲器中所處的位置;儲存至少一個進一步級別堆棧指針,每個進一步級別堆棧指針系在所述處理步驟處于相應的進一步級別異常狀態(tài)中時專用,并且,指示相應的進一步級別堆棧數(shù)據(jù)儲存器在所述存儲器中所處的位置;以及選擇當前堆棧指針并控制所述處理步驟在處理數(shù)據(jù)時使用由所述當前堆棧指針所指示的當前堆棧數(shù)據(jù)儲存器;其中當所述處理步驟在所述基本級別異常狀態(tài)中處理數(shù)據(jù)時,所述選擇步驟將所述基本級別堆棧指針選作所述當前堆棧指針;并且,當所述處理步驟在所述至少一個進一步級別異常狀態(tài)中的一者中處理數(shù)據(jù)時,所述選擇步驟將所述基本級別堆棧指針及對應于當前進一步級別異常狀態(tài)的進一步級別堆棧指針中的一者選作所述當前堆棧指針,所述處理步驟繼續(xù)使用對應于所述當前進一步級 別異常狀態(tài)的異常返回寄存器,而不論所述當前堆棧指針是所述基本級別堆棧指針還是所述進一步級別堆棧指針。從另一方面來看,本發(fā)明提供一種數(shù)據(jù)處理裝置,其包括處理電路,其被配置為在包括基本級別異常狀態(tài)及至少一個進一步級別異常狀態(tài)的多個異常狀態(tài)中的一者中處理數(shù)據(jù);基本級別堆棧指針寄存器,其用于儲存指示基本級別堆棧數(shù)據(jù)儲存器在存儲器中所處位置的基本級別堆棧指針;至少一個進一步級別堆棧指針寄存器,其用于儲存指示至少一個進一步級別堆棧數(shù)據(jù)儲存器在所述存儲器中所處位置的至少一個進一步級別堆棧指針,至少一個進一步級別異常狀態(tài)各具有相應的進一步級別堆棧指針;以及異常控制器,其響應于與目標進一步級別異常狀態(tài)相關的異常事件,而觸發(fā)所述處理電路使用由對應于所述目標進一步級別異常狀態(tài)的進一步級別堆棧指針所指示的進一步級別堆棧數(shù)據(jù)儲存器,在所述目標進一步級別異常狀態(tài)中處理異常處理例程;其中,所述處理電路被配置為在處理完所述異常處理例程的初始部分后使用由所述基本級別堆棧指針所指示的所述基本級別堆棧數(shù)據(jù)儲存器在所述目標進一步級別異常狀態(tài)中處理所述異常處理例程的剩余部分。通過在進入目標進一步級別異常狀態(tài)后使用進一步級別堆棧指針,使得相應的異常處理例程具備專用并且使用頻率不高的堆棧,以確保安全啟動異常處理例程。在完成對異常處理例程的初始部分的處理后,隨后使用如基本級別堆棧指針所指示的用于異常級別基本級別的堆棧數(shù)據(jù)儲存器,在目標進一步級別異常狀態(tài)中對異常處理例程的剩余部分進行處理。一旦異常處理例程已安全開始后使用基本級別堆棧指針避免了對專用的進一步級別堆棧數(shù)據(jù)儲存器的過度使用,由此降低了進一步級別堆棧數(shù)據(jù)儲存器發(fā)生溢出的可能性。從另一方面來看,本發(fā)明提供一種數(shù)據(jù)處理裝置,其包括用于在包括基本級別異常狀態(tài)及至少一個進一步級別異常狀態(tài)的多個異常狀態(tài)中的一者中處理數(shù)據(jù)的處理部件;用于儲存指示基本級別堆棧數(shù)據(jù)儲存器部件在存儲器部件中所處位置的基本級別堆棧指針的基本級別堆棧指針寄存器部件;用于儲存指示至少ー個進ー步級別堆棧數(shù)據(jù)儲存器部件在所述存儲器部件中所處位置的至少ー個進ー步級別堆棧指針的至少ー個進ー步級別堆棧指針寄存器部件,至少ー個進一歩級別異常狀態(tài)中中的每ー個具有相應的進ー步級別堆棧指針;以及響應于與目標進一歩級別異常狀態(tài)相關的異常事件而觸發(fā)所述處理部件使用由對應于所述目標進ー步級別異常狀態(tài)的進一歩級別堆棧指針所指示的進ー步級別堆棧數(shù)據(jù)儲存器在所述目標進ー步級別異常狀態(tài)中處理異常處理例程的異常控制部件;其中,所述處理部件處理完所述異常處理例程的初始部分后被配置為使用由所述基本級別堆棧指針所指示的所述基本級別堆棧數(shù)據(jù)儲存器部件,并且,在所述目標進ー步級別異常狀態(tài)中處理所述異常處理例程的剰余部分。從另一方面來看,本發(fā)明提供ー種數(shù)據(jù)處理方法,包括以下步驟 在包括基本級別異常狀態(tài)及至少ー個進ー步級別異常狀態(tài)的多個異常狀態(tài)中的一者中處理數(shù)據(jù);儲存指示基本級別堆棧數(shù)據(jù)儲存器在存儲器中所處位置的基本級別堆棧指針;儲存指示至少ー個進ー步級別堆棧數(shù)據(jù)儲存器在所述存儲器內所處位置的至少ー個進一歩級別堆棧指針,其中至少ー個進ー步級別異常狀態(tài)各具有相應的進一歩級別堆找指針;響應于與目標進一歩級別異常狀態(tài)相關的異常事件,使用由對應于所述目標進ー步級別異常狀態(tài)的進一歩級別堆棧指針所指示的進ー步級別堆棧數(shù)據(jù)儲存器在所述目標進ー步級別異常狀態(tài)中觸發(fā)對異常處理例程的處理;以及在處理完所述異常處理例程的初始部分后,使用由所述基本級別堆棧指針所指示的所述基本級別堆棧數(shù)據(jù)儲存器,并且,在所述目標進ー步級別異常狀態(tài)中處理所述異常處理例程的剰余部分。


將參照附圖通過示例來描述本技術的實施例,其中圖I示意性地示出了具有用于處理異常事件的異常處理資源的數(shù)據(jù)處理裝置;圖2示出了所述處理裝置的多個異常狀態(tài);圖3示出了用于從基本級別堆棧指針及至少ー個進ー步級別堆棧指針選擇當前堆棧指針的技術;圖4示出了堆棧指針選擇指令;圖5示出了包括堆棧指針選擇指令的異常處理例程;圖6示出了指示用于訪問異常處理例程的各自地址偏移量的異常向量表;圖7示出了對異常事件響應的方法;圖8示意性地示出了響應于異常事件而在異常狀態(tài)間的切換;圖9示意性地示出了對堆棧溢出處理例程的處理;以及圖10示意性地示出了虛擬機實現(xiàn)。
具體實施方式
圖I示出了具有異常處理資源的數(shù)據(jù)處理裝置2。數(shù)據(jù)處理裝置2包括處理管道4,其用于在存儲器系統(tǒng)8加載的指令的控制下,處理儲存在寄存器6或存儲器系統(tǒng)8中的數(shù)據(jù)。處理管道4可包括各種管道階段,諸如用于自存儲器系統(tǒng)8取出指令的取出管道階段10 ;用于對所取出指令進行譯碼的譯碼管道階段12 ;用于發(fā)出待執(zhí)行指令的發(fā)出階段14(發(fā)出階段14于每處理周期可發(fā)出一個指令或多個指令,并且,可按次序或不按次序發(fā)出指令);用于執(zhí)行所發(fā)出指令的運行時間16 ;以及用于將處理結果回寫入寄存器6的返回階段
18。處理管道4并不局限于此等階段并且,可能包括其他階段,例如,用于對指令中所規(guī)定的寄存器區(qū)分符進行重新命名的重新命名階段。裝置2包括異??刂破?0,其響應于一個或多個異 常事件以控制處理管道4對異常處理例程進行處理。處理管道4具有用于處理異常事件的多個異常狀態(tài)。各異常狀態(tài)均具有不同性質。舉例而言,在圖2所示的示例性實施例中,基本級別異常狀態(tài)ELO為使用者級別異常狀態(tài);第一進一步級別異常狀態(tài)ELl為操作系統(tǒng)級別異常狀態(tài);第二進一步級別異常狀態(tài)EL2為超管理器級別異常狀態(tài),而第三進一步級別異常狀態(tài)EL3為安全監(jiān)控級別異常狀態(tài)。如圖2所示,在各異常狀態(tài)中,可存在多種模式,諸如非安全模式及安全模式。并非所有異常狀態(tài)均需要在兩種模式下可用。舉例而言,在第2圖中,進一步級別異常狀態(tài)EL2僅在非安全狀態(tài)下可用,而進一步級別異常狀態(tài)EL3僅在安全狀態(tài)下可用。圖2的異常狀態(tài)圖僅為示例性實施例,并且,可能存在其他數(shù)目和配置的異常狀態(tài)。每個異常事件針對于進一步級別異常狀態(tài)EL1-EL3中的具體一個。舉例而言,具體的異常事件可需要在操作系統(tǒng)級別異常狀態(tài)ELl或超管理器級別異常狀態(tài)EL2中進行處理,并可針對于適當級別。異??刂破?0隨后在目標級別異常狀態(tài)中控制處理管道4處理相應的異常處理例程。異常事件可經(jīng)優(yōu)先化以使得針對于當前或較高異常狀態(tài)的異常事件在處于給定異常狀態(tài)中時預先制止或中斷執(zhí)行,并且,在目標異常狀態(tài)中導致執(zhí)行。在罕見場合下,即在給定異常狀態(tài)下使用執(zhí)行而發(fā)生針對低異常狀態(tài)的異常時,可忽視所述異常(如果這樣做是安全的),或者預先制止執(zhí)行并在當前異常級別中導致處理器的執(zhí)行。針對與當前級別異常狀態(tài)相同的級別異常狀態(tài)的異常事件通常不會中斷當前程序,但如果異常事件直接由已經(jīng)使得當前處理停止的問題導致,則可能需要采取中斷措施。再次參照圖1,裝置2包括若干上下文寄存器24,其用于儲存可在處理異常事件時使用的異常上下文數(shù)據(jù)。上下文寄存器24包括如果干異常返回寄存器,其包括異常鏈路寄存器(exception link registers;ELR) 26 及保存程序狀態(tài)寄存器(saved process stateregisters ;SPSR) 28。至少所述進一步級別異常狀態(tài)(即,除基本級別異常狀態(tài)ELO以外的所有異常狀態(tài))具有相應的異常返回寄存器(可將異常鏈路寄存器26及保存程序狀態(tài)寄存器28共同視為代表異常返回寄存器)。一旦已經(jīng)在相應的進一步級別異常狀態(tài)下完成正在處理的異常處理例程,則每個異常鏈路寄存器26將儲存指示待處理指令的異常返回地址。每個保存程序狀態(tài)寄存器28儲存各個上下文狀態(tài)數(shù)據(jù),諸如中斷掩碼、標志或執(zhí)行掩碼,以供在相應的進一步級別異常狀態(tài)中處理異常處理例程時使用。在圖I的實施例中,由于預計異常事件將針對于進一步級別異常狀態(tài)中的一者,因此,基本級別異常狀態(tài)ELO不具有相應的異常鏈路寄存器26或保存程序狀態(tài)寄存器28。然而,在其中異常事件同樣可在基本級別異常狀態(tài)下處理的實施例中,基本級別異常狀態(tài)ELO亦可具有相應的異常鏈路寄存器26或保存程序狀態(tài)寄存器28。
上下文寄存器24還包括堆棧指針寄存器30。異常狀態(tài)中中的每ー個具有相應的堆棧指針寄存器30,其指示相應的堆棧數(shù)據(jù)儲存器35在存儲器系統(tǒng)8中所處的位置。基本級別堆棧指針寄存器30-0識別基本級別堆棧數(shù)據(jù)儲存器35-0、35-0’、35_0〃及35_0〃’在存儲器系統(tǒng)8內所處的位置,所述基本級別堆棧指針寄存器30-0可在處理管道4處于異常狀態(tài)EL0-EL3中任一個時進行訪問。相反,進ー步級別堆棧指針寄存器30-1、30-2、30-3識別存儲器系統(tǒng)8內相應的進一步級別堆棧數(shù)據(jù)儲存器35-1、35-2、35-3,并且,每個進一歩級別堆棧指針寄存器僅可在處理管道4處于相應的進一歩級別異常狀態(tài)EL1、EL2、EL3中時使用。本領域技術人員將了解盡管基本級別堆棧數(shù)據(jù)儲存器35-0……35-0"'被稱為基本級別堆棧數(shù)據(jù)儲存器,但對處在異常狀態(tài)下使用的基本級別堆棧數(shù)據(jù)儲存器進行訪問以在較低異常狀態(tài)中執(zhí)行是不恰當?shù)?。提供堆棧指針選擇電路40以選擇堆棧指針30中的哪ー個當前正在使用。當處理管道4處在基本級別異常狀態(tài)ELO中時,選擇基本級別堆棧指針寄存器30-0中所儲存的基本級別的堆棧指針,并且,處理管道4由選擇電路40控制以使用基本級別堆棧35-0儲存變 量。當處理管道4處于進一歩級別異常狀態(tài)EL1-EL3中的一個時,堆棧指針選擇電路40響應于堆棧指針選擇寄存器42中所儲存的堆棧指針選擇值,以選擇基本級別堆棧指針寄存器30-0中所儲存的,并且,對應于基本級別的堆棧數(shù)據(jù)儲存器35-0’、35-0〃及35_0〃’中各別儲存器的基本級別堆棧指針,或選擇堆棧指針寄存器30-1、30-2、30-3中的ー個內所儲存的,并對應于處理管道4的當前異常狀態(tài)的進ー步級別堆棧指針。堆棧指針選擇電路40可接收來自異常控制器20的信號,其指示處理管道4的當前異常狀態(tài)?;蛘?,處理管道4可告知堆棧指針選擇電路40其當前異常狀態(tài)。取決于堆棧指針選擇寄存器42中所儲存的值及當前異常狀態(tài),堆棧指針選擇電路40選擇當前堆棧指針,隨后控制處理管道4使用所述當前堆棧指針以用于訪問堆棧數(shù)據(jù)儲存器35中的相應儲存器。通過為各進ー步級別異常狀態(tài)提供對兩個不同堆棧(基本級別堆棧35-0’、35_0〃或35-0〃’中的一者,及進ー步級別堆棧35-1、35-2、35-3中的ー個)的訪問,進而為各進一步級別異常狀態(tài)提供安全專用堆棧,以使在所述異常狀態(tài)中執(zhí)行的異常處理程序在不發(fā)生溢出堆棧的風險的情況下安全地啟動,同時各別基本級別的堆棧35-0’、35-0〃或35-0〃’可用于所述異常級別中的通常處理。在可能的情況下,使用基本級別(通常目的)堆棧35-0’、35-0"或35-0",以避免使得專用堆棧過載并在專用堆棧的上騰出空間以用于進入異常處理程序。堆棧指針選擇寄存器42可儲存具有兩個可能值的堆棧指針選擇值。當堆棧指針選擇值具有第一值(例如,值為0)吋,則堆棧指針選擇電路可將基本級別堆棧指針寄存器30-0中所儲存的基本級別的堆棧指針選作當前堆棧指針。在另一方面,當堆棧指針選擇值具有第二值(例如,值為I)吋,則堆棧指針選擇電路40可將與當前進ー步級別異常狀態(tài)相關的進一步級別堆棧指針選作當前堆棧指針。圖3示出了當使用堆棧指針選擇值的映射時,堆棧指針選擇電路40的操作的示例。在開始處理后,在步驟50處,堆棧指針選擇電路40檢查處理管道4的當前異常狀態(tài)。如上文所提及,可能要通過異常控制器20所提供的異常級別信號來進行此檢查。如果在步驟50處,決定當前異常狀態(tài)處于基本級別異常狀態(tài)ELO,則方法行進行至步驟52,其中堆棧指針選擇電路40將基本級別堆棧指針寄存器30-0中所儲存的基本級別的堆棧指針選作當前堆棧指針。隨后,控制處理管道4以將基本級別堆棧35-0用作當前堆棧數(shù)據(jù)儲存器。在將異常引入異常狀態(tài)后,SPSel經(jīng)設置用于選擇專用異常堆棧指針。在另一方面,如果在步驟50處,堆棧指針選擇電路40決定當前異常狀態(tài)為進一步級別異常狀態(tài)ELx中的一個(其中,X為任何大于或等于I的整數(shù)),則方法行進行至步驟54,其中堆棧指針選擇電路40讀取堆棧指針選擇寄存器42中所儲存的堆棧指針選擇值。在此實施例中,如果堆棧指針選擇值為0,則方法行進行至步驟56,其中將基本級別堆棧指針選作當前堆棧指針,并控制處理管道4來使用基本級別堆棧35-0。在另一方面,如果在步驟54處,堆棧指針選擇值為1,則方法行進行至步驟58,其中將對應于當前進一步級別異常狀態(tài)ELx的堆棧指針SPx選作當前堆棧指針,并控制處理管道4以將對應于當前異常狀態(tài)的堆棧數(shù)據(jù)儲存器35-x用作當前堆棧數(shù)據(jù)儲存器。
此后,當處理管道4需要堆棧指針時,堆棧指針選擇電路40則將向處理管道4提供當前堆棧指針(以作為對應于當前堆棧指針的堆棧指針值,或者作為對儲存當前堆棧指針的堆棧指針寄存器30中的一個的基準)。無論哪個堆棧指針為當前堆棧指針,除非通過異常預先制止,否則對各指令的處理將繼續(xù)進行。如圖3中所示,當處理管道4處于進一步級別異常狀態(tài)中的一個時,堆棧指針選擇寄存器42則將控制哪個堆棧指針應為當前堆棧指針。由處理管道4執(zhí)行的堆棧指針選擇指令可對堆棧指針選擇寄存器42內所儲存的值進行修改。第4標堆棧指針選擇指令的示例性語法。堆棧指針選擇指令包括規(guī)定堆棧指針選擇寄存器42的位置的寄存器區(qū)分符SPSel,及規(guī)定待寫入堆棧指針選擇寄存器42的立即值的立即值舉例而言,當立即值為0時,則此情況將把堆棧點選擇寄存器42設定成控制堆棧指針選擇電路40來將基本級別堆棧指針選作當前堆棧指針,而當立即值為I時,則此情況將把堆棧指針選擇寄存器42設定成控制堆棧指針選擇電路40來將進一步級別堆棧指針中的一者選作當前堆棧指針。當然,值0及值I與基本級別及進一步級別堆棧指針的間的映射可顛倒。堆棧指針選擇指令可在立即值未寫入寄存器組6的情況下,直接修改堆棧指針選擇寄存器42?;蛘撸褩V羔樳x擇指令可能需要在立即值寫入到堆棧指針選擇寄存器42的前,將立即值寫入寄存器組6。通過提供如圖4所示的堆棧指針選擇指令,程序員能夠將堆棧指針選擇指令包括在異常處理例程中,以控制當前堆棧數(shù)據(jù)儲存器自進一步級別堆棧數(shù)據(jù)儲存器35-1、35-2、35-3切換至用于異常級別各別基本級別堆棧數(shù)據(jù)儲存器35-0’、35-0〃或35-0〃’的點。如圖5所示,此類異常處理例程包括初始部分與剩余部分,其中在初始部分中,進一步級別堆棧數(shù)據(jù)儲存器35-1、35-2、35-3中的一者用作當前堆棧數(shù)據(jù)儲存器,而在剩余部分中,基本級別堆棧數(shù)據(jù)儲存器35-0用作當前堆棧數(shù)據(jù)儲存器。堆棧指針選擇指令在異常處理例程內所處位置決定初始部分與剩余部分的相對大小,并且,可取決于安全處理異常事件所需專用堆棧的程度而按需要變化。異常處理例程的初始部分使用進一步級別堆棧數(shù)據(jù)儲存器,以便提供安全的專用堆棧儲存器來啟動異常處理例程的處理,而異常處理例程的其余部分使用用于異常級別相關基本級別的堆棧數(shù)據(jù)儲存器,以避免使專用堆棧過載。
堆棧指針選擇寄存器42還可用于選擇應將多個相應的異常處理程序中的哪ー個用于處理特定異常事件。異常控制器20可包括異常向量表,此表指示用于處理異常級別的各種異常處理例程在存儲器系統(tǒng)8中所處的位置。在圖6中示出了異常向量表的示例。對于不同類型的異常事件(例如,如從ARM處理器架構同步、正常中斷(normalinterrupt; IRQ)、快速中斷(fast interrupt;FIQ)或錯誤異常事件中可得知)而言,多個不同異常處理例程由不同地址偏移量值識別。因而,在通過向異常處理器的基本地址寄存器中儲存的基本地址添加相應地址偏移量后所獲得的存儲器地址處,可訪問異常處理例程。針對不同情況可提供不同異常處理器來進行解決(例如,不同系統(tǒng)模式可能需要不同的異常處理例程)。當異常事件針對于與當前級別異常狀態(tài)相同的級別異常狀態(tài)時,則可能有用的是提供多個不同種類的異常處理器(包括至少ー個堆棧溢出異常處理器),這種異常處理器的選擇取決于發(fā)生異常事件時當前堆棧指針是基本級別堆棧指針還是進一歩級別堆棧指針中的一者。此狀況被在圖6中示出,其中,針對當前堆棧指針為進一歩級別堆棧指針中的一者及當前堆棧指針為基本級別堆棧指針的各自情況,提供不同地址偏移量以識別不同異常處理例程。因此,異??刂破?0可響應于堆棧指針選擇寄存器42的當前值,以選擇應對異 常處理器中何者進行處理。由于并非由先前處理的異常處理例程所導致的,并且,針對于與當前異常狀態(tài)級別相同的異常事件可能并未中斷先前處理的異常處理例程,因此,這可能是有用的,因為當新的異常事件針對于與當前異常狀態(tài)相同的異常狀態(tài)時,這指示在執(zhí)行先前處理的異常處理例程期間已經(jīng)發(fā)生問題。另外,如果堆棧指針選擇寄存器指示當前堆棧指針為進一歩級別堆棧指針中的ー個,則這指示在當前堆棧指針切換成基本級別堆棧指針的前,在先前處理的異常處理例程的初始部分期間發(fā)生問題。因此,對于所述異常事件的原因可能為當前使用的進ー步級別堆棧35-1、35-2或35-3發(fā)生溢出。如果隨后加載了正常異常處理器,則此處理器可能試圖將變量壓入已溢出的堆棧上,并且,這可能觸發(fā)其自身又希望將變量加載至堆棧上的又ー異常,因此將系統(tǒng)送入遞歸異常登錄。為避免異常事件的這種遞歸調用,提供堆棧溢出異常處理器以用于解決堆棧溢出的罕見情形,并且,當與目標異常事件相同的異常級別調用異常事件,并且,堆棧指針選擇寄存器42指示當前堆棧指針為進一歩級別堆棧指針中的ー個時,調用此異常處理器。因此,此情況可不同于異常狀態(tài)內的異常(所述異常正在使用基本堆棧指針而無需使用任何寄存器),因為使用寄存器的正常方式將為把緊接著可能導致遞歸的舊值保存在堆棧上的所述寄存器中。因此,與使處理器在遞歸異常進入的無盡循環(huán)回路中自旋相反,即使堆棧溢出異常處理例程無法修復堆棧,也可獲得錯誤情況的完整診斷信息及對其更干凈的處理。圖7示出了處理異常事件的方法。最初,在步驟100處,處理管道4在異常狀態(tài)ELm (其中,m為大于或等于0的整數(shù))的一者中處理數(shù)據(jù)。因此,管道4在異常狀態(tài)的任何一者中處理數(shù)據(jù)。隨后,在步驟102處,發(fā)生針對于特定進ー步級別異常狀態(tài)ELn (其中,n為大于或等于I的整數(shù);并且,n亦大于或等于m (如果n小于m,則異常事件將不會中斷當前處理))的異常事件。在步驟104處,異常控制器20將處理管道4置放于異常狀態(tài)ELn中(或者如果n=m,則將處理管道4保持在與的前相同的異常狀態(tài)中),并將異常返回數(shù)據(jù)儲存在對應于目標異常狀態(tài)ELn的異常鏈路寄存器26及保存程序狀態(tài)寄存器28中。所儲存的異常返回數(shù)據(jù)為用于一旦異常事件的處理完成則使系統(tǒng)能夠返回至初始處理的數(shù)據(jù)。
在步驟106處,異??刂破?0決定在發(fā)生異常事件時,異常狀態(tài)ELm是否與目標異常狀態(tài)ELn相同。如果初始異常狀態(tài)與目標異常狀態(tài)不同,則在步驟108處,將堆棧指針選擇寄存器42設定為值1,以指示與目標異常狀態(tài)SPn相關的堆棧指針為當前堆棧指針。在步驟110處,異常控制器20隨后選擇對應于異常事件的異常處理例程,并控制處理管道4開始執(zhí)行異常處理例程。處理管道4隨后使用與目標異常狀態(tài)ELn相關的堆棧35-n而繼續(xù)處理異常處理例程。對異常處理例程的處理一直持續(xù)至步驟112,在步驟112處,決定對異常處理例程的初始部分的處理已經(jīng)完成。用于決定對異常處理例程的初始部分的處理何時完成的方式為提供圖4所示的堆棧指針選擇指令?;蛘?,可在堆棧指針選擇電路40內提供計數(shù)器,以計算自從異常處理例程開始后所經(jīng)歷的處理周期或指令的預定數(shù)目,并在計數(shù)器達到預定值后觸發(fā)對初始部分的處理的結束。在切換為使用基本級別堆棧指針的 前,基本級別堆棧指針的內容則改成指向用于此異常級別的基本級別堆棧數(shù)據(jù)儲存器。當對異常處理例程的初始部分的處理完成時,則在步驟114處,將堆棧指針選擇寄存器42中所儲存的堆棧指針選擇值設為0,并且,當前堆棧指針因此變成基本級別堆棧指針O。隨后將各別基本級別的堆棧數(shù)據(jù)儲存器35-0’、35-0〃或35-0〃’用作當前堆棧來對異常處理例程的剩余部分進行處理。處理隨后繼續(xù)進行,直至異常處理例程在步驟116處結束為止。隨后,在步驟118處,自對應于目標異常狀態(tài)ELn的異常鏈路寄存器26及保存程序狀態(tài)寄存器28加載異常返回數(shù)據(jù),并且,隨后使處理管道4回置放于初始異常狀態(tài)Elm中。在步驟120處,處理隨后在異常狀態(tài)Elm中繼續(xù)進行。方法隨后結束。如果在步驟106處,初始異常狀態(tài)ELm與關于異常事件的目標異常狀態(tài)ELn相同,則在步驟122處決定堆棧指針選擇寄存器42中所儲存的堆棧指針選擇值為I或0(圖7示出了其中0指示正使用基本級別堆棧指針,而I指示正使用進一步級別堆棧指針,但很清楚,I與0的意義可顛倒)。如果堆棧指針選擇值為0,則處理繼續(xù)進行至步驟108-120。盡管當m與n相等時,由中斷控制器120所選擇的具體的異常處理例程可能與當m與n不相等時所選擇的異常處理例程不相同(這取決于中斷控制器的向量表內的地址偏移量集),然而步驟108-120中所示的堆棧指針處理相同。在另一方面,如果堆棧指針選擇值在步驟122處相等,則在步驟124處,異??刂破?0選擇對應于堆棧溢出處理例程的異常向量,并控制處理管道4執(zhí)行用于處理堆棧溢出的堆棧溢出處理例程。這是因為堆棧35-n存在發(fā)生堆棧溢出的風險。堆棧溢出處理例程至少能夠為系統(tǒng)重置做好準備(通過儲存一些上下文數(shù)據(jù)從而防止數(shù)據(jù)丟失)。在步驟126處,決定堆棧溢出異常是否已經(jīng)恢復。如果恢復已達成并且,處理可照常繼續(xù)執(zhí)行,則方法行進行至步驟108,在步驟108處,以與堆棧指針選擇值為0時所經(jīng)由的方式相同的方式執(zhí)行正常的異常處理例程。然而,如果恢復尚未達成,則處理隨后結束。因此,圖7所示的技術使安全專用堆棧能夠用于異常處理例程的初始部分,以確保異常處理例程安全地開始。這避免異常處理例程由于共享堆棧發(fā)生溢出而無法開始。在對異常處理例程的初始部分的處理完成的后,則使用基本級別堆棧繼續(xù)處理,以便保留專用安全的堆棧的資源。如果出現(xiàn)本可發(fā)生溢出的不可能事件,則可根據(jù)已經(jīng)在堆棧指針選擇值指示當前堆棧為進一步級別堆棧中的一個時發(fā)出針對于當前異常狀態(tài)的異常的事實而識別此狀況,并且,在此情形下,可執(zhí)行緊急堆棧溢出處理例程,而不論堆棧實際上是否已經(jīng)溢出,從而防止堆棧溢出。如果在圖7處理期間的任意時刻,發(fā)生異??刂破?0決定其具有足以中斷當前處理的高異常級別的進ー步異常事件,則經(jīng)由將步驟100中所執(zhí)行的處理用作先前執(zhí)行的處理,同時將步驟102中所發(fā)生的異常事件用作進ー步異常事件來使圖7的方法重新開始。舉例而言,如果圖7的步驟108與100的間發(fā)生針對于與當前異常狀態(tài)相同的異常狀態(tài)的異常事件,則這可觸發(fā)對步驟106及步驟122-126的處理,因為堆棧指針選擇值仍將設定為I以用于指示當前堆棧指針為進ー步級別堆棧指針。圖8示出了根據(jù)圖7的方法的用于處理異常事件的實例。舉例而言,在圖8的步驟I處,使用基本級別堆棧指針SPO在基本級別異常狀態(tài)ELO中進行處理。在圖8的步驟2處,異常控制器20檢測到以進一歩級別異常狀態(tài)EL2為目標的異常事件。系統(tǒng)隨后切換至 進ー步級別異常狀態(tài)EL2,并且,異常返回數(shù)據(jù)經(jīng)儲存至與異常狀態(tài)EL2相關的異常返回寄存器26、28 (根據(jù)圖7的步驟104)。在圖8的步驟3處,隨后選擇堆棧指針寄存器30_2中所儲存的堆棧指針SP2,并且,使用其位置由堆棧指針SP2指示的堆棧35-2來處理異常處理例程。在圖8的步驟4處,在異常處理例程內會遇到堆棧指針選擇指令,由此將當前堆棧指針切換成基本級別堆棧指針寄存器30-0中所儲存的基本級別堆棧指針SPO (根據(jù)第7圖的步驟114)。在圖8的步驟5處,異常處理例程使用基本級別堆棧數(shù)據(jù)儲存器35-0來繼續(xù)執(zhí)行。在圖8的步驟6處,異常處理例程結束,并且,所述處理使用對應于異常狀態(tài)EL2的異常返回寄存器26、28中所儲存的異常返回數(shù)據(jù),而返回至基本級別異常狀態(tài)ELO中的原始處理。在圖8的步驟7處,隨后在基本級別異常狀態(tài)ELO中,使用由基本級別堆棧指針SPO所指示的基本級別堆棧35-0來繼續(xù)處理。圖9示出了根據(jù)圖7的方法在需要堆棧溢出處理例程的情形下處理異常事件吋,對異常狀態(tài)進行切換的另ー實例。在圖9的步驟I處,使用基本級別堆棧指針SPO在基本級別異常狀態(tài)ELO中進行處理。在圖9的步驟2處接收到針對于進ー步級別異常狀態(tài)ELl的異常事件。根據(jù)圖7的步驟104,系統(tǒng)切換至進ー步級別異常狀態(tài)EL1,并且,異常返回數(shù)據(jù)經(jīng)儲存在與進ー步級別異常狀態(tài)ELl相關的異常返回寄存器26、28中。異常控制器20隨后選擇與異常事件相關的異常處理例程,并使用與異常狀態(tài)ELl相關的堆棧指針寄存器30-1中所儲存的進ー步級別堆棧指針SPl來處理所選擇的異常處理例程。然而,在完成對異常處理例程的初始部分的處理的前,還發(fā)生針對于相同異常狀態(tài)ELl的另ー異常事件。因此,重新開始圖7的方法,并且,在圖7的步驟106及122處,決定當前異常狀態(tài)ELl與目標異常狀態(tài)ELl相同,及堆棧指針選擇寄存器42內所儲存的堆棧指針選擇值指示當前堆棧指針為進一歩級別堆棧指針SP1。這意味著,在圖9的步驟5處(井根據(jù)第7圖的步驟124),作為萬一在圖9的步驟4處發(fā)生的異常事件指示與當前異常狀態(tài)相關的堆棧35-1發(fā)生溢出時的防護措施來執(zhí)行堆棧溢出處理例程。堆棧溢出處理例程隨后修復堆棧35-1或者至少將系統(tǒng)置放于可中止處理而不丟失過量數(shù)據(jù)的狀態(tài)中。如果必要,則在圖9的步驟6處(圖7的步驟126)提供合適的診斷信息的同時終止處理。在另一方面,如果處理可繼續(xù),則使用進ー步級別堆棧指針SPl在圖9的步驟7處的進一歩級別異常狀態(tài)ELl中處理原始異常處理程序。在完成對異常處理例程的初始部分的處理后,隨后在圖9的步驟8處,當前堆棧指針切換成基本級別的堆棧指針SP0。在異常處理例程的結束,隨后在圖9的步驟9處,使用自異常返回寄存器26、28所加載的異常返回數(shù)據(jù),處理返回至基本級別的異常狀態(tài)。隨后,使用基本級別堆棧指針SPO在基本級別的異常狀態(tài)中繼續(xù)處理。圖10示出了可以使用的虛擬機實施例。當較早描述的實施例依據(jù)用于操作可支持所關心的技術的具體處理硬件的裝置及方法而實施本發(fā)明時,還可為硬設備提供所謂的虛擬機實現(xiàn)。這種虛擬機實現(xiàn)在主處理器530上執(zhí)行,而主處理器530執(zhí)行可支持虛擬機程序510的主操作系統(tǒng)520。通常而言,需要大功率處理器來提供以合理速度執(zhí)行的虛擬機實現(xiàn),但此途徑可能僅在某些境況下(諸如出于兼容性或重復使用原因,期望執(zhí)行另一處理器的本地代碼時)證明有效。虛擬機程序510向應用程序500提供應用程序編程接口,該應用程序編程接口與將由作為虛擬機程序510模型化設備的實際硬件提供的應用程序編程接口相同。因此,可使用虛擬機程序510,自應用程序500內部執(zhí)行包括對如上所述的存儲器訪問進行控制的程序指令,以將其與虛擬機硬件的互動模型化。盡管此處已參照附圖詳細描述了本發(fā)明的闡釋性實施例,但是,要理解本發(fā)明并 不限于那些精確的實施例,并且,在不脫離所附權利要求所定義的本發(fā)明范圍的情況下,本領域技術人員可進行各種變更和修改。
權利要求
1.一種數(shù)據(jù)處理裝置,包括 處理電路,所述處理電路被配置為處理數(shù)據(jù),所述處理電路具有多個異常狀態(tài),所述異常狀態(tài)包括基本級別異常狀態(tài)及至少一個進一步級別異常狀態(tài); 至少一個異常返回寄存器,所述異常返回寄存器用于儲存異常返回數(shù)據(jù)以控制所述處理電路從處理異常事件返回,所述至少一個進一步級別異常狀態(tài)各具有相應的異常返回寄存器,在處于相應的進一步級別異常狀態(tài)中時,所述異常返回寄存器由所述處理電路專用; 基本級別堆棧指針寄存器,所述基本級別堆棧指針寄存器用于儲存基本級別堆棧指針以便在所述處理電路處于所述異常狀態(tài)中的任何一者時使用,所述基本級別堆棧指針指示基本級別堆棧數(shù)據(jù)儲存器在存儲器中的位置; 至少一個進一步級別堆棧指針寄存器,所述進一步級別堆棧指針寄存器用于儲存至少一個進一步級別堆棧指針,每個進一步級別堆棧指針專用于所述處理電路處于相應的進一步級別異常狀態(tài)中時,并且,指示相應的進一步級別堆棧數(shù)據(jù)儲存器在所述存儲器中的位置;以及 堆棧指針選擇電路,所述堆棧指針選擇電路被配置為選擇當前堆棧指針,并且,被配置為控制所述處理電路在處理數(shù)據(jù)時使用由所述當前堆棧指針所指示的當前堆棧數(shù)據(jù)儲存器;其中: 當所述處理電路處于所述基本級別異常狀態(tài)中時,所述堆棧指針選擇電路被配置為將所述基本級別堆棧指針選作所述當前堆棧指針;以及 當所述處理電路處于所述至少一個進一步級別狀態(tài)中的一者時,所述堆棧指針選擇電路被配置為將所述基本級別堆棧指針及對應于當前進一步級別異常狀態(tài)的所述進一步級別堆棧指針中的一者選作所述當前堆棧指針,所述處理電路繼續(xù)使用對應于所述當前進一步級別異常狀態(tài)的所述異常返回寄存器,而不論所述當前堆棧指針是所述基本級別堆棧指針還是所述進一步級別堆棧指針。
2.如權利要求I所述的數(shù)據(jù)處理裝置,其中,所述堆棧指針選擇電路響應于與目標進一步級別異常狀態(tài)相關的異常事件,來將對應于所述目標進一步級別異常狀態(tài)的所述進一步級別堆棧指針選作所述當前堆棧指針。
3.如權利要求2所述的數(shù)據(jù)處理裝置,其中,所述處理電路響應于所述異常事件,而在所述目標進一步級別異常狀態(tài)中處理異常處理例程;以及 所述堆棧指針選擇電路被控制為在所述處理電路已經(jīng)完成對所述異常處理例程的初始部分的處理之后,將所述當前堆棧指針自對應于所述目標進一步級別異常狀態(tài)的所述進一步級別堆棧指針切換成所述基本級別堆棧指針。
4.如權利要求3所述的數(shù)據(jù)處理裝置,其中,所述異常處理例程包括指令,所述指令用于控制所述堆棧指針選擇電路,以將所述當前堆棧指針自對應于所述目標進一步級別異常狀態(tài)的所述進一步級別堆棧指針切換成所述基本級別堆棧指針。
5.如前述權利要求中的任一項所述的數(shù)據(jù)處理裝置,包括堆棧指針選擇寄存器,所述堆棧指針選擇寄存器被配置為儲存堆棧指針選擇值,所述堆棧指針選擇值指示所述當前堆棧指針是所述基本級別堆棧指針還是對應于所述當前進一步級別異常狀態(tài)的所述進一步級別堆棧指針。
6.如權利要求5所述的數(shù)據(jù)處理裝置,其中,當所述處理電路處于所述至少一個進一步級別異常狀態(tài)中的一者時,所述堆棧指針選擇電路取決于所述堆棧指針選擇值而選擇所述當前堆棧指針。
7.如權利要求6所述的數(shù)據(jù)處理裝置,其中,當所述處理電路處于所述至少一個進一步級別異常狀態(tài)中的一者時,所述堆棧指針選擇電路被配置為 (i)當所述堆棧指針選擇值具有第一值時,將所述基本級別堆棧指針選作所述當前堆棧指針;以及 (ii)當所述堆棧指針選擇值具有第二值時,將對應于所述當前進一步級別異常狀態(tài)的所述進一步級別堆棧指針選作所述當前堆棧指針。
8.如權利要求6和7中的任一項所述的數(shù)據(jù)處理裝置,其中所述處理電路響應于堆棧指針選擇指令,而將一更新的堆棧指針選擇值寫入所述堆棧指針選擇寄存器。
9.如權利要求5至8中的任一項所述的數(shù)據(jù)處理裝置,包括異??刂破?,所述異??刂破黜憫诋惓J录刂扑鎏幚黼娐穪硖幚韺谒霎惓J录漠惓L幚砝?,至少一個異常事件具有多個相應的異常處理例程; 其中,一旦發(fā)生所述至少一個異常事件,則所述異??刂破鬟x擇所述多個相應的異常處理例程中的一者,以用于通過所述處理電路取決于所述堆棧指針選擇值來作處理。
10.如權利要求9所述的數(shù)據(jù)處理裝置,其中,所述多個相應的異常處理例程包括堆棧溢出處理例程,所述堆棧溢出處理例程用于處理所述至少一個進一步堆棧數(shù)據(jù)儲存器的堆棧溢出,并且,所述異常控制器被配置為當與所述至少一個異常事件相關的目標進一步級別異常狀態(tài)與所述處理電路的所述當前進一步級別異常狀態(tài)相同,并且,所述堆棧指針選擇值指示所述進一步級別堆棧指針是所述當前堆棧指針時,一旦發(fā)生所述至少一個異常事件,則控制所述處理電路處理所述堆棧溢出處理例程。
11.如前述權利要求中的任一項所述的數(shù)據(jù)處理裝置,還包括所述存儲器。
12.—種數(shù)據(jù)處理裝置,包括 用于處理數(shù)據(jù)的處理部件,所述處理部件具有多個異常狀態(tài),所述異常狀態(tài)包括基本級別異常狀態(tài)及至少一個進一步級別異常狀態(tài); 至少一個異常返回寄存器部件,用于儲存異常返回數(shù)據(jù)以控制所述處理部件從處理異常事件返回,所述至少一個進一步級別異常狀態(tài)各具有在處于所述相應的進一步級別異常狀態(tài)時所述處理部件所專用的相應的異常返回寄存器部件; 基本級別堆棧指針寄存器部件,用于儲存基本級別堆棧指針以便在所述處理部件處于所述異常狀態(tài)中的任何一者時使用,所述基本級別堆棧指針指示基本級別堆棧數(shù)據(jù)儲存器部件在存儲器部件中所處的位置; 至少一個進一步級別堆棧指針寄存器部件,用于儲存至少一個進一步級別堆棧指針,每個進一步級別堆棧指針為在所述處理部件處于相應的進一步級別異常狀態(tài)中時所專用,并且,指示相應的進一步級別堆棧數(shù)據(jù)儲存器部件在所述存儲器部件中所處的位置;以及 堆棧指針選擇部件,用于選擇當前堆棧指針,并且,用于控制所述處理部件在處理數(shù)據(jù)時,使用由所述當前堆棧指針所指示的當前堆棧數(shù)據(jù)儲存器部件;其中 當所述處理部件處于所述基本級別異常狀態(tài)中時,所述堆棧指針選擇部件被配置為將所述基本級別堆棧指針選作所述當前堆棧指針;以及當所述處理部件處于所述至少一個進ー步級別狀態(tài)中的ー者時,所述堆棧指針選擇部件被配置為將所述基本級別堆棧指針及對應于當前進ー步級別異常狀態(tài)的所述進ー步級別堆棧指針中的ー者選作所述當前堆棧指針,所述處理部件繼續(xù)使用對應于所述當前進ー步級別異常狀態(tài)的所述異常返回寄存器部件,而不論所述當前堆棧指針是所述基本級別堆棧指針還是所述進ー步級別堆棧指針。
13.一種數(shù)據(jù)處理的方法,所述方法包括以下步驟 在多個異常狀態(tài)的ー者中處理數(shù)據(jù),所述異常狀態(tài)包括基本級別異常狀態(tài)及至少ー個進ー步級別異常狀態(tài); 響應于異常事件,在至少ー個異常返回寄存器內儲存異常返回數(shù)據(jù)以控制從處理異常事件返回,所述至少ー個進一歩級別異常狀態(tài)各具有在所述相應的進ー步級別異常狀態(tài)中進行處理時專用的相應的異常返回寄存器; 儲存基本級別堆棧指針,以在所述處理步驟處于所述異常狀態(tài)中的任何ー者時使用,所述基本級別堆棧指針指示基本級別堆棧數(shù)據(jù)儲存器在存儲器中的位置; 儲存至少ー個進ー步級別堆棧指針,每個進ー步級別堆棧指針在所述處理步驟處于相應的進一歩級別異常狀態(tài)中時專用,并且,指示相應的進一步級別堆棧數(shù)據(jù)儲存器在所述存儲器中所處的位置;以及 選擇當前堆棧指針并控制所述處理步驟在處理數(shù)據(jù)時使用由所述當前堆棧指針指示的當前堆棧數(shù)據(jù)儲存器;其中 當所述處理步驟在所述基本級別異常狀態(tài)中處理數(shù)據(jù)時,所述選擇步驟將所述基本級別堆棧指針選作所述當前堆棧指針;并且, 當所述處理步驟在所述至少ー個進一歩級別異常狀態(tài)中的一者中處理數(shù)據(jù)時,所述選擇步驟將所述基本級別堆棧指針及對應于當前進ー步級別異常狀態(tài)的所述進一歩級別堆棧指針中的ー者選作所述當前堆棧指針,所述處理步驟繼續(xù)使用對應于所述當前進ー步級別異常狀態(tài)的所述異常返回寄存器,而不論所述當前堆棧指針是所述基本級別堆棧指針還是所述進ー步級別堆棧指針。
14.ー種數(shù)據(jù)處理裝置,包括 處理電路,所述處理電路被配置為在包括基本級別異常狀態(tài)及至少ー個進ー步級別異常狀態(tài)的多個異常狀態(tài)中的一者中處理數(shù)據(jù); 基本級別堆棧指針寄存器,用于儲存指示基本級別堆棧數(shù)據(jù)儲存器在存儲器中所處位置的基本級別堆棧指針; 至少ー個進ー步級別堆棧指針寄存器,用于儲存指示至少ー個進ー步級別堆棧數(shù)據(jù)儲存器在所述存儲器中的位置的至少ー個進ー步級別堆棧指針,所述至少ー個進一歩級別異常狀態(tài)各具有相應的進ー步級別堆棧指針;以及 異??刂破?,所述異常控制器響應于與目標進一歩級別異常狀態(tài)相關的異常事件,而觸發(fā)所述處理電路使用由對應于所述目標進ー步級別異常狀態(tài)的所述進ー步級別堆棧指針所指示的所述進ー步級別堆棧數(shù)據(jù)儲存器,在所述目標進ー步級別異常狀態(tài)中處理異常處理例程; 其中,所述處理電路被配置為在處理完所述異常處理例程的初始部分后,使用由所述基本級別堆棧指針所指示的所述基本級別堆棧數(shù)據(jù)儲存器在所述目標進ー步級別異常狀態(tài)中處理所述異常處理例程的剰余部分。
15.ー種數(shù)據(jù)處理裝置,包括 處理部件,用于在包括基本級別異常狀態(tài)及至少ー個進ー步級別異常狀態(tài)的多個異常狀態(tài)中的一者中處理數(shù)據(jù); 基本級別堆棧指針寄存器部件,用于儲存指示基本級別堆棧數(shù)據(jù)儲存器部件在存儲器部件中所處位置的基本級別堆棧指針; 至少ー個進ー步級別堆棧指針寄存器部件,用于儲存指示至少ー個進ー步級別堆棧數(shù)據(jù)儲存器部件在所述存儲器部件內的位置的至少ー個進ー步級別堆棧指針,所述至少ー個進ー步級別異常狀態(tài)各具有相應的進一歩級別堆棧指針;以及 異??刂撇考霎惓?刂撇考憫谂c目標進一歩級別異常狀態(tài)相關的異常事件,而觸發(fā)所述處理部件使用由對應于所述目標進一歩級別異常狀態(tài)的所述進一歩級別堆棧指針所指示的所述進ー步級別堆棧數(shù)據(jù)儲存器,在所述目標進ー步級別異常狀態(tài)中處理異常處理例程; 其中,所述處理部件被配置為在處理完所述異常處理例程的初始部分后,使用由所述基本級別堆棧指針所指示的所述基本級別堆棧數(shù)據(jù)儲存器部件,在所述目標進ー步級別異常狀態(tài)中處理所述異常處理例程的剰余部分。
16.一種數(shù)據(jù)處理的方法,所述方法包括以下步驟 在包括基本級別異常狀態(tài)及至少ー個進ー步級別異常狀態(tài)的多個異常狀態(tài)中的一者中處理數(shù)據(jù); 儲存指示基本級別堆棧數(shù)據(jù)儲存器在存儲器中所處位置的基本級別堆棧指針; 儲存指示至少ー個進ー步級別堆棧數(shù)據(jù)儲存器在所述存儲器中所處的位置的至少ー個進一歩級別堆棧指針,所述至少ー個進一歩級別異常狀態(tài)各具有相應的進ー步級別堆棧指針; 響應于與目標進一歩級別異常狀態(tài)相關的異常事件,使用由對應于所述目標進ー步級別異常狀態(tài)的所述進一歩級別堆棧指針所指示的所述進ー步級別堆棧數(shù)據(jù)儲存器,在所述目標進一歩級別異常狀態(tài)中觸發(fā)對異常處理例程的處理;以及 在處理完所述異常處理例程的初始部分后,使用由所述基本級別堆棧指針所指示的所述基本級別堆棧數(shù)據(jù)儲存器,在所述目標進ー步級別異常狀態(tài)中處理所述異常處理例程的剩余部分。
17.—種虛擬機,所述虛擬機由在數(shù)據(jù)處理裝置上執(zhí)行的計算機程序提供,所述虛擬機提供對應于如權利要求I至10中的任一項所述的裝置的指令執(zhí)行環(huán)境。
全文摘要
處理電路(4)具有用于處理異常事件的多個異常狀態(tài)EL0-EL3,該異常狀態(tài)包括基本級別異常狀態(tài)EL0及至少一個進一步級別異常狀態(tài)EL1-EL3。每個異常狀態(tài)具有相應的堆棧指針,其指示相應的堆棧數(shù)據(jù)儲存器(35)在所述存儲器中的所處位置。當該處理電路處于基本級別異常狀態(tài)EL0中時,堆棧指針選擇電路(40)將該基本級別堆棧指針選作指示當前堆棧數(shù)據(jù)儲存器的當前堆棧指針,以供該處理電路(4)使用。當該處理電路(4)處于進一步的異常狀態(tài)中時,該堆棧指針選擇電路(40)將對應于所述當前進一步級別異常狀態(tài)的所述基本級別堆棧指針或所述進一步級別堆棧指針選作當前堆棧指針。
文檔編號G06F9/38GK102804134SQ201180014331
公開日2012年11月28日 申請日期2011年2月28日 優(yōu)先權日2010年3月15日
發(fā)明者理查德·羅伊·格里森思懷特 申請人:Arm 有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
旬邑县| 娱乐| 屏山县| 吉林市| 孟州市| 阿拉善右旗| 松溪县| 嵊州市| 沛县| 怀宁县| 镇远县| 宜阳县| 沂源县| 通渭县| 屏山县| 永寿县| 广饶县| 松潘县| 北碚区| 晴隆县| 马鞍山市| 紫阳县| 长子县| 凤山县| 大姚县| 阿巴嘎旗| 纳雍县| 淅川县| 仪征市| 页游| 白沙| 临夏县| 湾仔区| 武定县| 连南| 金门县| 新安县| 扬州市| 盖州市| 准格尔旗| 舟山市|