專利名稱:用于在多處理器系統(tǒng)中進(jìn)行異常處理的方法和系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及管理多處理器操作中的異常。
背景技術(shù):
在某些計(jì)算環(huán)境中,多個(gè)主機(jī)系統(tǒng)可以和控制單元例如IBMEnterprise Storage Server(ESS)通信,以便獲得由接收所述請求的ESS管理的存儲設(shè)備中的數(shù)據(jù),所述ESS通過一個(gè)或多個(gè)邏輯通路提供對存儲設(shè)備諸如互連的硬盤驅(qū)動(dòng)器的訪問(IBM和ESS是IBM的注冊商標(biāo))。這些互連的驅(qū)動(dòng)器可被配置為直接訪問存儲設(shè)備(DASD)、獨(dú)立磁盤冗余陣列(RAID)、磁盤捆綁(JBOD)等??刂茊卧梢允且环N多處理器類型的系統(tǒng)。例如,控制單元可以包括雙重的和冗余的處理復(fù)合體,也稱為群集,從而允許在其中的一個(gè)發(fā)生故障的情況下故障轉(zhuǎn)移到幸存的群集。
具有各種類型的多處理器系統(tǒng)。在一種類型中,每個(gè)處理器可以具有其自己的存儲器和高速緩存。這些處理器可以并行運(yùn)行并且共享盤。在一種類型的多處理器系統(tǒng)中每個(gè)處理器可以運(yùn)行操作系統(tǒng)的一個(gè)拷貝,并且這些處理器可以通過(例如)局域網(wǎng)(LAN)松散地連接。處理器之間的通信可以通過消息傳送來實(shí)現(xiàn)。
在另一種類型的多處理器系統(tǒng)中,處理器可被更緊密地連接,例如通過開關(guān)或橋連接。處理器之間的通信可以通過(例如)共享的存儲器來實(shí)現(xiàn)。
在另一種類型的多處理器系統(tǒng)中,在所有的處理器上只運(yùn)行操作系統(tǒng)的一個(gè)拷貝。這些類型的多處理器系統(tǒng)趨于使用高速總線或開關(guān)在同一底板內(nèi)緊密地連接。而且,這些處理器可以共享同一個(gè)全局存儲器、盤和輸入/輸出(I/O)設(shè)備。
在指令的執(zhí)行中,可能產(chǎn)生通常被稱為“異?!钡母鞣N狀態(tài)、錯(cuò)誤或外部信號。在許多處理器體系結(jié)構(gòu)例如由IBM公司銷售的PowerPC處理器中,處理器一般改變?yōu)楣芾砥鳡顟B(tài)以便處理異常。此外,關(guān)于在發(fā)生異常之前處理器的狀態(tài)的信息可被保存到某個(gè)處理器寄存器,并且處理器在一般為每種類型的異常預(yù)先規(guī)定的存儲地址處開始指令的執(zhí)行。
處理器可以在存儲器的“便箋”部分存儲關(guān)于處理器的狀態(tài)的信息,該信息可被保留以供異常處理程序使用。便箋存儲器的地址可被存儲在“便箋寄存器”中以便向異常處理程序指示便箋存儲器的位置。
異常處理程序被存儲在該處的預(yù)定的存儲地址通常被稱為“異常向量”。因而例如,當(dāng)由于某種原因不能進(jìn)行數(shù)據(jù)存儲器訪問時(shí)可能發(fā)生“數(shù)據(jù)存儲中斷(DSI)”異常。DSI異常可被(例如)分配0x00300的異常向量。因而,用于處理DSI異常的指令代碼被存儲在物理存儲器地址0x00300中。在DSI異常發(fā)生時(shí),處理器開始執(zhí)行在物理存儲器地址0x00300處的指令代碼以處理DSI異常。
在許多處理器中,被分配給特定異常的特定異常向量可以由處理器體系結(jié)構(gòu)設(shè)置,并且因而不能容易地由用戶確定。例如,異常向量可以由處理器硬件、固件或硬件和固件的一些組合來定義。因而,體系結(jié)構(gòu)定義的異常向量通常不能由用戶容易地進(jìn)行修改。
在一些處理器中,體系結(jié)構(gòu)可以允許對體系結(jié)構(gòu)定義的異常向量的有限的修改。例如,通過使用用于確定偏移地址的體系結(jié)構(gòu)定義的偏移向量可以導(dǎo)出體系結(jié)構(gòu)定義的異常向量。這個(gè)偏移地址被加到可由用戶設(shè)置的處理器寄存器所指出的體系結(jié)構(gòu)定義的物理基地址上。因而,例如DSI異??梢跃哂?x00300的硬件分配的向量偏移地址。如果在合適的處理器寄存器中清除一個(gè)特定位,則所述物理基地址可以具有硬件分配的值0x00000,從而處理器在總計(jì)為0x00300的物理地址處開始執(zhí)行用于DSI異常的指令代碼。不過,如果在合適的處理器寄存器中設(shè)置所述特定位,例如,所述物理基地址可以具有(例如)硬件分配值0XFFF00000,從而處理器可以在總計(jì)為0XFFF00300的物理地址處開始執(zhí)行用于DSI異常的指令代碼。
異常的其它的例子包括“機(jī)器檢查”異常,其中指令的處理可以被掛起,“指令存儲中斷”(ISI)異常,其在取下一條指令的各種故障時(shí)發(fā)生,“外部中斷”異常,其在斷定外部中斷信號時(shí)向處理器發(fā)送信號,“定位”異常,其在執(zhí)行存儲器訪問的各種故障時(shí)發(fā)生,“程序”異常,其中可能嘗試執(zhí)行了不正確的指令,以及“系統(tǒng)調(diào)用”異常,其在執(zhí)行系統(tǒng)調(diào)用指令時(shí)發(fā)生。根據(jù)特定的處理器和所述處理器的應(yīng)用,可以發(fā)生其它類型的異常。
每個(gè)異??梢跃哂兄赶蛩霎惓5漠惓L幚沓绦虼a的體系結(jié)構(gòu)定義的異常向量。因而,在多處理器系統(tǒng)中,一個(gè)處理器在遇到異常時(shí)可以開始執(zhí)行用于該異常的體系結(jié)構(gòu)定義的異常向量處的異常處理代碼。在執(zhí)行異常向量處的異常處理代碼時(shí),該處理器可以訪問并配置由系統(tǒng)的一個(gè)或多個(gè)其它處理器共享的資源。這些共享的資源可以包括處理器總線,存儲器控制器,橋,中斷控制器,存儲器等。
系統(tǒng)的另一個(gè)處理器在遇到異常時(shí)可以被同一個(gè)異常向量引導(dǎo)。結(jié)果,第二處理器可以開始執(zhí)行和第一個(gè)處理器相同的異常處理代碼,并可能開始訪問和配置和第一個(gè)處理器相同的共享資源。這種狀態(tài)可以引起可能打斷系統(tǒng)的操作的沖突,特別是如果兩個(gè)處理器的異常處理操作重疊的話。
在一些多處理器系統(tǒng)中,系統(tǒng)的各個(gè)處理器可能正在執(zhí)行被設(shè)計(jì)為用于多處理器操作的公共的操作系統(tǒng)。因而,公共的操作系統(tǒng)可被設(shè)計(jì)為盡管一個(gè)以上的處理器在特定的異常向量處執(zhí)行相同的異常處理代碼也可避免沖突。
在其它的多處理器系統(tǒng)中,系統(tǒng)的每個(gè)處理器可以執(zhí)行不同的操作系統(tǒng)。這種系統(tǒng)中的一個(gè)方法是重寫不同操作系統(tǒng)的幾個(gè)部分以適應(yīng)一個(gè)以上的處理器在特定的異常向量處執(zhí)行相同的異常處理代碼的情況。另一個(gè)方法是提供用于協(xié)調(diào)各個(gè)處理器的操作以便減少沖突的硬件。
發(fā)明內(nèi)容
在一個(gè)實(shí)施例中,多處理器系統(tǒng)中的第一處理器遇到異常并跳轉(zhuǎn)到體系結(jié)構(gòu)定義的異常向量處的異常處理程序代碼。該處理器被引導(dǎo)到一個(gè)數(shù)據(jù)結(jié)構(gòu),該數(shù)據(jù)結(jié)構(gòu)提供了指向附加的異常處理程序代碼的可編程異常向量。這個(gè)附加的代碼可以如同其位于體系結(jié)構(gòu)定義的異常向量處那樣被執(zhí)行。描述并提出了其它的實(shí)施例。
圖1表示用于實(shí)施本發(fā)明的實(shí)施例的計(jì)算環(huán)境;以及圖2表示用于管理多處理器異常處理操作的操作。
具體實(shí)施例方式
圖1表示一種計(jì)算環(huán)境的一個(gè)例子,其中可以使用此處提供的說明的各個(gè)方面。一個(gè)或多個(gè)主機(jī)2將定向到存儲系統(tǒng)4的輸入/輸出(I/O)請求傳遞到控制單元6,控制單元6管理對存儲系統(tǒng)4的訪問。在一個(gè)實(shí)施例中,控制單元6由兩個(gè)處理復(fù)合體8a,8b構(gòu)成,它們中的每個(gè)包括處理器10a,10c和主機(jī)適配器22a,22b。每個(gè)主機(jī)適配器22a,22b使相關(guān)聯(lián)的處理復(fù)合體能夠和主機(jī)2通信,并包括處理器10b,10d。每個(gè)處理器10a,10b,10c,10d可以具有相同的體系結(jié)構(gòu)例如PowerPC處理器體系結(jié)構(gòu)。應(yīng)當(dāng)理解,處理器10a,10b,10c,10d可以具有其它型號和制造者的其它類型的體系結(jié)構(gòu)。還應(yīng)當(dāng)理解,處理器10a,10b,10c,10d可以彼此不同,并且因而每個(gè)具有不同的體系結(jié)構(gòu)或制造者。
在所示的實(shí)施例中,每個(gè)處理器10a,10b,10c,10d分別具有相關(guān)聯(lián)的存儲器12a,12b,12c,12d,并分別單獨(dú)執(zhí)行操作系統(tǒng)18a,18b,18c,18d,并且分別具有設(shè)備驅(qū)動(dòng)器20a,20b,20c,20d。操作系統(tǒng)18a,18b,18c,18d的類型可以彼此相同,或者每一個(gè)可以是完全不同類型的操作系統(tǒng)。例如操作系統(tǒng)18a,18c中的每一個(gè)可以是嵌入式多線程操作系統(tǒng),例如LINUX,而操作系統(tǒng)18b,18d中的每一個(gè)可以是(例如)執(zhí)行用于主機(jī)適配器的實(shí)時(shí)任務(wù)的嵌入式硬件抽象層。應(yīng)當(dāng)理解,根據(jù)特定的應(yīng)用,可以使用各種類型的操作系統(tǒng)及其組合。
每個(gè)處理器10a,10b,10c,10d可以具有若干個(gè)內(nèi)部存儲器資源,例如分別由內(nèi)部寄存器19a,19b,19c,19d表示的寄存器。每個(gè)設(shè)備驅(qū)動(dòng)器20a,20b,20c,20d提供設(shè)備驅(qū)動(dòng)器20a,20b,20c,20d執(zhí)行于其中的處理復(fù)合體8a,8b內(nèi)的相關(guān)操作系統(tǒng)18a,18b,18c,18d和內(nèi)部或外部設(shè)備例如主機(jī)適配器22a,22b以及各種設(shè)備適配器24a,24b之間的接口。雖然所示的實(shí)施例示出了具有兩個(gè)不同組件例如處理復(fù)合體8a,8b,設(shè)備適配器24a,24b等的控制單元6,應(yīng)當(dāng)理解,控制單元6可以具有更多或更少的這種組件。
處理復(fù)合體8a可以具有和總線31a相連的并由該處理復(fù)合體8a的處理器10a和處理器10b共享的共享存儲器30a。每個(gè)存儲器12a,12b可以具有高速緩存28a,28b,其中可以高速緩存共享的存儲器30a的一個(gè)或多個(gè)行。類似地,處理復(fù)合體8b可以具有和總線31b相連的并由該處理復(fù)合體8b的處理器10c和處理器10d共享的共享存儲器30b。每個(gè)存儲器12c,12d可以具有高速緩存28c,28d,其中可以高速緩存共享的存儲器30b的一個(gè)或多個(gè)行。高速緩存28a,28b,28c,28d可以高速緩存控制單元6的其它存儲器的行。
每個(gè)處理復(fù)合體8a,8b可以處于的單獨(dú)的功率邊界(power boundary)上。處理復(fù)合體8a,8b可被分配為處理定向到被配置在存儲系統(tǒng)4中的特定卷的I/O請求。處理復(fù)合體8a,8b通過設(shè)備適配器24a,24b,24c,24d在設(shè)備網(wǎng)絡(luò)(未示出)上和存儲系統(tǒng)4通信,所述設(shè)備網(wǎng)絡(luò)可以包括局域網(wǎng)(LAN),存儲區(qū)域網(wǎng)絡(luò)(SAN),總線接口,串行接口等。此外,處理復(fù)合體8a,8b在包括橋34的連接32上進(jìn)行通信,使得能夠進(jìn)行處理器間的通信以便管理對共享的設(shè)備例如共享的適配器22a,22b進(jìn)行的配置操作。
控制單元6可以包括任何類型的服務(wù)器,例如企業(yè)存儲服務(wù)器、存儲控制器等,或用于管理對所附的存儲系統(tǒng)4(多個(gè))的I/O請求的其它設(shè)備,其中所述存儲系統(tǒng)可以包括本領(lǐng)域已知的一個(gè)或多個(gè)存儲設(shè)備,例如互連的硬盤驅(qū)動(dòng)器(例如,被配置成DASD,RAID,JBOD等)、磁帶、電子存儲器等。主機(jī)2可以通過適配器22a,22b...22n在網(wǎng)絡(luò)(未示出)上和控制單元6通信,所述網(wǎng)絡(luò)例如是局域網(wǎng)(LAN)、存儲區(qū)域網(wǎng)絡(luò)(SAN)、廣域網(wǎng)(WAN)、無線網(wǎng)等??商鎿Q地,主機(jī)2可以在總線接口(例如,外圍組件互連(PCI)總線或串行接口)上和控制單元6通信。
共享的設(shè)備例如共享的適配器22a,22b處的故障可以給處理復(fù)合體8a,8b中的操作系統(tǒng)18a,18b,18c,18d產(chǎn)生機(jī)器檢查狀態(tài),如果共享的硬件具有致命類型的錯(cuò)誤,其可以引起兩個(gè)處理復(fù)合體的崩潰。2004年11月12日申請的、代理卷號為TUC9200400139US1、序列號為No.10/987572、名稱為“METHOD,SYSTEM,AND PROGRAM FOR HANDLING ADEVICE FAILURE”的未決的和共同轉(zhuǎn)讓的專利申請描述了一種用于隔離有故障的共享設(shè)備以避免出現(xiàn)致命的設(shè)備錯(cuò)誤導(dǎo)致兩個(gè)處理復(fù)合體8a,8b崩潰的情況的技術(shù),該專利申請的全部內(nèi)容通過引用被包括在此。在一個(gè)實(shí)施例中,可以通過共享的設(shè)備例如橋34協(xié)調(diào)這些恢復(fù)操作。
提交于2004年11月30日、代理卷號為TUC9200400178US1、序列號為11/000705、名稱為“MANAGING MULTIPROCESSOROPERATIONS”的未決的共同轉(zhuǎn)讓的專利申請描述了使用處理器高速緩存28a,28b,28c,28d和高速緩存一致性協(xié)議的處理器活動(dòng)的協(xié)調(diào),該專利申請的全部內(nèi)容通過引用被包括在此。例如,在本實(shí)施例中作為共享資源的橋34可能發(fā)生故障,并且可能需要被復(fù)位以恢復(fù)正確的功能。可以使用一個(gè)或多個(gè)處理器高速緩存28a,28b,28c,28d以及高速緩存一致性協(xié)議在處理器10a,10b,10c,10d之間協(xié)調(diào)這個(gè)恢復(fù)操作。
如下面詳細(xì)解釋的那樣,可以提供在異常向量處的異常處理代碼,以便將一個(gè)處理器引導(dǎo)向一個(gè)數(shù)據(jù)結(jié)構(gòu),所述數(shù)據(jù)結(jié)構(gòu)例如可以是該處理器的內(nèi)部寄存器。用于這個(gè)處理器的所述數(shù)據(jù)結(jié)構(gòu)可以提供到一個(gè)地址的另一個(gè)異常向量,該地址含有用于該處理器的相關(guān)的異常處理代碼??梢杂稍撎幚砥魅缤摦惓L幚泶a位于原始的異常向量地址處那樣以相同的方式執(zhí)行由該數(shù)據(jù)結(jié)構(gòu)在該異常向量處提供的這個(gè)異常處理代碼。
類似地,在相同的異常向量處執(zhí)行相同的異常處理代碼的第二處理器可以被引導(dǎo)向一個(gè)數(shù)據(jù)結(jié)構(gòu),例如該處理器內(nèi)部的寄存器。用于第二處理器的這個(gè)數(shù)據(jù)結(jié)構(gòu)同樣可以包括到另一個(gè)地址的異常向量,其可以含有用于第二處理器的單獨(dú)的異常處理代碼。可以由第二處理器如同該異常處理代碼位于原始異常向量地址處那樣以相同的方式執(zhí)行由第二數(shù)據(jù)結(jié)構(gòu)在該異常向量處提供的這個(gè)異常處理代碼。用這種方式,單獨(dú)的處理器可以執(zhí)行單獨(dú)的異常處理程序,盡管最初每個(gè)處理器由公共的體系結(jié)構(gòu)定義的異常向量引導(dǎo)向相同的物理存儲器地址。結(jié)果,可以減少或避免沖突。應(yīng)當(dāng)理解,在其它應(yīng)用中,根據(jù)特定的應(yīng)用可以利用其它的特征。
圖2表示操作的實(shí)施例,其中可以在多處理器系統(tǒng)例如控制單元6中由多個(gè)處理器執(zhí)行異常處理程序。在一個(gè)操作中,第一處理器例如處理器10a在執(zhí)行指令時(shí)遇到異常(塊200)。遇到的異常可以是若干個(gè)異常例如DSI、機(jī)器檢查、ISI、外部中斷、定位、程序或系統(tǒng)調(diào)用異常中的任何異常。應(yīng)當(dāng)理解,根據(jù)特定的處理器和該處理器的應(yīng)用,遇到的異??梢允橇硪环N類型的異常。
在另一個(gè)操作中,第一處理器10a跳轉(zhuǎn)到(塊202)在第一預(yù)定地址處的異常處理程序代碼。在所述的實(shí)施例中,遇到的異常具有體系結(jié)構(gòu)定義的異常向量。例如,遇到的異常可以是DSI異常,其具有例如共享的存儲器30a的物理地址0x00300的硬件定義的異常向量。因而,處理器10a跳轉(zhuǎn)到存儲在物理存儲器地址0x00300處的指令代碼。
在一種類型的處理器中,可以由快閃存儲器或只讀存儲器定義體系結(jié)構(gòu)定義的異常向量。在其它的處理器中,異常向量可以由硬件電路定義。應(yīng)當(dāng)理解,體系結(jié)構(gòu)定義的異常向量可以由各種技術(shù)定義,包括硬件、固件或用于限制或消除體系結(jié)構(gòu)定義的異常向量的用戶可編程性的其它技術(shù)。
體系結(jié)構(gòu)定義的異常向量的另一個(gè)例子是可以通過使用體系結(jié)構(gòu)定義的偏移向量導(dǎo)出異常向量的地址,所述偏移向量定義一個(gè)偏移地址,該偏移地址被加到可由用戶設(shè)置的處理器寄存器所指示的體系結(jié)構(gòu)定義的物理基地址上。因此例如,DSI異??梢跃哂?x00300的硬件分配的向量偏移地址。如果在合適的處理器寄存器中清除一個(gè)特定的位,則所述物理基地址可以具有硬件分配的值0x00000,從而處理器10a在預(yù)定的物理地址0x00300處開始執(zhí)行用于DSI異常的指令代碼。然而如果在合適的處理器寄存器中設(shè)置所述特定的位,所述物理基本地址可以具有(例如)硬件分配值0XFFF00000,從而處理器10a可以在(例如)共享的存儲器30a的預(yù)定的物理地址0XFFF00300處開始執(zhí)行用于DSI異常的指令代碼。
在另一個(gè)操作中,處理器10a執(zhí)行(塊204)例如存儲在預(yù)定地址諸如DSI異常向量物理地址0x00300的代碼。在這個(gè)例子中,存儲在該異常向量處的異常處理程序代碼是能夠被控制單元6的任何一個(gè)處理器10a,10b執(zhí)行的代碼。因而,存儲在體系結(jié)構(gòu)定義的異常向量處的異常處理程序代碼對于兩個(gè)處理器10a,10b是公共的異常處理程序代碼。在執(zhí)行物理地址0x00300處的公共異常處理程序代碼時(shí),第一處理器10a在第一數(shù)據(jù)結(jié)構(gòu)讀出一個(gè)值。處理器10a可以跳轉(zhuǎn)到(塊206)另一個(gè)地址,該地址的等式是從所述數(shù)據(jù)結(jié)構(gòu)讀出的值的函數(shù)。
在所示的實(shí)施例中,該數(shù)據(jù)結(jié)構(gòu)可以是處理器10a的內(nèi)部寄存器19a。例如在PowerPC處理器中,當(dāng)執(zhí)行存儲在原始異常向量物理地址處的代碼時(shí),處理器10a可以讀專用寄存器(SPRG0)。因而,在體系結(jié)構(gòu)定義的異常向量處的異常處理程序代碼可以引導(dǎo)處理器10a讀出存儲在SPRG0寄存器19a內(nèi)的值。應(yīng)當(dāng)理解,可以利用處理器10能夠訪問的其它資源存儲這個(gè)值。
例如在這個(gè)例子中,由處理器10a從其SPRG0寄存器19a讀出的值是可編程的異常向量,其標(biāo)識一個(gè)物理存儲器地址,附加的異常處理程序代碼可以被存儲在該地址處以便處理遇到的異常諸如DSI異常。該可編程異常向量的物理存儲器地址例如可以位于存儲器12a中,其可以是例如用于處理器10a的私有存儲器。在跳轉(zhuǎn)到由存儲處理器寄存器19a內(nèi)的可編程異常向量標(biāo)識的物理存儲器地址之后,可以執(zhí)行(塊208)存儲在該可編程異常向量處的附加的異常處理程序代碼。
在所示的實(shí)施例中,存儲在處理器10a的SPRG0內(nèi)的異常向量可被容易地編程,從而軟件可以將合適的地址存儲在該寄存器中。應(yīng)當(dāng)理解,根據(jù)特定的應(yīng)用,存儲在寄存器中的特定地址可以由操作系統(tǒng)18a、應(yīng)用程序、固件、硬件或其它的源進(jìn)行選擇。
此外,實(shí)際的異常向量可以被整個(gè)存儲在處理器寄存器10a中。應(yīng)當(dāng)理解,可以使用所存儲的值的其它函數(shù)確定所述異常向量。例如,所存儲的值可以是偏移向量,它被加到基地址上以提供最后的異常向量。可以對存儲在處理器寄存器19a中的值進(jìn)行其它處理以提供異常向量。
在由處理器寄存器19a存儲的可編程異常向量處的附加的異常處理代碼可以由處理器10a以與實(shí)際上的第一級異常處理代碼相同的方式執(zhí)行,就如同附加的異常處理代碼位于體系結(jié)構(gòu)定義的異常向量的物理地址處一樣。此外,因?yàn)楦郊拥漠惓L幚沓绦虼a位于由處理器10a的寄存器19a定義的單獨(dú)的物理地址,附加的異常處理程序代碼可以由處理器10a單獨(dú)地執(zhí)行,并且因而可以不是兩個(gè)處理器10a,10b公共的異常處理程序代碼。這個(gè)附加的異常處理程序代碼可以是單獨(dú)的并專用于第一處理器10a的操作系統(tǒng)18a。以這種方式,在由多處理器執(zhí)行異常處理程序代碼時(shí)可以減少或消除沖突。
在所示的例子中,第二處理器諸如主機(jī)適配器22a的處理器10b也遇到(塊210)異常。這可以在第一處理器10a遇到(塊200)異常的同時(shí)發(fā)生或者在足夠接近的時(shí)間發(fā)生,因而由兩個(gè)處理器10a,10b進(jìn)行的異常處理程序的操作導(dǎo)致了沖突。例如在這個(gè)例子中,遇到的異常也是DSI異常,但是遇到的異??梢允侨舾蓚€(gè)異常例如機(jī)器檢查、ISI、外部中斷、定位、程序或系統(tǒng)調(diào)用異常中的任何異常。
在另一個(gè)操作中,第二處理器10b跳轉(zhuǎn)到(塊212)和第一處理器10a跳轉(zhuǎn)到(塊202)的相同的預(yù)定地址處的異常處理程序代碼。在所示的實(shí)施例中,由第二處理器10b遇到的異常也具有體系結(jié)構(gòu)定義的異常向量。例如,遇到的異常可以也是DSI異常向量,其具有例如相同的共享存儲器30a的物理地址(例如)0x00300的硬件定義的異常向量。因而,處理器10b跳轉(zhuǎn)到存儲在物理存儲器地址0x00300處的指令代碼,與本例中的處理器10a相同。
在另一個(gè)操作中,處理器10b執(zhí)行(塊214)存儲在預(yù)定地址例如在這個(gè)例子中的DSI異常向量物理地址0x00300處的代碼。如前所述,在這個(gè)例子中,存儲在該異常向量處的異常處理程序代碼是可以由控制單元6的任何一個(gè)處理器10a,10b執(zhí)行的公共代碼。在執(zhí)行物理地址0x00300處的公共異常處理程序代碼時(shí),第二處理器10b讀出第二數(shù)據(jù)結(jié)構(gòu)處的一個(gè)值。處理器10b可以跳轉(zhuǎn)到(塊216)另一個(gè)地址,該地址的等式是從所述第二數(shù)據(jù)結(jié)構(gòu)讀出的值的函數(shù)。
在所示的實(shí)施例中,第二數(shù)據(jù)結(jié)構(gòu)可以是處理器10b的內(nèi)部寄存器19b,例如處理器10b的專用寄存器(SPRG0)。因而,存儲在公共的體系結(jié)構(gòu)定義的異常向量處的公共異常處理程序代碼可以將執(zhí)行該代碼的每個(gè)處理器10a,10b引導(dǎo)到被公共標(biāo)識確定的數(shù)據(jù)結(jié)構(gòu)例如諸如SPRG0。然而,每個(gè)處理器10a,10b在執(zhí)行該代碼時(shí)實(shí)際上被引導(dǎo)到不同的內(nèi)部寄存器19a,19b,不過它們具有公共的標(biāo)識SPRG0。因而,當(dāng)執(zhí)行存儲在原始的體系結(jié)構(gòu)定義的異常向量的物理地址處的代碼時(shí),處理器10b可以讀SPRG0寄存器19b。應(yīng)當(dāng)理解,可以利用處理器10b可以訪問的其它資源來存儲這個(gè)值。
在這個(gè)例子中,由處理器10b讀出的值也是可編程異常向量,其標(biāo)識一個(gè)物理存儲器地址,在該地址處可以存儲附加的異常處理程序代碼以便處理遇到的異常例如諸如DSI異常??删幊坍惓O蛄康奈锢泶鎯ζ鞯刂防缈梢允谴鎯ζ?2b的物理地址,例如其可以是處理器10b的私有存儲器。因而,由處理器10b的SPRG0寄存器19b存儲的可編程異常向量可以和由處理器10a的SPRG0寄存器19a存儲的可編程異常向量不同。因而,存儲在處理器10b的寄存器19b的可編程異常向量處的附加的異常處理程序代碼可以和存儲在處理器10a的寄存器19a的可編程異常向量處的附加的異常處理程序代碼分開。例如,存儲在存儲器12b內(nèi)處理器10b的寄存器19b的可編程異常向量處的附加的異常處理程序代碼可以和存儲在存儲器12a內(nèi)處理器10a的寄存器19a的可編程異常向量處的附加的異常處理程序代碼分開。此外,這個(gè)單獨(dú)的異常處理程序代碼可以是第二處理器10b的操作系統(tǒng)18b專用的。
在跳轉(zhuǎn)到由存儲在處理器10b的寄存器19b中的可編程異常向量標(biāo)識的物理存儲器地址之后,可以由第二處理器10b執(zhí)行(塊218)存儲在該可編程異常向量處的單獨(dú)的、附加的異常處理程序代碼。在由處理器10b的寄存器19b標(biāo)識的可編程異常向量處的(并被存儲在存儲器12b中)這個(gè)附加的異常處理代碼可以由處理器10b如同該附加的異常處理代碼位于體系結(jié)構(gòu)定義的異常向量的物理地址處那樣(在這個(gè)例子中,在共享的存儲器30a內(nèi))以相同的方式執(zhí)行。此外,因?yàn)樵摳郊拥漠惓L幚沓绦虼a位于由處理器10b的寄存器19b定義的物理地址處,這個(gè)附加的異常處理程序代碼可以由處理器10b單獨(dú)地執(zhí)行,并且因而可以不是兩個(gè)處理器10a,10b公共的異常處理程序代碼。以這種方式,在由多處理器執(zhí)行異常處理程序代碼時(shí)可以減少或消除沖突。
復(fù)合體8b的處理器10c,10d可以用類似的方式利用共享的存儲器30b和內(nèi)部寄存器19c,19d以便協(xié)調(diào)異常處理并減少或消除沖突??梢岳斫猓幚砥?0a,10b,10c,10d的各種實(shí)施例可以利用共享的存儲器以及各種數(shù)據(jù)結(jié)構(gòu)來進(jìn)行異常處理。
附加的實(shí)施例的詳細(xì)說明上述的實(shí)施例可以被實(shí)現(xiàn)為使用標(biāo)準(zhǔn)的編程和/或工程技術(shù)生產(chǎn)軟件、固件、硬件或其組合的方法、設(shè)備或制造產(chǎn)品。這里使用的術(shù)語“制造產(chǎn)品”指的是以硬件邏輯(例如集成電路芯片、可編程門陣列(PGA),專用集成電路(ASIC)等)或計(jì)算機(jī)可讀介質(zhì)例如磁存儲介質(zhì)(例如,硬盤驅(qū)動(dòng)器、軟盤、磁帶等)、光存儲器(CD-ROM,光盤等)、易失的和非易失的存儲器設(shè)備(例如EEPROM,ROM,PROM,RAM,DRAM,SRAM,固件,可編程邏輯等)實(shí)現(xiàn)的代碼或邏輯。由處理器訪問和執(zhí)行計(jì)算機(jī)可讀介質(zhì)中的代碼。還可以通過傳輸介質(zhì)或從網(wǎng)絡(luò)上的文件服務(wù)器訪問實(shí)施優(yōu)選實(shí)施例的代碼。在這種情況下,其中實(shí)現(xiàn)代碼的制造產(chǎn)品可以包括傳輸介質(zhì)例如網(wǎng)絡(luò)傳輸線、無線電傳輸介質(zhì)、通過空間傳播的信號、無線電波、紅外線信號等。因而,“制造產(chǎn)品”可以包括其中包含代碼的介質(zhì)。此外,“制造產(chǎn)品”可以包括所述代碼被包含在其中、被在其中處理和執(zhí)行的硬件和軟件組件的組合。當(dāng)然,本領(lǐng)域技術(shù)人員應(yīng)當(dāng)理解,不脫離本說明的范圍,可以對該配置做出許多改變,并且制造產(chǎn)品可以包括本領(lǐng)域已知的任何信息承載介質(zhì)。
某些實(shí)施例可能涉及用于由人或?qū)⒂?jì)算機(jī)可讀代碼集成到計(jì)算系統(tǒng)中的自動(dòng)處理部署計(jì)算指令的方法,其中與計(jì)算系統(tǒng)相結(jié)合的代碼能夠執(zhí)行所述實(shí)施例的操作。
在所述的實(shí)施例中,控制單元6包括兩個(gè)處理復(fù)合體8a,8b。在另一些實(shí)施例中,可以具有兩個(gè)以上的訪問共享設(shè)備的系統(tǒng)。
圖2所示的操作示出了按照某個(gè)順序發(fā)生的某些事件。在另外的實(shí)施例中,某些操作可以按照不同順序被執(zhí)行、被修改或被刪除。此外,可以對上述的邏輯附加一些步驟并仍然符合所述的實(shí)施例。此外,此處所述的操作可以順序地發(fā)生,或者某些操作可被并行地處理。此外,這些操作可以由單個(gè)處理單元或者由分布式處理單元執(zhí)行。
出于說明和解釋的目的給出了對各種實(shí)施例的上述說明。其不旨在是無遺露的或者把本發(fā)明限制于所披露的精確的形式。根據(jù)上述的教導(dǎo),可以做出許多改變和改型。
權(quán)利要求
1.一種用于在具有第一和第二處理器的系統(tǒng)中執(zhí)行代碼的方法,包括所述第一處理器遇到第一異常;所述第一處理器跳轉(zhuǎn)以便執(zhí)行在第一預(yù)定地址處的第一異常處理程序代碼;所述第一處理器執(zhí)行在所述第一預(yù)定地址處的所述第一異常處理程序代碼,其中所述第一指令處理程序代碼引導(dǎo)所述第一處理器讀取在第一數(shù)據(jù)結(jié)構(gòu)處的值;所述第一處理器跳轉(zhuǎn)以便執(zhí)行作為從所述第一數(shù)據(jù)結(jié)構(gòu)讀取的值的函數(shù)的第二地址處的第二異常處理程序代碼;以及所述第一處理器執(zhí)行所述第二異常處理程序代碼以便處理所述第一異常。
2.如權(quán)利要求1所述的方法,還包括所述第二處理器遇到第二異常;所述第二處理器跳轉(zhuǎn)以便執(zhí)行在所述第一預(yù)定地址處的所述第一異常處理程序代碼;所述第二處理器執(zhí)行在所述第一預(yù)定地址處的所述第一異常處理程序代碼,其中所述第一指令處理程序代碼引導(dǎo)所述第二處理器讀取在第二數(shù)據(jù)結(jié)構(gòu)處的值;所述第二處理器跳轉(zhuǎn)以便執(zhí)行作為從所述第二數(shù)據(jù)結(jié)構(gòu)讀取的值的函數(shù)的第三地址處的第三異常處理程序代碼;以及所述第二處理器執(zhí)行所述第三異常處理程序代碼以便處理所述第二異常。
3.如權(quán)利要求2所述的方法,其中所述第一數(shù)據(jù)結(jié)構(gòu)是所述第一處理器內(nèi)部的寄存器。
4.如權(quán)利要求3所述的方法,其中所述第二數(shù)據(jù)結(jié)構(gòu)是所述第二處理器內(nèi)部的寄存器。
5.如權(quán)利要求4所述的方法,其中所述第一處理器的所述內(nèi)部寄存器和所述第二處理器的所述內(nèi)部寄存器在所述第一異常處理程序代碼內(nèi)具有公共標(biāo)識。
6.如權(quán)利要求1所述的方法,其中所述第一預(yù)定地址是由所述第一和第二處理器的體系結(jié)構(gòu)定義的異常向量。
7.如權(quán)利要求6所述的方法,其中所述體系結(jié)構(gòu)定義的異常向量由第一和第二處理器的快閃存儲器定義。
8.如權(quán)利要求6所述的方法,其中所述體系結(jié)構(gòu)定義的異常向量包括體系結(jié)構(gòu)定義的偏移向量。
9.一種系統(tǒng),包括具有適用于存儲值的第一數(shù)據(jù)結(jié)構(gòu)的第一處理器;第二處理器;適用于在第一預(yù)定地址處存儲第一異常處理程序代碼和在第二地址處存儲第二異常處理程序代碼的存儲器;所述第一處理器具有適用于下述的邏輯遇到第一異常;跳轉(zhuǎn)以便執(zhí)行在所述第一預(yù)定地址處的所述第一異常處理程序代碼;執(zhí)行在所述第一預(yù)定地址處的所述第一異常處理程序代碼,其中所述第一指令處理程序代碼引導(dǎo)所述第一處理器從第一數(shù)據(jù)結(jié)構(gòu)讀取值;跳轉(zhuǎn)以便執(zhí)行作為從所述第一數(shù)據(jù)結(jié)構(gòu)讀出的值的函數(shù)的所述第二地址處的所述第二異常處理程序代碼;以及執(zhí)行所述第二異常處理程序代碼以便處理所述第一異常。
10.如權(quán)利要求9所述的系統(tǒng),其中所述第二處理器具有適用于存儲值的第二數(shù)據(jù)結(jié)構(gòu),所述存儲器適用于在第三地址處存儲第三異常處理程序代碼,其中所述第二處理器具有適用于下述的邏輯遇到第二異常;跳轉(zhuǎn)以便執(zhí)行在所述第一預(yù)定地址處的所述第一異常處理程序代碼;執(zhí)行在所述第一預(yù)定地址處的所述第一異常處理程序代碼,其中所述第一指令處理程序代碼引導(dǎo)所述第二處理器讀取在所述第二數(shù)據(jù)結(jié)構(gòu)處的值;跳轉(zhuǎn)以便執(zhí)行作為從所述第二數(shù)據(jù)結(jié)構(gòu)讀取的值的函數(shù)的第三地址處的所述第三異常處理程序代碼;以及執(zhí)行所述第三異常處理程序代碼以便處理所述第二異常。
11.如權(quán)利要求10所述的系統(tǒng),其中所述第一數(shù)據(jù)結(jié)構(gòu)是所述第一處理器內(nèi)部的寄存器。
12.如權(quán)利要求11所述的系統(tǒng),其中所述第二數(shù)據(jù)結(jié)構(gòu)是所述第二處理器內(nèi)部的寄存器。
13.如權(quán)利要求12所述的系統(tǒng),其中所述第一處理器的所述內(nèi)部寄存器和所述第二處理器的所述內(nèi)部寄存器在所述第一異常處理程序代碼內(nèi)具有公共標(biāo)識。
14.如權(quán)利要求9所述的系統(tǒng),其中所述第一和第二處理器的每一個(gè)定義一個(gè)體系結(jié)構(gòu),并且其中所述第一預(yù)定地址是由所述第一和第二處理器的體系結(jié)構(gòu)定義的異常向量。
15.如權(quán)利要求14所述的系統(tǒng),其中所述第一和第二處理器的每一個(gè)具有快閃存儲器,并且其中所述體系結(jié)構(gòu)定義的異常向量由所述第一和第二處理器的所述快閃存儲器定義。
16.如權(quán)利要求14所述的系統(tǒng),其中所述體系結(jié)構(gòu)定義的異常向量包括體系結(jié)構(gòu)定義的偏移向量。
17.一種制造產(chǎn)品,包括能夠由一個(gè)系統(tǒng)執(zhí)行以便執(zhí)行操作的代碼,其中所述系統(tǒng)具有適用于存儲值的第一數(shù)據(jù)結(jié)構(gòu)的第一處理器,第二處理器,和適用于在第一預(yù)定地址處存儲第一異常處理程序代碼和在第二地址處存儲第二異常處理程序代碼的存儲器,其中所述操作包括所述第一處理器遇到第一異常;所述第一處理器跳轉(zhuǎn)以便執(zhí)行在所述第一預(yù)定地址處的所述第一異常處理程序代碼;所述第一處理器執(zhí)行在所述第一預(yù)定地址處的所述第一異常處理程序代碼,其中所述第一指令處理程序代碼引導(dǎo)所述第一處理器讀取在第一數(shù)據(jù)結(jié)構(gòu)處的值;所述第一處理器跳轉(zhuǎn)以便執(zhí)行作為從所述第一數(shù)據(jù)結(jié)構(gòu)讀取的值的函數(shù)的所述第二地址處的所述第二異常處理程序代碼;以及所述第一處理器執(zhí)行所述第二異常處理程序代碼以便處理所述第一異常。
18.如權(quán)利要求17所述的制品,其中所述第二處理器具有適用于存儲值的第二數(shù)據(jù)結(jié)構(gòu),所述存儲器適用于在第三地址處存儲第三異常處理程序代碼,并且其中所述操作還包括所述第二處理器遇到第二異常;所述第二處理器跳轉(zhuǎn)以便執(zhí)行在所述第一預(yù)定地址處的所述第一異常處理程序代碼;所述第二處理器執(zhí)行在所述第一預(yù)定地址處的所述第一異常處理程序代碼,其中所述第一指令處理程序代碼引導(dǎo)所述第二處理器讀取所述第二數(shù)據(jù)結(jié)構(gòu)處的值;所述第二處理器跳轉(zhuǎn)以便執(zhí)行作為從所述第二數(shù)據(jù)結(jié)構(gòu)讀取的值的函數(shù)的所述第三地址處的所述第三異常處理程序代碼;以及所述第二處理器執(zhí)行所述第三異常處理程序代碼以便處理所述第二異常。
19.如權(quán)利要求18所述的制品,其中所述第一數(shù)據(jù)結(jié)構(gòu)是所述第一處理器內(nèi)部的寄存器。
20.如權(quán)利要求19所述的制品,其中所述第二數(shù)據(jù)結(jié)構(gòu)是所述第二處理器內(nèi)部的寄存器。
21.如權(quán)利要求20所述的制品,其中所述第一處理器的所述內(nèi)部寄存器和所述第二處理器的所述內(nèi)部寄存器在所述第一異常處理程序代碼內(nèi)具有公共標(biāo)識。
22.如權(quán)利要求17所述的制品,其中所述第一和第二處理器的每一個(gè)定義一個(gè)體系結(jié)構(gòu),并且其中所述第一預(yù)定地址是由所述第一和第二處理器的體系結(jié)構(gòu)定義的異常向量。
23.如權(quán)利要求22所述的制品,其中所述第一和第二處理器的每一個(gè)具有快閃存儲器,并且其中所述體系結(jié)構(gòu)定義的異常向量由所述第一和第二處理器的所述快閃存儲器定義。
24.如權(quán)利要求22所述的制品,其中所述體系結(jié)構(gòu)定義的異常向量包括體系結(jié)構(gòu)定義的偏移向量。
25.一種用于部署計(jì)算指令的方法,包括把計(jì)算機(jī)可讀代碼集成在一個(gè)系統(tǒng)中,其中所述系統(tǒng)具有適用于存儲值的第一數(shù)據(jù)結(jié)構(gòu)的第一處理器,第二處理器,和適用于在第一預(yù)定地址處存儲第一異常處理程序代碼和在第二地址處存儲第二異常處理程序代碼的存儲器,并且其中與所述系統(tǒng)相結(jié)合的代碼能夠使所述系統(tǒng)執(zhí)行所述第一處理器遇到第一異常;所述第一處理器跳轉(zhuǎn)以便執(zhí)行在所述第一預(yù)定地址處的所述第一異常處理程序代碼;所述第一處理器執(zhí)行在所述第一預(yù)定地址處的所述第一異常處理程序代碼,其中所述第一指令處理程序代碼引導(dǎo)所述第一處理器讀取在第一數(shù)據(jù)結(jié)構(gòu)處的值;所述第一處理器跳轉(zhuǎn)以便執(zhí)行作為從所述第一數(shù)據(jù)結(jié)構(gòu)讀取的值的函數(shù)的所述第二地址處的所述第二異常處理程序代碼;以及所述第一處理器執(zhí)行所述第二異常處理程序代碼以便處理所述第一異常。
26.如權(quán)利要求25所述的方法,其中所述第二處理器具有適用于存儲值的第二數(shù)據(jù)結(jié)構(gòu),所述存儲器適用于在第三地址處存儲第三異常處理程序代碼,其中與所述系統(tǒng)相結(jié)合的代碼能夠使所述系統(tǒng)進(jìn)行所述第二處理器遇到第二異常;所述第二處理器跳轉(zhuǎn)以便執(zhí)行在所述第一預(yù)定地址處的所述第一異常處理程序代碼;所述第二處理器執(zhí)行在所述第一預(yù)定地址處的所述第一異常處理程序代碼,其中所述第一指令處理程序代碼引導(dǎo)所述第二處理器讀取在所述第二數(shù)據(jù)結(jié)構(gòu)處的值;所述第二處理器跳轉(zhuǎn)以便執(zhí)行作為從所述第二數(shù)據(jù)結(jié)構(gòu)讀取的值的函數(shù)的所述第三地址處的第三異常處理程序代碼;以及所述第二處理器執(zhí)行所述第三異常處理程序代碼以便處理所述第二異常。
27.如權(quán)利要求26所述的方法,其中所述第一數(shù)據(jù)結(jié)構(gòu)是所述第一處理器內(nèi)部的寄存器。
28.如權(quán)利要求27所述的方法,其中所述第二數(shù)據(jù)結(jié)構(gòu)是所述第二處理器內(nèi)部的寄存器。
29.如權(quán)利要求28所述的方法,其中所述第一處理器的所述內(nèi)部寄存器和所述第二處理器的所述內(nèi)部寄存器在所述第一異常處理程序代碼內(nèi)具有公共標(biāo)識。
30.如權(quán)利要求25所述的方法,其中所述第一和第二處理器的每一個(gè)定義一個(gè)體系結(jié)構(gòu),并且其中所述第一預(yù)定地址是由所述第一和第二處理器的體系結(jié)構(gòu)定義的異常向量。
31.如權(quán)利要求30所述的方法,其中所述第一和第二處理器的每一個(gè)具有快閃存儲器,并且其中所述體系結(jié)構(gòu)定義的異常向量由所述第一和第二處理器的所述快閃存儲器定義。
32.如權(quán)利要求30所述的方法,其中所述體系結(jié)構(gòu)定義的異常向量包括體系結(jié)構(gòu)定義的偏移向量。
全文摘要
在一個(gè)實(shí)施例中,多處理器系統(tǒng)的第一處理器遇到異常并跳轉(zhuǎn)以便執(zhí)行在體系結(jié)構(gòu)定義的異常向量處的異常處理程序代碼。該處理器被引導(dǎo)到一個(gè)數(shù)據(jù)結(jié)構(gòu),其提供了指向附加的異常處理程序代碼的可編程異常向量。這個(gè)附加的代碼可以被如同其位于體系結(jié)構(gòu)定義的異常向量處那樣執(zhí)行。描述了并提出了其它的實(shí)施例。
文檔編號G06F15/16GK1783021SQ20051012351
公開日2006年6月7日 申請日期2005年11月17日 優(yōu)先權(quán)日2004年11月30日
發(fā)明者S·L·布林尼克, R·S·帕迪利亞 申請人:國際商業(yè)機(jī)器公司