專利名稱:糾正軟錯(cuò)誤的固件機(jī)制的制作方法
發(fā)明
背景技術(shù):
領(lǐng)域本發(fā)明涉及微處理器,尤其涉及能夠以高可靠性模式操作的微處理器。
背景技術(shù):
當(dāng)α粒子或宇宙射線透過集成電路并更改存儲(chǔ)在電路的電壓波節(jié)上的電荷之時(shí)會(huì)出現(xiàn)軟錯(cuò)誤。如果電荷改變足夠大,表示一種邏輯狀態(tài)的電壓就可能會(huì)被改變?yōu)楸硎静煌壿嫚顟B(tài)的電壓。例如表示邏輯真狀態(tài)的電壓可能會(huì)被改變?yōu)楸硎具壿嫾贍顟B(tài)的電壓,而且體現(xiàn)該邏輯狀態(tài)的任何數(shù)據(jù)都將遭到損壞。
伴隨著半導(dǎo)體加工技術(shù)向著更小的尺寸和更低的操作電壓發(fā)展,集成電路,例如微處理器(“處理器”)的軟錯(cuò)誤率(SER)也增加了。更小的工藝尺寸允許在處理器電路小片上實(shí)現(xiàn)更高的器件密度。這增加了α粒子或宇宙射線透過處理器電壓波節(jié)中之一的可能性。更低的操作電壓意味著更小的電荷分裂就足以改變由節(jié)點(diǎn)電壓表示的邏輯狀態(tài)。這兩種趨勢(shì)將來都指向了更高的SER。如果在任何已遭破壞的數(shù)據(jù)被用來更新處理器的結(jié)構(gòu)狀態(tài)之前檢測到軟錯(cuò)誤,它們就可以在處理器中得到糾正。
處理器常常采用基于奇偶性的機(jī)制來檢測由軟錯(cuò)誤產(chǎn)生的數(shù)據(jù)損壞。當(dāng)奇偶位被存儲(chǔ)時(shí)它與各塊數(shù)據(jù)相關(guān)。這個(gè)奇偶位是根據(jù)數(shù)據(jù)塊中是否有奇數(shù)或偶數(shù)個(gè)1而被設(shè)置為1或0的。當(dāng)數(shù)據(jù)塊被從它的存儲(chǔ)單元讀出時(shí),這個(gè)塊中1的個(gè)數(shù)將與奇偶位進(jìn)行比較。這兩個(gè)值間的差異指示該數(shù)據(jù)塊已經(jīng)遭到了損壞。這兩個(gè)值一致則指示或者未出現(xiàn)損壞或者已被改變了2(或4...)位。由于后者發(fā)生的概率很低,因而奇偶性給數(shù)據(jù)是否已遭損壞提供了可靠的指示。糾錯(cuò)碼(ECC)是跟蹤每個(gè)數(shù)據(jù)塊附加信息的基于奇偶性的機(jī)制。附加信息允許識(shí)別并糾正損壞位。
奇偶/ECC機(jī)制已經(jīng)被廣泛應(yīng)用到了高速緩沖存儲(chǔ)器、存儲(chǔ)器和類似的數(shù)據(jù)存儲(chǔ)陣列。這些結(jié)構(gòu)有相對(duì)較高的數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)密度,而且即使在當(dāng)前的器件密度上對(duì)軟錯(cuò)誤也很敏感。它們的固定陣列結(jié)構(gòu)使得實(shí)現(xiàn)奇偶/ECC機(jī)制相對(duì)容易一些。處理器上其余的電路包括數(shù)據(jù)通路、控制邏輯電路、執(zhí)行邏輯電路和寄存器(”執(zhí)行核心”)。這些電路的不同結(jié)構(gòu)和它們?cè)谔幚砥麟娐沸∑?processor die)上的分布使得應(yīng)用奇偶/ECC機(jī)制更為困難。
檢測執(zhí)行核心中的軟錯(cuò)誤的一種方法是在雙倍的執(zhí)行核心上處理指令并比較按照逐指令的基礎(chǔ)由每一條指令確定的結(jié)果(“冗余執(zhí)行”)。例如,一個(gè)計(jì)算機(jī)系統(tǒng)包括兩個(gè)單獨(dú)的處理器,可以引導(dǎo)它們或以對(duì)稱多處理(“SMP”)模式或以功能冗余校驗(yàn)(“FRC”)模式運(yùn)行。以SMP模式,指令執(zhí)行被分配到各個(gè)處理器之間以提供比單處理器系統(tǒng)更高的整體性能。以FRC模式,一個(gè)處理器通常執(zhí)行代碼,第二個(gè)處理器在與提供給第一個(gè)處理器相同的數(shù)據(jù)上執(zhí)行相同的指令。如果第二個(gè)處理器檢測到在它的操作和第一個(gè)處理器的操作之間存在差異,它就用信號(hào)通知產(chǎn)生了錯(cuò)誤。通過重啟計(jì)算機(jī)系統(tǒng)只能在SMP和FRC之間轉(zhuǎn)換操作模式。
雙處理器方法成本較高(就硅而論)。另外,通過其進(jìn)行結(jié)果比較的處理器內(nèi)部信號(hào)傳遞太慢,以至于無法在損壞的數(shù)據(jù)更新處理器的結(jié)構(gòu)狀態(tài)之前檢測到它。因此,這種方法不適于糾正檢測到的軟錯(cuò)誤。
另一種計(jì)算機(jī)系統(tǒng)在單個(gè)處理器芯片上使用雙執(zhí)行核心提供執(zhí)行冗余。兩個(gè)執(zhí)行核心以FRC模式操作,而且受ECC保護(hù)的校驗(yàn)點(diǎn)寄存器存儲(chǔ)處理器中間狀態(tài)上的信息。當(dāng)在一個(gè)代碼段中檢測到錯(cuò)誤時(shí),處理器執(zhí)行微代碼例行程序以利用校驗(yàn)點(diǎn)寄存器來恢復(fù)處理器到最后來遭破壞的處理器狀態(tài)。隨后控制返回到該代碼段,并從遇到錯(cuò)誤的指令開始。錯(cuò)誤恢復(fù)微代碼例行程序存儲(chǔ)在處理器芯片上,使它難以更新或修改。另外,足夠靈活以糾正大范圍錯(cuò)誤的例行程序勢(shì)必相對(duì)復(fù)雜。這些例行程序的微代碼實(shí)現(xiàn)方式占據(jù)了處理器電路小片上的大量面積。
本發(fā)明解決了可用高可靠性計(jì)算機(jī)系統(tǒng)的這些和其它不足。
發(fā)明概述本發(fā)明提供了用于在雙執(zhí)行核心處理器中恢復(fù)軟錯(cuò)誤的固件機(jī)制,雙執(zhí)行核心處理器能夠以冗余模式和分離模式操作執(zhí)行核心。
依據(jù)本發(fā)明的一種方法在處理器以冗余模式操作執(zhí)行核心時(shí)檢測軟錯(cuò)誤。在每個(gè)執(zhí)行核心上執(zhí)行錯(cuò)誤恢復(fù)例行程序以保存來自與該執(zhí)行核心相關(guān)的存儲(chǔ)設(shè)備的未損壞的數(shù)據(jù)。根據(jù)保存的數(shù)據(jù)恢復(fù)處理器狀態(tài)數(shù)據(jù),并用處理器狀態(tài)數(shù)據(jù)初始化第一和第二執(zhí)行核心。
依據(jù)本發(fā)明的計(jì)算機(jī)系統(tǒng)包括一個(gè)雙執(zhí)行核心處理器和存儲(chǔ)錯(cuò)誤恢復(fù)例行程序的非易失性存儲(chǔ)器。當(dāng)處理器以冗余模式操作而檢測軟錯(cuò)誤時(shí)錯(cuò)誤恢復(fù)例行程序被調(diào)用。該例行程序轉(zhuǎn)換處理器到分離模式,該模式下每個(gè)執(zhí)行核心將其相關(guān)的存儲(chǔ)設(shè)備中的未損壞數(shù)據(jù)保存到一個(gè)指定的存儲(chǔ)單元。該例行程序依據(jù)所保存的數(shù)據(jù)恢復(fù)處理器狀態(tài)數(shù)據(jù)。
附圖概述可以參考下列圖來理解本發(fā)明,在這些圖中同樣的元件由同樣的數(shù)字來表示。提供這些圖是為了舉例說明本發(fā)明的所選實(shí)施方案,并不意味著要限制本發(fā)明的范圍。
圖1是適于實(shí)現(xiàn)本發(fā)明的計(jì)算機(jī)系統(tǒng)的一種實(shí)施方案的框圖。
圖2A是圖1中雙執(zhí)行核心處理器的一種實(shí)施方案的框圖。
圖2B是圖2A中處理器FET階段的一種實(shí)施方案的框圖。
圖2C是圖2A中處理器的校驗(yàn)單元的一種實(shí)施方案的框圖。
圖3是說明依照本發(fā)明用于從軟錯(cuò)誤恢復(fù)的方法的一種實(shí)施方案的流程圖。
圖4是說明由執(zhí)行核心執(zhí)行的錯(cuò)誤恢復(fù)例行程序的一種實(shí)施方案的流程圖。
圖5A和5B是說明用于協(xié)調(diào)用于軟錯(cuò)誤恢復(fù)的保存數(shù)據(jù)的不同機(jī)制的實(shí)施方案的框圖。
圖6是說明圖5A的數(shù)據(jù)協(xié)調(diào)機(jī)制的一種實(shí)施方案的流程圖。
圖7是當(dāng)雙核心處理器以分離模式操作時(shí)提供群集器級(jí)冗余的執(zhí)行核心的一種實(shí)施方案的框圖。
發(fā)明詳述下面的論述闡明了大量特定的細(xì)節(jié)以提供對(duì)本發(fā)明的徹底理解。然而,從本公開內(nèi)容受益的本領(lǐng)域的普通技術(shù)人員將意識(shí)到可以在沒有這些特定細(xì)節(jié)的情況下實(shí)踐本發(fā)明。另外,為了把注意力集中在本發(fā)明的特性上,對(duì)多種眾所周知的方法、例行程序、部件和電路沒有進(jìn)行詳細(xì)描述。
本發(fā)明提供了一種在雙核心處理器中糾正軟錯(cuò)誤的靈活方法,該雙核心處理器可以在冗余模式和分離模式之間動(dòng)態(tài)轉(zhuǎn)換。在冗余模式中,處理器執(zhí)行相同的代碼段上以固定方式(in lock step)操作執(zhí)行核心并比較結(jié)果以識(shí)別錯(cuò)誤。在分離模式中,執(zhí)行核心可以獨(dú)立處理指令,例如,執(zhí)行核心可以在給定的時(shí)鐘周期在不同的指令上操作。
對(duì)本發(fā)明的一種實(shí)施方案來說,冗余模式可能是高可靠性(HR)處理器執(zhí)行模式,它減少了執(zhí)行臨界代碼段時(shí)發(fā)生軟錯(cuò)誤的風(fēng)險(xiǎn)。分離模式可能是高性能(HP)處理器執(zhí)行模式,它可以通過增加所選代碼可用的執(zhí)行資源來更快地執(zhí)行所選代碼。分離模式也可以只用于所選的目的,例如錯(cuò)誤恢復(fù)或加速(boostrapping)處理器。分離模式的重要特征是它允許執(zhí)行核心“獨(dú)立”操作,即每個(gè)執(zhí)行核心在給定的時(shí)鐘周期上可執(zhí)行不同的指令。
依照本發(fā)明,錯(cuò)誤恢復(fù)例行程序存儲(chǔ)在非易失性存儲(chǔ)器中。當(dāng)以冗余模式實(shí)現(xiàn)一個(gè)程序線程的處理器檢測到軟錯(cuò)誤時(shí)訪問恢復(fù)例行程序??梢酝ㄟ^兩個(gè)執(zhí)行核心中結(jié)果之間的差異指示錯(cuò)誤。該例行程序轉(zhuǎn)換處理器到分離模式,該模式中每個(gè)執(zhí)行核心檢查它的用于已損壞數(shù)據(jù)的相關(guān)存儲(chǔ)單元。把未損壞的數(shù)據(jù)復(fù)制到指定的存儲(chǔ)單元并從未損壞的數(shù)據(jù)恢復(fù)出足夠的處理器狀態(tài)以再繼續(xù)被中斷的程序線程?;謴?fù)例行程序用已恢復(fù)的處理器狀態(tài)數(shù)據(jù)初始化執(zhí)行核心。
對(duì)本發(fā)明的一種實(shí)施方案來說,與每個(gè)執(zhí)行核心相關(guān)的不同資源是受奇偶保護(hù)的,并且恢復(fù)例行程序執(zhí)行奇偶校驗(yàn)以識(shí)別執(zhí)行核心中任何遭到破壞的數(shù)據(jù)。舉例來說受奇偶保護(hù)的資源可以包括通用寄存器、浮點(diǎn)寄存器、控制和狀態(tài)寄存器、低級(jí)高速緩沖存儲(chǔ)器等。通常,用來存儲(chǔ)處理器狀態(tài)數(shù)據(jù)的任何設(shè)備都可以受奇偶保護(hù)。保護(hù)范圍取決于系統(tǒng)的可靠性需求。
對(duì)本發(fā)明的另一種實(shí)施方案來說,錯(cuò)誤恢復(fù)例行程序識(shí)別并存儲(chǔ)來自一個(gè)或兩個(gè)執(zhí)行核心的未遭破壞的數(shù)據(jù)到指定的存儲(chǔ)單元。用從保存的數(shù)據(jù)恢復(fù)出的處理器狀態(tài)數(shù)據(jù)初始化執(zhí)行核心。例如,可以用從沒有經(jīng)歷軟錯(cuò)誤的執(zhí)行核心保存的處理器狀態(tài)數(shù)據(jù)初始化兩個(gè)執(zhí)行核心。換句話說,可以把來自各個(gè)執(zhí)行核心的未遭破壞的數(shù)據(jù)保存到不同的存儲(chǔ)單元,并且來自一個(gè)存儲(chǔ)單元的數(shù)據(jù)可用來代替其它存儲(chǔ)單元中的已遭破壞的數(shù)據(jù)。這種替代方法用來自每個(gè)處理器的指定存儲(chǔ)單元的處理器狀態(tài)數(shù)據(jù)副本初始化各個(gè)處理器。通過保持處理器狀態(tài)數(shù)據(jù)的分離集合,這種替代方法減少了初始化過程中產(chǎn)生的軟錯(cuò)誤在檢測中被遺漏的風(fēng)險(xiǎn)。在識(shí)別并協(xié)調(diào)分離模式下來自執(zhí)行核心的已保存的處理器狀態(tài)數(shù)據(jù)之后,錯(cuò)誤恢復(fù)例行程序?yàn)榉祷氐饺哂嗄J蕉綀?zhí)行核心。
對(duì)本發(fā)明的另一種實(shí)施方案來說,處理器可以被配置用來在分離模式下的單個(gè)執(zhí)行核心中保持一定級(jí)別的冗余。例如,可以為分離模式操作而把每個(gè)執(zhí)行核心的執(zhí)行資源在邏輯上組織成冗余執(zhí)行群集器。當(dāng)處理器處于分離模式時(shí)執(zhí)行群集器以固定方式在相同的指令上執(zhí)行,可以比較來自冗余群集器的結(jié)果以檢測單個(gè)執(zhí)行核心中的軟錯(cuò)誤。
圖1是依照本發(fā)明的計(jì)算機(jī)系統(tǒng)100的一種實(shí)施方案的模塊級(jí)圖示。計(jì)算機(jī)系統(tǒng)100包括處理器102、非易失性存儲(chǔ)器104、動(dòng)態(tài)存儲(chǔ)器106和系統(tǒng)邏輯電路108。系統(tǒng)邏輯電路108在處理器102、非易失性存儲(chǔ)器104和動(dòng)態(tài)存儲(chǔ)器106之間傳遞通信。錯(cuò)誤恢復(fù)例行程序190存儲(chǔ)在非易失性存儲(chǔ)器104中,雖然例行程序190的一些部分也可以被復(fù)制(映像)到動(dòng)態(tài)存儲(chǔ)器106中。
處理器102公開的實(shí)施方案包括第一執(zhí)行核心110(a)、第二執(zhí)行核心110(b)、對(duì)應(yīng)的核心狀態(tài)寄存器(CSR)120(a)和120(b)以及校驗(yàn)單元130。每個(gè)CSR120(a)、120(b)分別包括一個(gè)核心狀態(tài)位(CSB)124(a)、124(b)。還顯示出了向處理器102傳進(jìn)和傳出數(shù)據(jù)/指令的總線接口140。每個(gè)執(zhí)行核心110(a)、110(b)包括取、譯碼、執(zhí)行并退出(retire)指令的資源。在下面的論述中,除非為對(duì)特定的執(zhí)行核心110予以說明,否則將不加入對(duì)執(zhí)行核心110(a)、110(b)的引用都不加索引。對(duì)CSR120、CSB124的參考以及在執(zhí)行核心110中重復(fù)的任意其它資源也同樣處理。
在冗余模式中,執(zhí)行核心110以固定方式執(zhí)行來自一個(gè)代碼段的相同指令,并由校驗(yàn)單元130比較結(jié)果以檢測任一執(zhí)行核心110中的錯(cuò)誤。在分離模式中,執(zhí)行核心110“獨(dú)立”操作。也就是說,每個(gè)執(zhí)行核心可以執(zhí)行來自一個(gè)或多個(gè)代碼段的不同指令。如上所述,分離模式可以為所選擇的例行程序提供可編程高性能模式,因?yàn)樘幚砥髦锌捎玫膱?zhí)行資源在分離模式中被有效地加倍。
分離模式下執(zhí)行核心110之間的獨(dú)立級(jí)別隨處理器102的不同實(shí)施方案有所變化。對(duì)一種實(shí)施方案來說,在分離模式時(shí)處理器102可以作為實(shí)現(xiàn)在一個(gè)單獨(dú)的處理器芯片上的SMP系統(tǒng)操作。這種情況下,每個(gè)執(zhí)行核心110作為一個(gè)獨(dú)立的處理器操作,只共享處理器電路小片和存儲(chǔ)器系統(tǒng)的特定部件。處理器102的這種實(shí)施方案對(duì)需要高性能處理器的代碼尤其有用。處理器102的另一種實(shí)施方案可以通過提供適當(dāng)通道以共享處理器狀態(tài)信息或執(zhí)行核心資源而支持在分離模式下的執(zhí)行核心110之間一定程度的耦合。
可以在硬件、軟件或固件控制下面實(shí)現(xiàn)在冗余和分離模式之間的轉(zhuǎn)換。對(duì)軟件和固件控制的轉(zhuǎn)換來說,可以通過正在執(zhí)行的不同程序線程、操作系統(tǒng)(OS)調(diào)度程序、中斷處理器、固件例行程序或類似的資源來提供模式轉(zhuǎn)換指令。對(duì)硬件控制的轉(zhuǎn)換來說,可為響應(yīng)檢測到的狀態(tài)來觸發(fā)轉(zhuǎn)換,例如,特定指令類型的執(zhí)行、不同執(zhí)行核心中結(jié)果之間差異的檢測或者該差異的分辨率。
對(duì)本發(fā)明的一種實(shí)施方案來說,CSB124(a)和124(b)分別指示執(zhí)行核心110(a)和110(b)的狀態(tài),且CSB124(a)和124(b)一起指示處理器102的操作模式。處理器的執(zhí)行模式作為一個(gè)整體可以通過一個(gè)單獨(dú)的處理器狀態(tài)位(PSB)128來進(jìn)行跟蹤,由圖1中的虛線框表示。對(duì)于一種實(shí)施方案來說,當(dāng)處理器102將以冗余模式操作時(shí),CSB124被設(shè)置成第一個(gè)值,例如1,當(dāng)處理器102將以分離模式操作時(shí),CSB124被設(shè)置成第二個(gè)值,例如0。當(dāng)模式轉(zhuǎn)換指令觸發(fā)冗余模式和分離模式之間的轉(zhuǎn)換時(shí)CSB124得到調(diào)整。處理器102中的不同資源根據(jù)它的執(zhí)行模式更改它們的操作。對(duì)處理器102的公開實(shí)施方案來說,指令獲取、指令退出和結(jié)果校驗(yàn)是以冗余和分離模式做不同處理的,而且對(duì)應(yīng)的資源根據(jù)CSB124(或PSB128)的狀態(tài)協(xié)調(diào)它們的操作。
在題為“具有高可靠性操作模式的微處理器”,且與本案同一日期提交的美國專利申請(qǐng)序列號(hào)____中公開了有雙執(zhí)行模式的處理器102的一種實(shí)施方案。
圖2A更詳細(xì)地說明了處理器102的一種實(shí)施方案。對(duì)該公開的實(shí)施方案來說,每個(gè)執(zhí)行核心110被描述成指令執(zhí)行流水線中的一系列級(jí)。每一級(jí)對(duì)應(yīng)于由執(zhí)行核心110實(shí)現(xiàn)用來執(zhí)行它們的指令的一個(gè)或多個(gè)操作。換句話說,可以把流水級(jí)理解為代表執(zhí)行所示操作的邏輯電路。指令和數(shù)據(jù)從存儲(chǔ)器系統(tǒng)270提供給執(zhí)行核心110。存儲(chǔ)器系統(tǒng)270代表動(dòng)態(tài)存儲(chǔ)器106和任意介于中間的高速緩沖存儲(chǔ)器。例如,高速緩沖存儲(chǔ)器280代表存儲(chǔ)器系統(tǒng)270的一部分,來自執(zhí)行過的指令的結(jié)果被寫入其中。高速緩沖存儲(chǔ)器280可以位于和處理器102相同的芯片上或者位于一個(gè)單獨(dú)的芯片上。
對(duì)處理器102的公開的實(shí)施方案來說,每個(gè)執(zhí)行核心110被劃分為取出(FET)級(jí)210、譯碼(DEC)級(jí)220、寄存器(REG)級(jí)230、執(zhí)行(EXE)級(jí)240、檢測(DET)級(jí)250和退出(RET)級(jí)260。在FET級(jí)210中從存儲(chǔ)器系統(tǒng)270取出一個(gè)或多個(gè)指令。在DEC級(jí)220中把取出的指令譯碼成微操作,并在REG級(jí)230中取出由微操作規(guī)定的源操作數(shù)。在EXE級(jí)240中在取出的操作數(shù)上執(zhí)行微操作,并在DET級(jí)250中用信號(hào)通知由微操作產(chǎn)生的任何異常。如果沒有檢測到異常就在RET級(jí)260中退出微操作。對(duì)該公開的實(shí)施方案來說,來自已退出的微操作的結(jié)果通過退出通道264被寫入高速緩沖存儲(chǔ)器280中。
在這個(gè)論述中,指令、指令束和微指令被交替用作微操作和指令字節(jié)。后者指由處理器的執(zhí)行單元識(shí)別出的指令。前者指提供給處理器的指令形式。對(duì)一些實(shí)施方案來說,在這些實(shí)體之間可以有很小的差別或沒有。
處理器102的實(shí)施方案可以包括從后端級(jí)(DEC、REG、EXE、DET和RET,或REG、EXE、DET和RET)去耦合前端級(jí)(FET或FET和DEC)的緩沖區(qū)。該緩沖區(qū)臨時(shí)存儲(chǔ)取出(或者取出并經(jīng)譯碼)的指令。這允許前端操作繼續(xù),即使后端操作被停止或延遲。如果前端操作被延遲它還允許后端操作繼續(xù)進(jìn)行。處理器102的一種實(shí)施方案采用了反耦合緩沖區(qū)來糾正在冗余模式中檢測到的錯(cuò)誤。
本發(fā)明不需要把處理器102分成一特定組的流水線級(jí)。例如,可以把一個(gè)已公開的級(jí)再分成兩個(gè)或更多級(jí)以解決定時(shí)問題或促進(jìn)更高的處理器時(shí)鐘速度。另一方面,可以把兩個(gè)或更多級(jí)組合成一個(gè)單一級(jí)。其它實(shí)施方案可以采用或不采用去耦合緩沖區(qū)。其它實(shí)施方案仍然可包括用于處理指令無序的硬件。公開的流水線只提供了一個(gè)如何在處理器中劃分操作的實(shí)例以配合本發(fā)明的應(yīng)用。
還為每個(gè)執(zhí)行核心110顯示了狀態(tài)/控制(S/C)寄存器234、數(shù)據(jù)寄存器238和數(shù)據(jù)高速緩沖存儲(chǔ)器244。S/C寄存器234存儲(chǔ)為管理執(zhí)行核心110的操作的信息。例如,S/C寄存器234通常包括CSR120(和CSB124)。數(shù)據(jù)寄存器238存儲(chǔ)由執(zhí)行核心110中不同資源所用的操作數(shù),數(shù)據(jù)高速緩沖存儲(chǔ)器244在存儲(chǔ)器系統(tǒng)270和執(zhí)行核心中的其它資源之間緩存操作數(shù)。依靠定時(shí)約束,數(shù)據(jù)高速緩沖存儲(chǔ)器244可以向數(shù)據(jù)寄存器238、EXE級(jí)240中的執(zhí)行資源、或者向這兩者提供操作數(shù)。對(duì)本發(fā)明的一種實(shí)施方案來說,每個(gè)執(zhí)行核心110為S/C寄存器234、數(shù)據(jù)寄存器238和高速緩沖存儲(chǔ)器244提供一定形式的奇偶保護(hù)。
當(dāng)處理器102在冗余模式中時(shí)執(zhí)行核心110(a)和110(b)進(jìn)行同步以固定的方式在相同指令上操作。在分離模式中,執(zhí)行核心110(a)和110(b)可以在不同的指令上獨(dú)立操作。如上所述,處理器102的不同實(shí)施方案可以在分離模式的執(zhí)行核心110(a)和110(b)之間支持不同級(jí)別的協(xié)調(diào)合作,如圖2A中的虛線箭頭所示。例如,如果處理器102作為一個(gè)單獨(dú)芯片SMP系統(tǒng)以分離模式操作,執(zhí)行核心110(a)和110(b)之間的合作需要主要在模式轉(zhuǎn)換期間出現(xiàn)。對(duì)處理器102的其它實(shí)施方案來說,執(zhí)行核心110(a)和110(b)可以處理緊密耦合的進(jìn)程。這些實(shí)施方案支持對(duì)S/C寄存器234(a)和234(b)、數(shù)據(jù)寄存器238(a)和238(b)、以及數(shù)據(jù)高速緩沖存儲(chǔ)器244(a)和244(b)之間的數(shù)據(jù)的一些共享,以及不同流水線級(jí)之間的操作的一些合作。
圖2B顯示在冗余模式和分離模式中適用于向執(zhí)行核心110(a)、110(b)分別提供指令的FET級(jí)210(a)和210(b)的一種實(shí)施方案。每個(gè)FET級(jí)210包括指令指針(IP)選擇復(fù)用器212和耦合到DEC級(jí)220的指令高速緩沖存儲(chǔ)器214。S/C寄存器234包括IP寄存器236,它可以由軟件進(jìn)行初始化以指示將要執(zhí)行的下一條指令。另外,F(xiàn)ET級(jí)210(b)包括在高速緩沖存儲(chǔ)器214(b)的輸出上的復(fù)用器216。復(fù)用器216由CSB124通過與門218控制。對(duì)本發(fā)明的一種實(shí)施方案來說,指令高速緩沖存儲(chǔ)器214可以由像ECC這樣基于奇偶性的機(jī)制來保護(hù)。
復(fù)用器212在它的數(shù)據(jù)輸入上從不同來源包括IP寄存器236接收IP。響應(yīng)它的控制輸入上的信號(hào),復(fù)用器212選擇一個(gè)IP來指示將要從高速緩沖存儲(chǔ)器214取出的下一條指令來響應(yīng)它的控制輸入上的信號(hào)。在分離模式中,CSB124被設(shè)置為0而且復(fù)用器216傳輸由指令高速緩沖存儲(chǔ)器214(b)提供的指令。在這種模式中,IP寄存器236(a)和236(b)被獨(dú)立地進(jìn)行初始化和更新,高速緩沖存儲(chǔ)器214(a)和214(b)分別提供對(duì)應(yīng)的指令給DEC級(jí)220(a)和220(b)。在冗余模式中,CSB124被設(shè)置為1,復(fù)用器216從高速緩沖存儲(chǔ)器214(a)提供指令給DEC級(jí)220(b)。
FET級(jí)210的一種替代實(shí)施方案不使用復(fù)用器216。而是把IP寄存器236(a)、236(b)和高速緩沖存儲(chǔ)器214(a)、214(b)初始化成冗余模式的相同狀態(tài),并且FET級(jí)210,包括高速緩沖存儲(chǔ)器214,均以固定方式操作。處理器設(shè)計(jì)領(lǐng)域的以及從本公開內(nèi)容獲益的技術(shù)人員將認(rèn)識(shí)到可以根據(jù)處理器102操作的執(zhí)行模式使用FET級(jí)210的其它變體來為執(zhí)行核心110實(shí)現(xiàn)獨(dú)立的和一致的指令取出。
圖2C是說明依照本發(fā)明的校驗(yàn)單元130的一種實(shí)施方案框圖。校驗(yàn)單元130的公開的實(shí)施方案包括“n”個(gè)比較器290(1)-290(n)、或門294和與門298。比較器290是為執(zhí)行核心110中的每個(gè)執(zhí)行單元提供的。例如,處理器102的一種實(shí)施方案可以在每個(gè)執(zhí)行核心110的EXE級(jí)中的包括整數(shù)執(zhí)行單元(IEU)、浮點(diǎn)執(zhí)行單元(FPU)、存儲(chǔ)器執(zhí)行單元(MEU)和分支執(zhí)行單元BRU。對(duì)這個(gè)實(shí)施方案來說,校驗(yàn)單元130包括4個(gè)比較器290。比較器290(1)、290(2)、290(3)和290(4)分別監(jiān)控來自執(zhí)行核心110(a)和110(b)的IEU、FPU、MEU和BRU的輸出。
對(duì)校驗(yàn)單元130公開的實(shí)施方案來說,當(dāng)施加到它的輸入上的執(zhí)行結(jié)果匹配時(shí)每個(gè)比較器290產(chǎn)生一個(gè)邏輯值0,當(dāng)執(zhí)行結(jié)果不匹配時(shí)產(chǎn)生邏輯值1。對(duì)校驗(yàn)單元130的一種實(shí)施方案來說,比較器290是自校驗(yàn)比較器。當(dāng)任意一個(gè)比較器290指示出的與它對(duì)應(yīng)的執(zhí)行結(jié)果不匹配時(shí)或門294產(chǎn)生邏輯值1。當(dāng)與門298被使能時(shí)或門294的輸出充當(dāng)ERROR信號(hào)。對(duì)該公開的實(shí)施方案來說,當(dāng)CSB124都被設(shè)置為1,即處理器102在冗余模式中時(shí)這才會(huì)發(fā)生。
處理器設(shè)計(jì)領(lǐng)域的以及從本公開內(nèi)容獲益的技術(shù)人員將認(rèn)識(shí)到當(dāng)處理器在冗余模式中時(shí)校驗(yàn)單元130的其它變體可被觸發(fā)來監(jiān)控執(zhí)行核心110中的結(jié)果。
當(dāng)在冗余模式中檢測出異常時(shí),本發(fā)明提供了一個(gè)可以獨(dú)立實(shí)現(xiàn)或與硬件組合實(shí)現(xiàn)的基于固件的恢復(fù)機(jī)制,和基于軟件的恢復(fù)機(jī)制,使處理器得以恢復(fù)到無錯(cuò)誤狀態(tài)。作為本發(fā)明目標(biāo)的軟錯(cuò)誤通常不會(huì)在兩個(gè)執(zhí)行核心110中同時(shí)發(fā)生。由校驗(yàn)單元130檢測到的執(zhí)行結(jié)果之間的差異通常是由執(zhí)行核心110之一的電路中的軟錯(cuò)誤而產(chǎn)生的。像寄存器文件、高速緩沖存儲(chǔ)器、鎖存器以及類似的這些存儲(chǔ)設(shè)備尤其易于發(fā)生這些錯(cuò)誤。這些結(jié)構(gòu)存儲(chǔ)代表操作數(shù)值、指令或者指令流水線的不同點(diǎn)上的微操作的電壓電平。當(dāng)在由執(zhí)行核心產(chǎn)生的結(jié)果之間檢測到差異時(shí)本發(fā)明提供了一種恢復(fù)完整性到以冗余模式操作的處理器的執(zhí)行核心的機(jī)制。
根據(jù)本發(fā)明的一種實(shí)施方案,當(dāng)在由冗余模式中的處理器的兩個(gè)執(zhí)行核心產(chǎn)生的結(jié)果之間檢測到差異時(shí)基于固件的恢復(fù)例行程序會(huì)被訪問。錯(cuò)誤恢復(fù)例行程序轉(zhuǎn)換處理器到分離模式,在該模式下每個(gè)執(zhí)行核心檢查來自它的執(zhí)行資源的數(shù)據(jù)中是否有錯(cuò)誤并保存未遭損壞的數(shù)據(jù)到特定的存儲(chǔ)單元。錯(cuò)誤恢復(fù)例行程序用未遭破壞的數(shù)據(jù)初始化執(zhí)行核心并返回控制到被中斷的程序線程。對(duì)本發(fā)明的一種實(shí)施方案來說,所檢查的執(zhí)行資源是受奇偶保護(hù)的存儲(chǔ)設(shè)備。從未遭破壞的數(shù)據(jù)恢復(fù)出足夠的處理器狀態(tài)數(shù)據(jù)來初始化兩個(gè)執(zhí)行核心以使中斷的程序線程得以繼續(xù)處理。
使用基于固件的恢復(fù)例行程序使處理器能夠?qū)崿F(xiàn)更復(fù)雜的恢復(fù)機(jī)制。這些機(jī)制比通過微代碼或基于硬件的恢復(fù)機(jī)制能夠解決更多種類的錯(cuò)誤,后兩種恢復(fù)機(jī)制均受限于它們對(duì)電路小片面積的影響??梢愿p易地更新基于固件的恢復(fù)機(jī)制以處理不同的錯(cuò)誤或?qū)崿F(xiàn)錯(cuò)誤恢復(fù)算法中的改進(jìn)。另外,基于固件的恢復(fù)機(jī)制能夠通知諸如系統(tǒng)級(jí)固件或操作系統(tǒng)的更高級(jí)的系統(tǒng),以在必要時(shí)采取適當(dāng)動(dòng)作。
對(duì)本發(fā)明的一種實(shí)施方案來說,可以通過機(jī)器校驗(yàn)(MC)訪問錯(cuò)誤恢復(fù)例行程序。當(dāng)檢測到差異時(shí)MC被校驗(yàn)單元130觸發(fā)。另一方面,處理器可以先試圖通過硬件恢復(fù)機(jī)制解決差異并只在硬件機(jī)制失敗時(shí)觸發(fā)錯(cuò)誤恢復(fù)例行程序。例如,硬件恢復(fù)機(jī)制包括重新控制(resteering)執(zhí)行核心或執(zhí)行核心的一些部分從檢測到差異時(shí)的指令開始重新執(zhí)行指令流。
圖3是說明依照本發(fā)明用于糾正軟錯(cuò)誤的方法300的流程圖。當(dāng)處理器以冗余模式操作中錯(cuò)誤被檢測到310時(shí)方法300被觸發(fā)。錯(cuò)誤可以由第一和第二個(gè)執(zhí)行核心產(chǎn)生的結(jié)果之間的差異來指示。當(dāng)錯(cuò)誤被檢測到310時(shí),處理器跳轉(zhuǎn)320到錯(cuò)誤恢復(fù)例行程序(ERR)。例如,這可以通過觸發(fā)MC并通過相關(guān)向量表控制處理器到ERR來完成。
ERR把處理器從冗余模式(RM)轉(zhuǎn)換330到分離模式(SM)。對(duì)方法300的一種實(shí)施方案來說,每個(gè)執(zhí)行核心以分離模式操作以從受奇偶保護(hù)的存儲(chǔ)設(shè)備保存340未遭破壞的數(shù)據(jù)到指定的存儲(chǔ)單元??梢酝ㄟ^掃描受奇偶保護(hù)的資源中的數(shù)據(jù)檢查奇偶錯(cuò)誤或者通過把數(shù)據(jù)從這些資源復(fù)制到一個(gè)存儲(chǔ)單元并掃描復(fù)制來的數(shù)據(jù)以檢查奇偶錯(cuò)誤來識(shí)別未受損壞的數(shù)據(jù)。當(dāng)兩個(gè)執(zhí)行核心都完成350了它們的數(shù)據(jù)保存時(shí),對(duì)所保存的數(shù)據(jù)進(jìn)行協(xié)調(diào)360以提供未遭破壞的一組處理器狀態(tài)數(shù)據(jù)。對(duì)方法300的另一種實(shí)施方案來說,只有在它的存儲(chǔ)結(jié)構(gòu)中識(shí)別出沒有遭破壞的數(shù)據(jù)的執(zhí)行核心才把它的數(shù)據(jù)保存340到指定的存儲(chǔ)單元。處理器被返回370到冗余模式,用恢復(fù)出的處理器狀態(tài)數(shù)據(jù)初始化380執(zhí)行核心,并再繼續(xù)380中斷的進(jìn)程線程的執(zhí)行。
對(duì)本發(fā)明的一種實(shí)施方案來說,處理器102在軟件控制下切換于冗余和分離模式之間,例如通過模式切換指令。對(duì)本發(fā)明的另一種實(shí)施方案來說,處理器102可通過硬件機(jī)制進(jìn)行切換。
在檢測到差異前,處理器工作于冗余模式而且執(zhí)行核心以固定的方式進(jìn)行操作。當(dāng)檢測到差異時(shí),錯(cuò)誤恢復(fù)例行程序可以通過給每個(gè)執(zhí)行核心提供“轉(zhuǎn)換到分離模式”指令(SW_SM)來實(shí)現(xiàn)模式轉(zhuǎn)換。在冗余模式中,這些指令被以固定的方式沿著兩個(gè)執(zhí)行核心的流水線級(jí)分級(jí),當(dāng)它們退出時(shí)轉(zhuǎn)換處理器到分離模式。因而不需要在轉(zhuǎn)換到分離模式上同步執(zhí)行核心。一旦處理器處于分離模式中,每個(gè)執(zhí)行核心可以獨(dú)立地執(zhí)行ERR的數(shù)據(jù)恢復(fù)操作。
當(dāng)執(zhí)行核心完成了它的數(shù)據(jù)恢復(fù)操作時(shí),處理器從分離模式轉(zhuǎn)回到冗余模式以繼續(xù)中斷的程序線程。對(duì)本發(fā)明的一種實(shí)施方案來說,這種轉(zhuǎn)換可以通過在每個(gè)執(zhí)行核心中執(zhí)行“轉(zhuǎn)換到冗余模式”指令(SW_RM)分級(jí)地實(shí)現(xiàn)。把轉(zhuǎn)換分級(jí)能夠適應(yīng)執(zhí)行核心完成它們的數(shù)據(jù)保存操作時(shí)在不同時(shí)段上的差別。
對(duì)該公開的實(shí)施方案來說,SW_RM在第一級(jí)轉(zhuǎn)換一個(gè)執(zhí)行核心到“就緒狀態(tài)”,例如CSB(b)124=1。在第二級(jí),SW_RM指令轉(zhuǎn)換另一個(gè)執(zhí)行核心到“就緒狀態(tài)”,例如CSB(a)=1。當(dāng)兩個(gè)執(zhí)行核心都到達(dá)就緒狀態(tài),例如PSB=CSB(a)&CSB(b)時(shí),處理器返回到冗余模式。第一和第二級(jí)可以完全重合(同時(shí)轉(zhuǎn)換)、部分重合或完全不重合(順序轉(zhuǎn)換),取決于用來調(diào)度模式轉(zhuǎn)換指令的算法。
就緒狀態(tài)允許執(zhí)行核心在處理器從分離模式轉(zhuǎn)換到冗余模式之前被同步。對(duì)本發(fā)明的其它實(shí)施方案來說,可以通過硬件機(jī)制實(shí)現(xiàn)同步。例如,當(dāng)檢測到例行程序結(jié)束條件時(shí)第一個(gè)執(zhí)行核心可以轉(zhuǎn)換到就緒狀態(tài),且當(dāng)?shù)谝粋€(gè)執(zhí)行核心完成它的轉(zhuǎn)換時(shí)第二個(gè)執(zhí)行核心可以轉(zhuǎn)換到就緒狀態(tài)。和用軟件控制的模式轉(zhuǎn)換一樣,就緒狀態(tài)允許執(zhí)行核心在處理器被轉(zhuǎn)換回冗余模式之前會(huì)合。
圖4說明了由執(zhí)行核心實(shí)現(xiàn)用來保存未損壞數(shù)據(jù)的方法400的一種實(shí)施方案。例如,方法400可以代表在轉(zhuǎn)換到分離模式之后由執(zhí)行核心實(shí)現(xiàn)的ERR的一部分。如上所述,可以通過機(jī)器校驗(yàn)來到達(dá)ERR,機(jī)器校驗(yàn)通過相關(guān)的向量表把處理器的控制傳遞到ERR。ERR從冗余模式轉(zhuǎn)換處理器到分離模式,這允許每個(gè)執(zhí)行核心獨(dú)立地訪問并實(shí)現(xiàn)由數(shù)據(jù)校驗(yàn)和由圖4所說明的恢復(fù)例行程序。
根據(jù)該公開的方法,非臨界存儲(chǔ)設(shè)備被刷新410。非臨界存儲(chǔ)設(shè)備包括諸如高速緩沖存儲(chǔ)器、寄存器和不存儲(chǔ)結(jié)構(gòu)狀態(tài)數(shù)據(jù)的存儲(chǔ)設(shè)備。這些存儲(chǔ)設(shè)備通常是不受奇偶保護(hù)的。根據(jù)處理器實(shí)施方案,這些設(shè)備可以包括L0指令和數(shù)據(jù)高速緩沖存儲(chǔ)器、分支目標(biāo)緩沖區(qū)、高級(jí)裝載跟蹤表等等。
檢查420數(shù)據(jù)寄存器文件的內(nèi)容以查找奇偶錯(cuò)誤。如果沒有發(fā)現(xiàn)430奇偶錯(cuò)誤,就把數(shù)據(jù)寄存器文件的內(nèi)容復(fù)制440到一個(gè)指定的存儲(chǔ)單元。如上所述,這可以是與另一個(gè)執(zhí)行核心共享的存儲(chǔ)單元或者為特定的執(zhí)行核心保留的存儲(chǔ)單元。如果發(fā)現(xiàn)430了奇偶錯(cuò)誤,就不從數(shù)據(jù)寄存器文件復(fù)制任何數(shù)據(jù)。換句話說,只有未損壞的數(shù)據(jù)才從數(shù)據(jù)寄存器文件中得到復(fù)制。
還校驗(yàn)450C/S寄存器文件以查找奇偶錯(cuò)誤。這些包括例如上述核心狀態(tài)寄存器、存儲(chǔ)有關(guān)當(dāng)前線程信息的不同寄存器以及任意翻譯后援緩沖區(qū)(TLB)中的翻譯寄存器。如果在C/S寄存器文件中沒有發(fā)現(xiàn)460任何奇偶錯(cuò)誤,就把C/S寄存器文件的內(nèi)容復(fù)制570到一個(gè)指定的存儲(chǔ)單元。如果發(fā)現(xiàn)了奇偶錯(cuò)誤,就不從C/S寄存器文件復(fù)制任何數(shù)據(jù)。換句話說,只有未損壞的數(shù)據(jù)才從C/S寄存器文件中得到復(fù)制。
處理器的實(shí)施方案可以用固件為所選的高速緩沖存儲(chǔ)器實(shí)現(xiàn)錯(cuò)誤糾正代碼(ECC)。這消除了對(duì)處理器中ECC糾錯(cuò)硬件的需要,雖然高速緩沖存儲(chǔ)器仍然存儲(chǔ)ECC位。對(duì)這些實(shí)施方案來說,可以通過ERR糾正480 1和2位的錯(cuò)誤。如果用硬件實(shí)現(xiàn)ECC就繞過模塊480。一旦糾正了所有檢測到的錯(cuò)誤,執(zhí)行核心就跳轉(zhuǎn)490到等待狀態(tài)。
一旦各個(gè)執(zhí)行核心都已經(jīng)執(zhí)行了方法400,指定的存儲(chǔ)單元就只包含未損壞的數(shù)據(jù)。軟錯(cuò)誤的統(tǒng)計(jì)特性的一個(gè)結(jié)論是相同的數(shù)據(jù)塊同時(shí)在兩個(gè)執(zhí)行核心中被破壞的可能性很小。因此,數(shù)據(jù)保存方法提供了足夠的未遭損壞的處理器狀態(tài)數(shù)據(jù)來初始化執(zhí)行核心并重新開始中斷的程序線程。
本發(fā)明不需要以任何特定的順序刷新或校驗(yàn)存儲(chǔ)設(shè)備。例如,可以在C/S寄存器文件之后檢查數(shù)據(jù)寄存器文件并在該方法中任何方便的時(shí)間刷新非臨界文件。上面所指出的順序只用于說明目的提供。
除了保存未遭破壞的數(shù)據(jù)到指定的存儲(chǔ)單元之外,ERR還提供了一種機(jī)制來協(xié)調(diào)所保存的數(shù)據(jù)并將足夠的未損壞的處理器狀態(tài)數(shù)據(jù)提供給每個(gè)執(zhí)行核心以再繼續(xù)中斷的程序線程。
圖5A是說明用于協(xié)調(diào)由雙執(zhí)行核心處理器中的每個(gè)執(zhí)行核心保存的數(shù)據(jù)的一種機(jī)制的框圖。執(zhí)行核心110(b)實(shí)現(xiàn)ERR以復(fù)制(1)它的未損壞的數(shù)據(jù)到存儲(chǔ)器系統(tǒng)500中一個(gè)指定的單元510(b)。執(zhí)行核心110(a)實(shí)現(xiàn)ERR以復(fù)制(2)它的未損壞的數(shù)據(jù)到一個(gè)指定的存儲(chǔ)單元510(a)。對(duì)所示范的機(jī)制來說,執(zhí)行核心110(b)的存儲(chǔ)設(shè)備中的軟錯(cuò)誤給單元510(b)留下了一個(gè)不完全的處理器狀態(tài)數(shù)據(jù)集。沒有遇到奇偶錯(cuò)誤的執(zhí)行核心110(a)復(fù)制(2)了一個(gè)完整的處理器狀態(tài)數(shù)據(jù)集到單元510(a)。這里“完整”指足以使處理器102重新開始執(zhí)行中斷的程序線程的處理器狀態(tài)數(shù)據(jù)的子集。可以在執(zhí)行核心110(b)復(fù)制(1)它的未遭破壞的數(shù)據(jù)到存儲(chǔ)單元510(b)的同時(shí)跟蹤執(zhí)行核心110(b)的存儲(chǔ)設(shè)備中遭到破壞的數(shù)據(jù),以維持需要被更新的數(shù)據(jù)記錄。
在數(shù)據(jù)保存操作(1)、(2)之后,執(zhí)行核心110(b)實(shí)現(xiàn)ERR以從單元510(a)復(fù)制(3)未損壞的數(shù)據(jù)到單元510(b)。這為重新初始化處理器102的執(zhí)行核心提供了處理器狀態(tài)數(shù)據(jù)的第二完整組。例如,當(dāng)執(zhí)行核心110(b)確定執(zhí)行核心110(a)已經(jīng)完成了它的復(fù)制操作時(shí),它可以只把與它的相關(guān)存儲(chǔ)設(shè)備中遭到破壞的數(shù)據(jù)相對(duì)應(yīng)的數(shù)據(jù)塊從單元510(a)復(fù)制到單元510(b)。這個(gè)數(shù)據(jù)協(xié)調(diào)機(jī)制在存儲(chǔ)器500中提供了兩組處理器狀態(tài)數(shù)據(jù),它們隨后可分別用來初始化(4)和(5)執(zhí)行核心110(a)和110(b)。初始化(4)和(5)可以在分離模式中由每個(gè)執(zhí)行核心110分別獨(dú)立完成或者在冗余模式由執(zhí)行核心同時(shí)完成。
除了ERR中從存儲(chǔ)單元510(a)復(fù)制(3)未損壞的數(shù)據(jù)到存儲(chǔ)單元510(b)的那部分之外,該公開的數(shù)據(jù)協(xié)調(diào)機(jī)制通過冗余操作繼續(xù)進(jìn)行。數(shù)據(jù)由各個(gè)執(zhí)行核心校驗(yàn)、保存到存儲(chǔ)器并寫回到存儲(chǔ)設(shè)備。這減少了在恢復(fù)期間一組處理器狀態(tài)數(shù)據(jù)中產(chǎn)生的軟錯(cuò)誤將破壞兩個(gè)執(zhí)行核心的可能性。
圖6是說明圖5A的數(shù)據(jù)協(xié)調(diào)機(jī)制的流程圖。例如,這對(duì)應(yīng)于圖4的模塊490。實(shí)現(xiàn)ERR的數(shù)據(jù)協(xié)調(diào)部分的處理器確定610另一個(gè)執(zhí)行核心是否已經(jīng)完成了它的數(shù)據(jù)保存操作。當(dāng)這些操作完成時(shí),該執(zhí)行核心確定620它是否需要更新它的保存數(shù)據(jù)。
對(duì)方法600的一種實(shí)施方案來說,在它的存儲(chǔ)設(shè)備中檢測到損壞數(shù)據(jù)的執(zhí)行核心用來自另一個(gè)執(zhí)行核心的存儲(chǔ)單元的對(duì)應(yīng)數(shù)據(jù)更新它的保存數(shù)據(jù)。例如,該執(zhí)行核心可以存儲(chǔ)在它的保存操作期間似乎遭到破壞的數(shù)據(jù)塊的指示。這個(gè)執(zhí)行核心然后可以用這些指示從另一個(gè)執(zhí)行核心的指定存儲(chǔ)單元中的適當(dāng)存儲(chǔ)器地址中取出該數(shù)據(jù)的未損壞的版本。沒有檢測到任何損壞數(shù)據(jù)的執(zhí)行核心等待另一個(gè)執(zhí)行核心完成640它的更新630。當(dāng)兩個(gè)執(zhí)行核心都到達(dá)等待狀態(tài)640時(shí),處理器返回650到冗余模式并用協(xié)調(diào)過的數(shù)據(jù)初始化660執(zhí)行核心。方法600的一種替代實(shí)施方案可以分離模式初始化執(zhí)行核心然后返回到冗余模式。
圖5B說明了數(shù)據(jù)協(xié)調(diào)的一種替代機(jī)制。對(duì)這種機(jī)制來說,兩個(gè)執(zhí)行核心110(a)、110(b)分別把它們未損壞的數(shù)據(jù)寫入(1)和(2)到相同的存儲(chǔ)單元520中的對(duì)應(yīng)存儲(chǔ)器地址中。對(duì)該機(jī)制的一種實(shí)施方案來說,只有沒有遭到破壞的數(shù)據(jù)的執(zhí)行核心能把所有它的處理器狀態(tài)數(shù)據(jù)寫入到存儲(chǔ)單元520。在自己的存儲(chǔ)設(shè)備中檢測到損壞的數(shù)據(jù)的執(zhí)行核心不把損壞的數(shù)據(jù)復(fù)制到存儲(chǔ)單元520。
圖5B中的機(jī)制的另一種實(shí)施方案可以從在其相關(guān)存儲(chǔ)設(shè)備中沒有檢測到損壞數(shù)據(jù)的執(zhí)行核心寫數(shù)據(jù)并跳過另一個(gè)執(zhí)行核心,即包含有損壞數(shù)據(jù)的執(zhí)行核心的保存步驟。無論哪種情況,復(fù)制到單元520的處理器狀態(tài)數(shù)據(jù)都是完整的,并且都能夠被分別寫回(3)和(4)到執(zhí)行核心110(a)和110(b)以為再繼續(xù)中斷的程序線程而重新初始化它們。因?yàn)樵趫D5B的數(shù)據(jù)協(xié)調(diào)機(jī)制中只維護(hù)了一個(gè)處理器狀態(tài)數(shù)據(jù)集,在數(shù)據(jù)恢復(fù)期間這個(gè)數(shù)據(jù)集中的軟錯(cuò)誤不能通過簡單的結(jié)果比較就檢測出來。
對(duì)本發(fā)明的上述實(shí)施方案來說,錯(cuò)誤恢復(fù)是由處理器以分離模式實(shí)現(xiàn)以允許各個(gè)執(zhí)行核心獨(dú)立地識(shí)別出它的相關(guān)存儲(chǔ)設(shè)備中的任何錯(cuò)誤。當(dāng)冗余執(zhí)行不能用來檢測軟錯(cuò)誤時(shí),在這些錯(cuò)誤恢復(fù)操作期間也有可能發(fā)生軟錯(cuò)誤。對(duì)高可靠性系統(tǒng)來說,即使軟錯(cuò)誤的這個(gè)有限的弱點(diǎn)也有可能過大。
對(duì)本發(fā)明的一種實(shí)施方案來說,可以配置每個(gè)執(zhí)行核心的執(zhí)行資源以在分離模式操作期間作為兩個(gè)或更多邏輯群集器并行操作。在各個(gè)執(zhí)行核心獨(dú)立實(shí)現(xiàn)ERR的同時(shí),每個(gè)執(zhí)行核心中邏輯定義的執(zhí)行群集器冗余地實(shí)現(xiàn)來自ERR的指令。對(duì)這個(gè)實(shí)施方案來說,來自ERR的指令在每個(gè)執(zhí)行核心內(nèi)部重復(fù)執(zhí)行并被控制到不同的執(zhí)行群集器??梢员容^由不同的執(zhí)行群集器產(chǎn)生的結(jié)果以達(dá)到在處理ERR指令的同時(shí)是否有軟錯(cuò)誤出現(xiàn)。
圖7是包括該內(nèi)部冗余特性的執(zhí)行核心710的一種實(shí)施方案的框圖。該執(zhí)行核心710的公開實(shí)施方案包括一個(gè)指令高速緩沖存儲(chǔ)器(I-cache)714、譯碼或分散單元720、寄存器文件730、第一和第二執(zhí)行群集器分別是740(a)和740(b)、校驗(yàn)單元760和退出單元770。在下面的論述中,除非為了避免多義性的必要之外,對(duì)執(zhí)行群集器740(a)和740(b)的引用均不加索引。對(duì)執(zhí)行核心710中有副本的其它資源,例如構(gòu)成執(zhí)行群集器740的執(zhí)行單元,也做相同處理。
對(duì)該公開的實(shí)施方案來說,每個(gè)執(zhí)行群集器740包括分支執(zhí)行單元(BRU)752,整數(shù)執(zhí)行單元(IEU)754,存儲(chǔ)管理(裝載/存儲(chǔ))單元(MMU)756和浮點(diǎn)單元(FPU)758(一般也稱“執(zhí)行單元”)。執(zhí)行核心710的不同實(shí)施方案在不偏離本發(fā)明的范圍的情況下可以包括不同類型和數(shù)量的執(zhí)行單元。例如,Intel公司的Merced處理器采用的分支執(zhí)行單元包括三個(gè)獨(dú)立的分支執(zhí)行單元。執(zhí)行群集器740被獨(dú)立顯示以說明在分離模式下它們的邏輯組織,并非為了反映不同執(zhí)行資源之間的實(shí)際分離。
執(zhí)行核心710的其它實(shí)施方案可以不重復(fù)所有的執(zhí)行單元750或者不重復(fù)指令到特定的執(zhí)行單元。例如,分支執(zhí)行單元需要大量的處理器資源支持,而且不重復(fù)BRU752可以節(jié)省可觀的電路小片面積。這由圖7中BRU752(b)周圍的虛線框表示。這種情況下,分支指令或者不被冗余執(zhí)行,或者可以采用替代機(jī)制來檢查它們的執(zhí)行。例如,分支指令可重復(fù)并串行執(zhí)行。同樣,重復(fù)裝載和存儲(chǔ)指令可以使HR模式中到存儲(chǔ)器系統(tǒng)的帶寬飽和。這種情況下,可以實(shí)現(xiàn)多個(gè)MMU756來適應(yīng)一個(gè)指令束中多個(gè)裝載和/或存儲(chǔ)操作的存在,但在HR模式中單個(gè)的裝載/存儲(chǔ)操作并不被重復(fù)這些指令。在不偏離本發(fā)明的精神的情況下也可以對(duì)其它執(zhí)行單元750和指令類型可采用類似的裝置。
I-cache714提供指令給譯碼單元720,譯碼單元720通過寄存器文件730把指令引導(dǎo)到適當(dāng)?shù)膱?zhí)行單元。寄存器文件730包括數(shù)據(jù)寄存器文件732、控制/狀態(tài)(C/S)寄存器734和寄存器重命名單元738。數(shù)據(jù)寄存器文件提供對(duì)由執(zhí)行單元750操縱的整數(shù)和浮點(diǎn)操作數(shù)的臨時(shí)存儲(chǔ)。重命名單元738把微操作中指定的虛擬寄存器標(biāo)識(shí)符映射到寄存器文件730中的物理寄存器。
C/S寄存器734存儲(chǔ)控制執(zhí)行核心710的操作模式和不同執(zhí)行資源狀態(tài)的信息。對(duì)執(zhí)行核心710的一種實(shí)施方案來說,當(dāng)處理器處于分離模式時(shí)分散單元720提供相同的指令給執(zhí)行群集器740(a)和740(b)。例如,分散單元720提供來自一條指令的微操作(或來自相同指令的微操作)給執(zhí)行群集器740(a)和740(b)中適當(dāng)?shù)膱?zhí)行單元。由校驗(yàn)單元760比較執(zhí)行群集器740(a)和740(b)產(chǎn)生的結(jié)果,如果執(zhí)行結(jié)果不同就指示發(fā)生了錯(cuò)誤。在冗余模式中,可以獨(dú)立控制執(zhí)行群集器740(a)和740(b)以處理不同的指令,并通過在另一個(gè)執(zhí)行核心上執(zhí)行相同的指令來提供冗余。當(dāng)處理器以分離模式操作時(shí)執(zhí)行核心710提供執(zhí)行群集器-級(jí)冗余以保護(hù)處理器不發(fā)生軟錯(cuò)誤。在題為“帶有高可靠性操作模式的微處理器”,并且與本案同一日期提交的美國專利申請(qǐng)序列號(hào)____,中詳細(xì)論述了包括執(zhí)行核心710的處理器的一種實(shí)施方案。
因而已經(jīng)公開了用于在雙核心處理器中糾正軟錯(cuò)誤的基于固件的機(jī)制,該處理器可以在冗余執(zhí)行模式和分離執(zhí)行模式之間進(jìn)行轉(zhuǎn)換。當(dāng)在以冗余模式執(zhí)行的程序線程中檢測到錯(cuò)誤時(shí),處理器轉(zhuǎn)換到分離模式。在分離模式中,執(zhí)行核心在它的存儲(chǔ)設(shè)備中識(shí)別出未遭損壞的數(shù)據(jù)并把該未遭損壞數(shù)據(jù)復(fù)制到一個(gè)指定的存儲(chǔ)單元。協(xié)調(diào)未遭損壞的數(shù)據(jù)以提供足夠的處理器狀態(tài)數(shù)據(jù)來重新執(zhí)行中斷的程序線程。處理器返回到冗余執(zhí)行模式,用處理器狀態(tài)數(shù)據(jù)初始化執(zhí)行核心,并再繼續(xù)中斷的程序線程??梢酝ㄟ^模式轉(zhuǎn)換指令實(shí)現(xiàn)冗余模式和分離模式之間的轉(zhuǎn)換。
已經(jīng)提供了該公開的實(shí)施方案來說明本發(fā)明的不同特性。從本公開內(nèi)容獲益的處理器設(shè)計(jì)領(lǐng)域的技術(shù)人員將認(rèn)識(shí)到公開的實(shí)施方案的變體和改進(jìn)依然屬于所附權(quán)利要求的精神和范圍之中。
權(quán)利要求
1.一種計(jì)算機(jī)系統(tǒng)包括具有第一和第二執(zhí)行核心和校驗(yàn)單元的處理器,當(dāng)處理器處于分離模式時(shí)第一和第二執(zhí)行核心獨(dú)立地處理指令,當(dāng)處理器處于冗余模式時(shí)它們以固定的方式處理同一的指令,并且當(dāng)處理器處于冗余模式時(shí)校驗(yàn)單元比較來自第一和第二執(zhí)行核心的結(jié)果;和其中存儲(chǔ)恢復(fù)例行程序的非易失性存儲(chǔ)器,該恢復(fù)例行程序在校驗(yàn)單元檢測錯(cuò)誤時(shí)轉(zhuǎn)換處理器到分離模式,它還從至少一個(gè)執(zhí)行核心識(shí)別未損壞的處理器狀態(tài)數(shù)據(jù),并用識(shí)別出的處理器狀態(tài)數(shù)據(jù)初始化第一和第二執(zhí)行核心。
2.權(quán)利要求1的計(jì)算機(jī)系統(tǒng),其中該錯(cuò)誤恢復(fù)例行程序使處理器返回到冗余模式。
3.權(quán)利要求1的計(jì)算機(jī)系統(tǒng),其中當(dāng)處理器進(jìn)入分離模式時(shí),錯(cuò)誤恢復(fù)例行程序在與每個(gè)執(zhí)行核心相關(guān)的選中的存儲(chǔ)設(shè)備中識(shí)別未損壞的處理器狀態(tài)數(shù)據(jù),復(fù)制未損壞的處理器狀態(tài)數(shù)據(jù)到指定的存儲(chǔ)單元,并協(xié)調(diào)所復(fù)制的處理器狀態(tài)數(shù)據(jù)。
4.權(quán)利要求3的計(jì)算機(jī)系統(tǒng),其中錯(cuò)誤恢復(fù)例行程序在會(huì)合狀態(tài)同步第一和第二執(zhí)行核心并恢復(fù)處理器到冗余模式。
5.權(quán)利要求1的計(jì)算機(jī)系統(tǒng),其中計(jì)算機(jī)系統(tǒng)還包括主存儲(chǔ)器并且恢復(fù)例行程序保存處理器狀態(tài)數(shù)據(jù)到主存儲(chǔ)器系統(tǒng)的一個(gè)不能高速緩存的部分。
6.一種方法,用于處理能夠以冗余和分離模式操作第一和第二執(zhí)行核心的處理器中的軟錯(cuò)誤,該方法包括當(dāng)處理器以冗余模式操作時(shí)檢測軟錯(cuò)誤;在每個(gè)執(zhí)行核心上執(zhí)行錯(cuò)誤恢復(fù)例行程序以保存來自與第一和第二執(zhí)行核心相關(guān)的存儲(chǔ)設(shè)備的未損壞的數(shù)據(jù);和從所保存的未損壞的數(shù)據(jù)恢復(fù)處理器狀態(tài)數(shù)據(jù)。
7.權(quán)利要求6的方法,其中執(zhí)行錯(cuò)誤恢復(fù)例行程序包括轉(zhuǎn)換處理器從冗余模式到分離模式;并從每個(gè)執(zhí)行核心保存未損壞的數(shù)據(jù)到指定的存儲(chǔ)單元。
8.權(quán)利要求7的方法,還包括協(xié)調(diào)所保存的未損壞的數(shù)據(jù)以恢復(fù)處理器狀態(tài)數(shù)據(jù);并用恢復(fù)的處理器狀態(tài)數(shù)據(jù)初始化第一和第二執(zhí)行核心。
9.權(quán)利要求8的方法,其中協(xié)調(diào)所保存的未損壞的處理器狀態(tài)數(shù)據(jù)包括識(shí)別第一和第二執(zhí)行核心之一中的已損壞的處理器狀態(tài)數(shù)據(jù);并用來自第一和第二執(zhí)行核心中的另一個(gè)執(zhí)行核心的指定的存儲(chǔ)單元中未損壞的處理器狀態(tài)數(shù)據(jù)更新與第一和第二執(zhí)行核心之一相關(guān)的指定存儲(chǔ)單元。
10.一種機(jī)器可讀介質(zhì),其上存儲(chǔ)了可以由雙執(zhí)行核心處理器執(zhí)行以實(shí)現(xiàn)用于從軟錯(cuò)誤恢復(fù)的方法的指令,該方法包括當(dāng)檢測到軟錯(cuò)誤時(shí)轉(zhuǎn)換處理器以獨(dú)立操作雙執(zhí)行核心;在每個(gè)執(zhí)行核心上執(zhí)行錯(cuò)誤恢復(fù)例行程序以從未損壞的處理器狀態(tài)數(shù)據(jù)恢復(fù)處理器狀態(tài)數(shù)據(jù)的最小集;并用處理器狀態(tài)數(shù)據(jù)的最小集初始化雙執(zhí)行核心中的每一個(gè)。
11.權(quán)利要求10的機(jī)器可讀介質(zhì),其中初始化雙執(zhí)行核心中的每一個(gè)包括轉(zhuǎn)換處理器到以固定的方式操作雙執(zhí)行核心;并復(fù)制處理器狀態(tài)數(shù)據(jù)的最小集到雙執(zhí)行核心中的每一個(gè)。
12.權(quán)利要求10的機(jī)器可讀介質(zhì),其中執(zhí)行錯(cuò)誤恢復(fù)例行程序包括掃描每個(gè)執(zhí)行核心上受奇偶保護(hù)的存儲(chǔ)設(shè)備以識(shí)別未損壞的處理器狀態(tài)數(shù)據(jù);保存未損壞的處理器狀態(tài)數(shù)據(jù)到與每個(gè)執(zhí)行核心相關(guān)的指定的存儲(chǔ)單元;并從所保存的處理器狀態(tài)數(shù)據(jù)恢復(fù)處理器狀態(tài)數(shù)據(jù)的最小集。
13.一種計(jì)算機(jī)系統(tǒng),包括具有第一和第二執(zhí)行核心的處理器,當(dāng)處理器處于冗余模式時(shí)第一和第二執(zhí)行核心以固定的方式操作,當(dāng)處理器處于分離模式時(shí)它們獨(dú)立地操作;和其中存儲(chǔ)錯(cuò)誤恢復(fù)例行程序的非易失性存儲(chǔ)器,當(dāng)在冗余模式中檢測到錯(cuò)誤時(shí)該錯(cuò)誤恢復(fù)例行程序轉(zhuǎn)換處理器到分離模式,它還識(shí)別每個(gè)執(zhí)行核心中未損壞的處理器狀態(tài)數(shù)據(jù),并用從未損壞的處理器狀態(tài)數(shù)據(jù)恢復(fù)的一個(gè)處理器狀態(tài)數(shù)據(jù)集來恢復(fù)處理器到冗余模式。
14.權(quán)利要求13的計(jì)算機(jī)系統(tǒng),其中錯(cuò)誤恢復(fù)例行程序通過模式轉(zhuǎn)換指令轉(zhuǎn)換處理器到分離模式。
15.權(quán)利要求14的計(jì)算機(jī)系統(tǒng),其中在轉(zhuǎn)換到分離模式之后,每個(gè)執(zhí)行核心獨(dú)立地執(zhí)行一部分錯(cuò)誤恢復(fù)程序以識(shí)別并保存與它的存儲(chǔ)設(shè)備相關(guān)的未損壞的處理器數(shù)據(jù)到一個(gè)指定的存儲(chǔ)單元。
16.權(quán)利要求15的計(jì)算機(jī)系統(tǒng),其中執(zhí)行核心之一用來自另一個(gè)執(zhí)行核心的指定存儲(chǔ)單元的所保存的處理器狀態(tài)數(shù)據(jù)更新它的存儲(chǔ)設(shè)備中的已損壞的數(shù)據(jù)。
17.權(quán)利要求16的計(jì)算機(jī)系統(tǒng),其中錯(cuò)誤恢復(fù)例行程序通過模式轉(zhuǎn)換指令恢復(fù)處理器到冗余模式。
18.一種計(jì)算機(jī)系統(tǒng),包括具有第一和第二執(zhí)行核心的處理器,當(dāng)處理器處于冗余執(zhí)行模式時(shí)它們以固定的方式操作,當(dāng)處理器處于分離執(zhí)行模式時(shí)它們獨(dú)立操作;和非易失性存儲(chǔ)器,其中存儲(chǔ)著可由處理器實(shí)現(xiàn)的指令,以便當(dāng)處理器處于冗余執(zhí)行模式時(shí)實(shí)現(xiàn)從軟錯(cuò)誤恢復(fù)的方法,該方法包括轉(zhuǎn)換處理器到分離執(zhí)行模式;保存來自每個(gè)執(zhí)行核心的未損壞的處理器狀態(tài)數(shù)據(jù)到一個(gè)指定的存儲(chǔ)單元;從所保存的未損壞的處理器狀態(tài)數(shù)據(jù)恢復(fù)處理器狀態(tài)數(shù)據(jù)的最小集;并用該處理器狀態(tài)數(shù)據(jù)的最小集初始化每個(gè)執(zhí)行核心。
19.權(quán)利要求18的計(jì)算機(jī)系統(tǒng),其中恢復(fù)處理器狀態(tài)數(shù)據(jù)的最小集包括用從執(zhí)行核心之一中保存的未損壞的處理器狀態(tài)數(shù)據(jù)代替來自另一個(gè)執(zhí)行核心的已損壞的處理器狀態(tài)數(shù)據(jù)。
20.權(quán)利要求19的計(jì)算機(jī)系統(tǒng),其中初始化每個(gè)執(zhí)行核心包括轉(zhuǎn)換處理器到冗余執(zhí)行模式;并從指定的存儲(chǔ)單元復(fù)制處理器狀態(tài)數(shù)據(jù)到它們的相關(guān)執(zhí)行核心。
全文摘要
一種計(jì)算機(jī)系統(tǒng),包括有雙執(zhí)行核心的處理器和存儲(chǔ)錯(cuò)誤恢復(fù)例行程序的非易失性存儲(chǔ)器。當(dāng)處理器處于冗余執(zhí)行模式時(shí)處理器的執(zhí)行核心以固定的方式操作,當(dāng)處理器處于分離執(zhí)行模式時(shí)它們獨(dú)立地操作。當(dāng)處理器在以冗余執(zhí)行模式執(zhí)行的同時(shí)檢測軟錯(cuò)誤時(shí)錯(cuò)誤恢復(fù)例行程序被調(diào)用。錯(cuò)誤恢復(fù)例行程序轉(zhuǎn)換處理器到分離執(zhí)行模式。在分離模式中,每個(gè)執(zhí)行核心保存未損壞的處理器狀態(tài)數(shù)據(jù)到指定的存儲(chǔ)單元并用來自另一個(gè)執(zhí)行核心的相應(yīng)的處理器狀態(tài)數(shù)據(jù)更新任何已損壞的數(shù)據(jù)。錯(cuò)誤恢復(fù)例行程序返回處理器到冗余模式,用恢復(fù)的處理器狀態(tài)數(shù)據(jù)初始化每個(gè)執(zhí)行核心,并返回處理器的控制到檢測到軟錯(cuò)誤時(shí)正在執(zhí)行的程序線程。
文檔編號(hào)G06F11/16GK1434941SQ00819142
公開日2003年8月6日 申請(qǐng)日期2000年10月4日 優(yōu)先權(quán)日1999年12月21日
發(fā)明者N·T·夸克 申請(qǐng)人:英特爾公司