亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

對預(yù)處理微指令發(fā)生異常多層嵌套進(jìn)行處理的設(shè)備及方法

文檔序號:6554830閱讀:251來源:國知局
專利名稱:對預(yù)處理微指令發(fā)生異常多層嵌套進(jìn)行處理的設(shè)備及方法
技術(shù)領(lǐng)域
本發(fā)明涉及復(fù)雜指令集計算機內(nèi)部異常處理技術(shù),尤其涉及一種對預(yù)處理微指令發(fā)生異常多層嵌套進(jìn)行處理的設(shè)備及方法。
背景技術(shù)
基于復(fù)雜指令集的計算機(Complex Instruction Set Computer,CISC)是指以微程序為基礎(chǔ)、具有復(fù)雜指令系統(tǒng)的計算機。在CISC系統(tǒng)中,一條復(fù)雜指令一般需要被翻譯為多條微指令,被翻譯的多條微指令被保存在CPU的只讀存儲器(ROM)中,處理器中的指令流水線處理的是這些微指令,而不是翻譯前的操作系統(tǒng)可見的復(fù)雜指令。
微指令通??梢员葟?fù)雜指令操作更多的寄存器資源。例如,復(fù)雜指令集一般可以操作8個可見通用寄存器,而微指令集可以操作32或64個以上的可見通用寄存器。以32個可見的通用寄存器為例,其中的8個可以作為復(fù)雜指令集的通用寄存器,而剩下的24個則保留給微指令集的譯碼器作為臨時寄存器或用作其它用途。
處理器中的指令流水線在處理由一條復(fù)雜指令翻譯成的多條微指令時經(jīng)常發(fā)生異常。在發(fā)生異常后,現(xiàn)有技術(shù)中存在的處理機制首先轉(zhuǎn)入一段預(yù)處理微指令,執(zhí)行這段預(yù)處理微指令能夠保存寄存器現(xiàn)場,并從內(nèi)存中獲取跳轉(zhuǎn)的目標(biāo)地址或通過執(zhí)行微指令動態(tài)生成跳轉(zhuǎn)的目標(biāo)地址,然后根據(jù)目標(biāo)地址跳轉(zhuǎn)到操作系統(tǒng)可見的異常處理程序,執(zhí)行異常處理程序可以實現(xiàn)對異常的修復(fù)。上述跳轉(zhuǎn)的目標(biāo)地址通常存放在系統(tǒng)內(nèi)存的某一固定區(qū)域中。
上述處理機制存在一個問題,即在異常發(fā)生后執(zhí)行預(yù)處理微指令時又可能發(fā)生異常,進(jìn)而形成預(yù)處理微指令的異常多層嵌套。此時,處理器應(yīng)當(dāng)及時對預(yù)處理微指令發(fā)生的異常多層嵌套進(jìn)行處理,在保證這些異常得以正確修復(fù)的同時,又不至于導(dǎo)致指令流程的混亂甚至進(jìn)入異常的死循環(huán)。
但是,目前還不存在對預(yù)處理微指令發(fā)生異常多層嵌套進(jìn)行處理的技術(shù),如何對預(yù)處理微指令發(fā)生異常多層嵌套進(jìn)行處理是目前急需解決的重要問題。

發(fā)明內(nèi)容
(一)要解決的技術(shù)問題針對上述現(xiàn)有技術(shù)存在的不足,本發(fā)明的一個主要目的在于提供一種對預(yù)處理微指令發(fā)生異常多層嵌套進(jìn)行處理的設(shè)備,使發(fā)生的異常得以有序和正確的修復(fù)。
本發(fā)明的另一個主要目的在于提供一種對預(yù)處理微指令發(fā)生異常多層嵌套進(jìn)行處理的方法,使發(fā)生的異常得以有序和正確的修復(fù)。
(二)技術(shù)方案為達(dá)到上述目的,本發(fā)明的技術(shù)方案是這樣實現(xiàn)的一種對預(yù)處理微指令發(fā)生異常多層嵌套進(jìn)行處理的設(shè)備,該設(shè)備包括取指部件,用于從指令高速緩沖內(nèi)存中取出指令,并將取出的指令發(fā)送給譯碼部件;譯碼部件,用于根據(jù)接收自取指部件的指令對緩存的異常信息進(jìn)行譯碼,按譯碼產(chǎn)生的微指令地址索引微指令存儲器獲取異常預(yù)處理微指令,并將獲取的異常預(yù)處理微指令發(fā)送給發(fā)射部件和指令重排序緩沖器;發(fā)射部件,用于將接收的異常預(yù)處理微指令中數(shù)據(jù)已準(zhǔn)備好的指令發(fā)送給執(zhí)行部件;執(zhí)行部件,用于執(zhí)行接收自發(fā)射部件的指令,并將執(zhí)行的結(jié)果寫回到指令重排序緩沖器;指令重排序緩沖器,用于保存計算機指令流水線中每條指令的狀態(tài)信息,并保證指令的精確異常,在指令發(fā)生異常時將異常信息輸出給取指部件、譯碼部件、發(fā)射部件和執(zhí)行部件。
所述譯碼部件包括異常緩沖器,用于緩存接收自指令重排序緩沖器的異常信息,并根據(jù)接收自微碼地址生成器的選擇信號將緩存的異常信息發(fā)送給微碼地址生成器;指令寄存器,用于存放當(dāng)前正在執(zhí)行指令的操作碼字節(jié);微碼地址生成器,用于從異常緩沖器和指令寄存器中選擇信息,并對選擇獲取的信息進(jìn)行譯碼產(chǎn)生微指令地址,按產(chǎn)生的微指令地址索引微指令存儲器獲取微指令;微指令存儲器,用于存儲微指令,并根據(jù)接收自微指令選擇器的選擇信號將微碼地址生成器索引獲取的微指令發(fā)送給微指令選擇器;簡單指令譯碼器,用于對指令寄存器中緩存的信息進(jìn)行譯碼,并根據(jù)接收自微指令選擇器的選擇信號將譯碼產(chǎn)生的微指令發(fā)送給微指令選擇器;微指令選擇器,用于從微指令存儲器和簡單指令譯碼器中選擇微指令,并將選擇獲取的微指令發(fā)送給微指令生成器;微指令生成器,用于對接收自微指令選擇器的微指令進(jìn)行譯碼,將譯碼后的微指令輸出到譯碼總線上。
所述微碼地址生成器和微指令選擇器為二路選擇器,微碼地址生成器優(yōu)先處理從異常緩沖器中選擇獲取的信息,微指令選擇器優(yōu)先處理從微指令存儲器中選擇獲取的微指令。
所述發(fā)射部件進(jìn)一步包括重命名邏輯,用于消除寄存器之間的寫寫相關(guān)和讀寫相關(guān)。
所述執(zhí)行部件的數(shù)量至少為一個。
一種對預(yù)處理微指令發(fā)生異常多層嵌套進(jìn)行處理的方法,該方法包括A、微指令在執(zhí)行過程中發(fā)生異常,譯碼部件緩存異常信息,并對緩存的異常信息進(jìn)行譯碼產(chǎn)生微指令地址;B、譯碼部件按產(chǎn)生的微指令地址索引微指令存儲器獲取異常預(yù)處理微指令,并將獲取的異常預(yù)處理微指令發(fā)送給后端部件,后端部件在執(zhí)行接收的異常預(yù)處理微指令時如果再次發(fā)生異常,則執(zhí)行步驟C;如果不發(fā)生異常,則執(zhí)行步驟D;C、后端部件刷空計算機的指令流水線,譯碼部件緩存再次發(fā)生的異常信息,并對再次發(fā)生的異常信息進(jìn)行譯碼產(chǎn)生微指令地址,轉(zhuǎn)而執(zhí)行步驟B;D、后端部件跳轉(zhuǎn)并執(zhí)行異常處理程序,按異常發(fā)生的時間順序由后到先逐一對異常進(jìn)行修復(fù)。
所述后端部件包括發(fā)射部件、執(zhí)行部件和指令重排序緩沖器,所述步驟B包括B1、譯碼部件按產(chǎn)生的微指令地址索引微指令存儲器獲取異常預(yù)處理微指令,并將獲取的異常預(yù)處理微指令發(fā)送給發(fā)射部件和指令重排序緩沖器;B2、發(fā)射部件將數(shù)據(jù)準(zhǔn)備好的異常預(yù)處理微指令發(fā)送給執(zhí)行部件,執(zhí)行部件將對異常預(yù)處理微指令執(zhí)行的結(jié)果發(fā)送給指令重排序緩沖器;B3、指令重排序緩沖器檢查Roq_head指向的異常預(yù)處理微指令,如果Roq_head指向的異常預(yù)處理微指令發(fā)生異常,則執(zhí)行步驟C;如果Roq_head指向的異常預(yù)處理微指令不發(fā)生異常,則執(zhí)行步驟D。
步驟B1中所述譯碼部件將獲取的異常預(yù)處理微指令發(fā)送給發(fā)射部件是按微指令的地址順序發(fā)送的。
步驟B1中所述譯碼部件將獲取的異常預(yù)處理微指令發(fā)送給發(fā)射部件的同時進(jìn)一步包括譯碼部件將獲取的異常預(yù)處理微指令按微指令的地址順序存放在指令重排序緩沖器中。
步驟C中所述刷空計算機指令流水線的后端部件為指令重排序緩沖器;所述刷空計算機的指令流水線是指令重排序緩沖器通過向取指部件、譯碼部件、發(fā)射部件和執(zhí)行部件輸出異常信息實現(xiàn)的;所述譯碼部件緩存再次發(fā)生的異常信息,是將再次發(fā)生的異常信息緩存在異常緩沖區(qū)中。
所述異常信息可以帶有錯誤碼信息,所述譯碼部件進(jìn)一步將錯誤碼信息緩存到異常緩沖區(qū)中。
所述后端部件為指令重排序緩沖器,所述步驟D包括指令重排序緩沖器跳轉(zhuǎn)到異常處理程序,在最深層次的異常處理程序執(zhí)行完后重新執(zhí)行次深層次的異常處理程序,最后執(zhí)行最頂層次的異常處理程序。
(三)有益效果從上述技術(shù)方案可以看出,本發(fā)明具有以下有益效果1、利用本發(fā)明,在預(yù)處理微指令發(fā)生異常多層嵌套時,通過刷空計算機的指令流水線,跳轉(zhuǎn)并執(zhí)行異常處理程序,在最深層次的異常處理程序執(zhí)行完后重新執(zhí)行次深層次的異常處理程序,最后執(zhí)行最頂層次的異常處理程序,實現(xiàn)了對預(yù)處理微指令發(fā)生異常多層嵌套進(jìn)行的處理,使發(fā)生的異常得以有序和正確的修復(fù)。
2、利用本發(fā)明,由于實現(xiàn)了對預(yù)處理微指令發(fā)生異常多層嵌套進(jìn)行的處理,使發(fā)生的異常得以有序和正確的修復(fù),所以可以進(jìn)一步保證寄存器之間依賴關(guān)系的正確恢復(fù),進(jìn)而使處理器可以從斷點處繼續(xù)執(zhí)行指令,保證了指令執(zhí)行的順利進(jìn)行。
3、利用本發(fā)明,對于在執(zhí)行多條微指令時觸發(fā)的多個異常,同樣可以通過刷空計算機的指令流水線,跳轉(zhuǎn)并執(zhí)行異常處理程序,對多條微指令時觸發(fā)的多個異常逐一進(jìn)行修復(fù),進(jìn)而實現(xiàn)對多條微指令觸發(fā)的多個異常進(jìn)行處理,使發(fā)生的異常得以有序和正確的修復(fù)。


圖1為依照本發(fā)明提供的對預(yù)處理微指令發(fā)生異常多層嵌套進(jìn)行處理的設(shè)備的結(jié)構(gòu)框圖;圖2為依照本發(fā)明提供的對預(yù)處理微指令發(fā)生異常多層嵌套進(jìn)行處理的設(shè)備中譯碼部件的結(jié)構(gòu)框圖;圖3為依照本發(fā)明提供的對預(yù)處理微指令發(fā)生異常多層嵌套進(jìn)行處理設(shè)備中指令重排序緩沖器的示意圖;圖4為本發(fā)明對預(yù)處理微指令發(fā)生異常多層嵌套進(jìn)行處理總體技術(shù)方案的實現(xiàn)流程圖;圖5為對預(yù)處理微指令發(fā)生三層嵌套進(jìn)行處理的示意圖;圖6為重命名模塊中為寄存器建立依賴和取消依賴關(guān)系的示意圖;圖7為依照本發(fā)明實施例中對預(yù)處理微指令發(fā)生異常多層嵌套進(jìn)行處理的方法流程圖。
具體實施例方式
為使本發(fā)明的目的、技術(shù)方案和優(yōu)點更加清楚明白,以下結(jié)合具體實施例,并參照附圖,對本發(fā)明進(jìn)一步詳細(xì)說明。
如圖1所示,圖1為依照本發(fā)明提供的對預(yù)處理微指令發(fā)生異常多層嵌套進(jìn)行處理的設(shè)備的結(jié)構(gòu)框圖。本發(fā)明提供的對預(yù)處理微指令發(fā)生異常多層嵌套進(jìn)行處理的設(shè)備為一個中央處理器(CPU),該CPU包括取指部件101、譯碼部件102、發(fā)射部件103、執(zhí)行部件104和指令重排序緩沖器(ROQ)105。
其中,取指部件101包括指令寄存器,指令高速緩沖內(nèi)存(cache),指令旁路緩沖器,分支預(yù)測器等,具體組成結(jié)構(gòu)可以隨實現(xiàn)系統(tǒng)的復(fù)雜度不同作相應(yīng)的調(diào)整。取指部件101用于從指令cache中取出指令,并將取出的指令發(fā)送給譯碼部件102。
譯碼部件102用于根據(jù)接收自取指部件101的指令對緩存的異常信息進(jìn)行譯碼,按譯碼產(chǎn)生的微指令地址索引微指令存儲器獲取異常預(yù)處理微指令,并將獲取的異常預(yù)處理微指令發(fā)送給發(fā)射部件103和ROQ 105。譯碼部件102的結(jié)構(gòu)將在圖2中進(jìn)一步詳細(xì)描述,這里就不再贅述。
發(fā)射部件103用于將接收的異常預(yù)處理微指令中數(shù)據(jù)已準(zhǔn)備好的指令發(fā)送給執(zhí)行部件104。發(fā)射部件103還可以進(jìn)一步包括重命名邏輯,用于消除寄存器之間的寫寫相關(guān)和讀寫相關(guān)。
執(zhí)行部件104用于執(zhí)行接收自發(fā)射部件103的指令,并將執(zhí)行的結(jié)果寫回到ROQ 105。一般情況下,由于CPU需要同時執(zhí)行各種不同的指令,而每個執(zhí)行部件在同一時刻只能執(zhí)行一種類型的指令,所以執(zhí)行部件的數(shù)量一般至少為一個。
ROQ 105用于保存計算機指令流水線中每條指令的狀態(tài)信息,并保證指令的精確異常,在指令發(fā)生異常時將異常信息輸出給取指部件101、譯碼部件102、發(fā)射部件103和執(zhí)行部件104。計算機指令流水線中每條指令的狀態(tài)信息主要包括指令是否執(zhí)行完畢、指令是否提交等,對于分支指令還有分支寫回、分支觸發(fā)等。
基于圖1所述的對預(yù)處理微指令發(fā)生異常多層嵌套進(jìn)行處理設(shè)備的結(jié)構(gòu)框圖,圖2示出了圖1中譯碼部件102的結(jié)構(gòu)框圖,該譯碼部件包括異常緩沖器(Ex_buffer)201、指令寄存器(Ir)202、微碼地址生成器(Rom_pcgenerator)203、微指令存儲器(uROM)204、簡單指令譯碼器(Simpledecoder)205、微指令選擇器(Micro code selecter)206和微指令生成器(Uopgenerator)207。
其中,Ex_buffer 201用于緩存接收自ROQ 105的異常信息,并根據(jù)接收自Rom_pc generator 203的選擇信號將緩存的異常信息發(fā)送給Rom_pc generator 203。
Ir 202用于存放當(dāng)前正在執(zhí)行指令的操作碼字節(jié)。
Rom_pc generator 203用于從Ex_buffer 201和Ir 202中選擇信息,并對選擇獲取的信息進(jìn)行譯碼產(chǎn)生的微指令地址,按產(chǎn)生的微指令地址索引uROM 204獲取微指令。Rom_pc generator 203為二路選擇器,優(yōu)先處理從Ex_buffer 201中獲取的信息。
uROM 204用于緩存微指令,并根據(jù)接收自Micro code selecter 206的選擇信號將微碼地址生成器索引獲取的微指令發(fā)送給Micro code selecter206。
Simple decoder 205用于對Ir 202中緩存的信息進(jìn)行譯碼,并根據(jù)接收自Micro code selecter 206的選擇信號將譯碼產(chǎn)生的微指令發(fā)送給Microcode selecter 206。
Micro code selecter 206用于從uROM 204和Simple decoder 205中選擇微指令,并將選擇獲取的微指令發(fā)送給Uop generator 207。Micro codeselecter 206為二路選擇器,優(yōu)先處理從uROM 204中獲取的微指令。
Uop generator 207用于對接收自Micro code selecter 206的微指令進(jìn)行譯碼,將生成的微指令輸出到譯碼總線(decode bus)上。
基于圖1和圖2所述的結(jié)構(gòu)框圖,本發(fā)明對預(yù)處理微指令發(fā)生異常多層嵌套進(jìn)行處理的流程如下執(zhí)行部件104在執(zhí)行過程中如果發(fā)現(xiàn)異常,則將異常信息通過結(jié)果總線(result bus)發(fā)送給ROQ 105,ROQ 105通過例外總線(exception bus)將異常信息發(fā)送給譯碼部件102,譯碼部件102收到這個異常信息后將Ir 202置無效,并把這個異常信息緩沖在Ex_buffer201中。在下一拍Rom_pc generator 203選擇Ex_buffer 201中緩存的異常信息進(jìn)行譯碼,生成微指令地址urom_pc,并按生成的urom_pc索引uROM204獲取微指令,獲取的微指令通過Micro code selecter 206發(fā)送給Uopgenerator 207,Uop generator 207對微指令進(jìn)一步譯碼并輸出到decode bus上。如果發(fā)生異常嵌套的話,異常信息又會緩沖到Ex_buffer 201中,這樣又一次異常處理開始了。按照這種譯碼器結(jié)構(gòu)設(shè)計就可以處理復(fù)雜指令異常預(yù)處理時發(fā)生的異常嵌套。
基于圖1所述的對預(yù)處理微指令發(fā)生異常多層嵌套進(jìn)行處理設(shè)備的結(jié)構(gòu)框圖,圖3示出了圖1中ROQ 105的示意圖。ROQ 105中的微指令是按微指令的地址順序存放的,Roq_head指向ROQ 105隊列頭的指令,Roq_tail指向隊列尾的下一項。ROQ 105可以用來保證指令的精確異常,當(dāng)ROQ 105中的一條微指令發(fā)生異常后,ROQ 105將異常信息發(fā)給取指部件101,譯碼部件102,發(fā)射部件103和執(zhí)行部件104等。
基于圖1、圖2和圖3所述的對預(yù)處理微指令發(fā)生異常多層嵌套進(jìn)行處理設(shè)備的結(jié)構(gòu)框圖,圖4示出了本發(fā)明對預(yù)處理微指令發(fā)生異常多層嵌套進(jìn)行處理總體技術(shù)方案的實現(xiàn)流程圖,該方法包括以下步驟步驟401微指令在執(zhí)行過程中發(fā)生異常,譯碼部件緩存異常信息,并對緩存的異常信息進(jìn)行譯碼產(chǎn)生微指令地址;步驟402譯碼部件按產(chǎn)生的微指令地址索引微指令存儲器獲取異常預(yù)處理微指令,并將獲取的異常預(yù)處理微指令發(fā)送給后端部件,后端部件在執(zhí)行接收的異常預(yù)處理微指令時如果再次發(fā)生異常,則執(zhí)行步驟403;如果不發(fā)生異常,則執(zhí)行步驟404;步驟403后端部件刷空計算機的指令流水線,譯碼部件緩存再次發(fā)生的異常信息,并對再次發(fā)生的異常信息進(jìn)行譯碼產(chǎn)生微指令地址,轉(zhuǎn)而執(zhí)行步驟402;步驟404后端部件跳轉(zhuǎn)并執(zhí)行異常處理程序,按異常發(fā)生的時間順序由后到先逐一對異常進(jìn)行修復(fù)。
上述步驟402中,所述后端部件包括發(fā)射部件、執(zhí)行部件和ROQ,所述步驟402包括步驟4021譯碼部件按產(chǎn)生的微指令地址索引微指令存儲器獲取異常預(yù)處理微指令,并將獲取的異常預(yù)處理微指令發(fā)送給發(fā)射部件;在本步驟中,譯碼部件將獲取的異常預(yù)處理微指令發(fā)送給發(fā)射部件是按微指令的地址順序發(fā)送的;進(jìn)一步地,譯碼部件在將獲取的異常預(yù)處理微指令發(fā)送給發(fā)射部件的同時,將獲取的異常預(yù)處理微指令按微指令的地址順序存放在ROQ中。
步驟4022發(fā)射部件將數(shù)據(jù)準(zhǔn)備好的異常預(yù)處理微指令發(fā)送給執(zhí)行部件,異常預(yù)處理微指令在執(zhí)行部件中需要執(zhí)行1拍或多拍,執(zhí)行部件將對異常預(yù)處理微指令執(zhí)行的結(jié)果發(fā)送給ROQ。
步驟4023ROQ在每1拍檢查Roq_head指向的異常預(yù)處理微指令,可以檢查前4條、2條或1條指令,如果Roq_head指向的異常預(yù)處理微指令發(fā)生異常,則執(zhí)行步驟403;如果Roq_head指向的異常預(yù)處理微指令已經(jīng)寫回,且不發(fā)生異常,則執(zhí)行步驟404。
上述步驟403中,所述刷空計算機的指令流水線的后端部件為ROQ,所述刷空計算機的指令流水線是ROQ通過向取指部件、譯碼部件、發(fā)射部件和執(zhí)行部件輸出異常信息實現(xiàn)的;所述譯碼部件緩存再次發(fā)生的異常信息,是將再次發(fā)生的異常信息緩存在異常緩沖區(qū)中,如果異常信息帶有錯誤碼信息,則譯碼部件進(jìn)一步將錯誤碼信息也緩存到異常緩沖區(qū)中。
上述步驟404中,所述后端部件為ROQ,所述步驟404包括ROQ跳轉(zhuǎn)到異常處理程序,在最深層次的異常處理程序執(zhí)行完后重新執(zhí)行次深層次的異常處理程序,最后執(zhí)行最頂層次的異常處理程序,這樣就形成了一個深度優(yōu)先遍歷,在最深層的異常被處理完畢后,這種處理器結(jié)構(gòu)會觸發(fā)次深層次的異常,直到所有異常都被處理完畢后,復(fù)雜指令才能得到執(zhí)行。
基于圖4所述的對預(yù)處理微指令發(fā)生異常多層嵌套進(jìn)行處理總體技術(shù)方案的實現(xiàn)流程圖,圖5示出了對預(yù)處理微指令發(fā)生三層嵌套進(jìn)行處理的示意圖。
從圖5中可以看出,處理器第一次跳轉(zhuǎn)到異常處理程序?qū)Φ谌龑拥漠惓_M(jìn)行處理,這個第三層的異常是由第二層異常的預(yù)處理微指令產(chǎn)生的。在對第三層的異常修復(fù)完成后,處理器返回到斷點重新執(zhí)行這條指令,結(jié)果再次觸發(fā)異常,此時由于第三層的異常已經(jīng)被修復(fù),觸發(fā)的是第二層的異常。處理器第二次跳轉(zhuǎn)到異常處理程序?qū)Φ诙拥漠惓_M(jìn)行處理,在對第二層的異常修復(fù)完成后,處理器會返回到斷點再次執(zhí)行這條發(fā)生異常的指令,結(jié)果導(dǎo)致第三次觸發(fā)異常。此時由于第三層和第二層的異常都已經(jīng)被修復(fù),所以只會觸發(fā)第一層的異常。處理器第三次跳轉(zhuǎn)到異常處理程序?qū)Φ谝粚拥漠惓_M(jìn)行處理,在對第一層的異常修復(fù)完成后,處理器會返回到斷點再次執(zhí)行這條發(fā)生異常的指令,指令就能夠順利通過執(zhí)行了。
為了在異常觸發(fā)后取消已經(jīng)建立的寄存器依賴關(guān)系,需要為每個寄存器依賴指定微指令編號。圖6示出了重命名模塊中為寄存器建立依賴和取消依賴關(guān)系的示意圖。如圖6所示,在遇到微指令1時,邏輯寄存器1被映射到物理寄存器3;在遇到微指令6時,邏輯寄存器2被映射到物理寄存器1;在遇到微指令8時,邏輯寄存器3被映射到物理寄存器5;由于微指令3,4,5和7沒有對應(yīng)的目標(biāo)寄存器,所以微指令3,4,5和7沒有與寄存器建立對應(yīng)關(guān)系,微指令3,4,5和7只執(zhí)行而不寫回;在遇到微指令9時,邏輯寄存器1被映射到物理寄存器7,此時邏輯寄存器1映射了兩個物理寄存器3和7,它們的區(qū)別在于對應(yīng)的微指令編號不同,即分別為2和9。
在圖6中,如果一個微指令發(fā)生了異常,則重命名模塊收到這個異常信息,將根據(jù)已經(jīng)建立的依賴關(guān)系與發(fā)生異常的微指令進(jìn)行比較,并將位于發(fā)生異常微指令之后微指令建立的依賴關(guān)系取消。例如,如果微指令8發(fā)生了異常,則重命名模塊將取消之后微指令9建立的依賴關(guān)系,即取消邏輯寄存器1到物理寄存器7的依賴關(guān)系,其它的依賴關(guān)系保留。
為了更加清楚的說明本發(fā)明提供的對預(yù)處理微指令發(fā)生異常多層嵌套進(jìn)行處理的方法,以下結(jié)合具體的實施例進(jìn)行詳細(xì)說明。
在本實施例中,以x86的處理器為例,在x86系列的處理器中有很多的復(fù)雜指令,常見的如串拷貝指令,軟中斷int n指令,間接跳轉(zhuǎn)指令等,這些指令所對應(yīng)的微指令被存放在一塊rom中。譯碼部件從存儲器中取得復(fù)雜指令后,會按照這種指令的操作碼域和其它的相關(guān)域去索引rom,取出微指令分別發(fā)送給重命名邏輯和發(fā)射部件。
X86可見的通用寄存器有8個,分別為eax、ebx、ecx、edx、esp、ebp、esi和edi,對應(yīng)到微指令的8個普通的寄存器。另外,微指令集還被分配了24個臨時寄存器,這24個臨時寄存器用來緩沖各執(zhí)行部件的運算結(jié)果,包括加法部件,乘法部件,除法部件,訪存部件等。由于微指令執(zhí)行時會對這32個寄存器產(chǎn)生數(shù)據(jù)相關(guān),這種相關(guān)通過后端的重命名邏輯進(jìn)行重命名,從而消除了假相關(guān)。重命名后的微指令被按序放到重排序緩沖器中。重排序緩沖器中的微指令有3種狀態(tài),空狀態(tài),映射狀態(tài),寫回狀態(tài)。當(dāng)重排序緩沖器中的某一項的狀態(tài)為空時,表示這項可以存放一條微指令,只是目前沒有被使用。映射狀態(tài)表示當(dāng)前的表項已經(jīng)存放了一條微指令,這個微指令是從重命名部件發(fā)射過來,而且這條指令正在執(zhí)行部件執(zhí)行或正在記分板中等待發(fā)射,還沒有運算結(jié)果產(chǎn)生。寫回狀態(tài)表示當(dāng)前的指令在執(zhí)行部件已經(jīng)執(zhí)行完畢,并且執(zhí)行結(jié)果已經(jīng)寫到寄存器堆中,就等待處理器做最后的確認(rèn)。
基于圖4所述的對預(yù)處理微指令發(fā)生異常多層嵌套進(jìn)行處理總體技術(shù)方案的實現(xiàn)流程圖,圖7示出了依照本發(fā)明實施例中對預(yù)處理微指令發(fā)生異常多層嵌套進(jìn)行處理的方法流程圖,包括以下步驟步驟701重排序緩沖器按順序?qū)㈥犃蓄^的已經(jīng)寫回的微指令發(fā)送給重命名部件,重命名部件根據(jù)接收自重排序緩沖器的微指令修改相應(yīng)目標(biāo)寄存器的狀態(tài)信息;在本步驟中,如果隊列頭的微指令附帶了異常信息,則重排序緩沖器發(fā)送給重命名部件的信息無效,重排序緩沖器將再次把附帶了異常信息的微指令發(fā)送給譯碼部件。
步驟702譯碼部件從接收的異常中獲取異常矢量,并將獲取的異常矢量編碼為一個特殊的指令,記錄發(fā)生的異常所在的指令地址。
步驟703譯碼部件根據(jù)編碼產(chǎn)生的特殊指令從rom中索引獲取相應(yīng)的微指令,通過執(zhí)行獲取的微指令得到異常處理程序地址,再進(jìn)行壓棧,保存關(guān)鍵現(xiàn)場等預(yù)處理操作,然后根據(jù)得到的異常處理程序地址轉(zhuǎn)入正式的異常處理程序;如果在壓棧和保存關(guān)鍵現(xiàn)場的過程中又發(fā)生了異常,即發(fā)生異常多層嵌套,則執(zhí)行步驟705;如果沒有發(fā)生異常多層嵌套,則執(zhí)行步驟704。
步驟704譯碼部件執(zhí)行異常處理程序,對發(fā)生的異常進(jìn)行修復(fù),并在異常處理程序執(zhí)行完成后重新執(zhí)行這條指令,結(jié)束本流程。
步驟705譯碼部件緩沖獲得的新異常矢量,將獲取的新異常矢量編碼為一個特殊的指令,并根據(jù)由新異常矢量編碼而來的特殊指令重新從rom中索引獲取相應(yīng)的微指令,通過執(zhí)行獲取的微指令第二次得到異常處理程序地址;在本步驟中,譯碼部件緩沖獲得的新異常矢量的同時,重排序緩沖區(qū)被清空,其它各種功能部件也都作了清除工作。
步驟706譯碼部件進(jìn)行壓棧,保存關(guān)鍵現(xiàn)場等預(yù)處理操作,如果在壓棧和保存關(guān)鍵現(xiàn)場的過程中又發(fā)生了異常,即發(fā)生異常多層嵌套,則執(zhí)行步驟708;如果沒有發(fā)生異常多層嵌套,則執(zhí)行步驟707。
步驟707譯碼部件根據(jù)第二次得到的異常處理程序地址轉(zhuǎn)入正式的異常處理程序,對發(fā)生的異常進(jìn)行修復(fù),并在異常處理程序執(zhí)行完成后重新執(zhí)行這條指令,結(jié)束本流程。
步驟708譯碼部件繼續(xù)執(zhí)行步驟705和706,直至不再發(fā)生異常多層嵌套,轉(zhuǎn)入正式的異常處理程序,對發(fā)生的異常進(jìn)行修復(fù),并在異常處理程序執(zhí)行完成后重新執(zhí)行這條指令。
在本實施例中,處理器是以如下的順序執(zhí)行異常處理的在最深層次的異常處理程序執(zhí)行完后會重新執(zhí)行到次深層次的異常處理程序,最后執(zhí)行到最頂層次的異常處理程序。
在本發(fā)明所舉實施例步驟701中,重排序緩沖器將附帶了異常信息的微指令發(fā)送給譯碼部件。在實際應(yīng)用中,在重排序緩沖器將附帶了異常信息的微指令發(fā)送給譯碼部件同時,可以進(jìn)一步將附帶了異常信息的微指令發(fā)送給重命名部件,重命名部件可以對接收的異常信息進(jìn)行分析,進(jìn)而取消異常信息所在指令后所有曾經(jīng)建立的依賴關(guān)系。這樣的技術(shù)方案與本發(fā)明實施例中所舉的技術(shù)方案在思路上是一致的,應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
以上所述的具體實施例,對本發(fā)明的目的、技術(shù)方案和有益效果進(jìn)行了進(jìn)一步詳細(xì)說明,所應(yīng)理解的是,以上所述僅為本發(fā)明的具體實施例而已,并不用于限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所做的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
權(quán)利要求
1.一種對預(yù)處理微指令發(fā)生異常多層嵌套進(jìn)行處理的設(shè)備,其特征在于,該設(shè)備包括取指部件,用于從指令高速緩沖內(nèi)存中取出指令,并將取出的指令發(fā)送給譯碼部件;譯碼部件,用于根據(jù)接收自取指部件的指令對緩存的異常信息進(jìn)行譯碼,按譯碼產(chǎn)生的微指令地址索引微指令存儲器獲取異常預(yù)處理微指令,并將獲取的異常預(yù)處理微指令發(fā)送給發(fā)射部件和指令重排序緩沖器;發(fā)射部件,用于將接收的異常預(yù)處理微指令中數(shù)據(jù)已準(zhǔn)備好的指令發(fā)送給執(zhí)行部件;執(zhí)行部件,用于執(zhí)行接收自發(fā)射部件的指令,并將執(zhí)行的結(jié)果寫回到指令重排序緩沖器;指令重排序緩沖器,用于保存計算機指令流水線中每條指令的狀態(tài)信息,并保證指令的精確異常,在指令發(fā)生異常時將異常信息輸出給取指部件、譯碼部件、發(fā)射部件和執(zhí)行部件。
2.根據(jù)權(quán)利要求1所述的設(shè)備,其特征在于,所述譯碼部件包括異常緩沖器,用于緩存接收自指令重排序緩沖器的異常信息,并根據(jù)接收自微碼地址生成器的選擇信號將緩存的異常信息發(fā)送給微碼地址生成器;指令寄存器,用于存放當(dāng)前正在執(zhí)行指令的操作碼字節(jié);微碼地址生成器,用于從異常緩沖器和指令寄存器中選擇信息,并對選擇獲取的信息進(jìn)行譯碼產(chǎn)生微指令地址,按產(chǎn)生的微指令地址索引微指令存儲器獲取微指令;微指令存儲器,用于存儲微指令,并根據(jù)接收自微指令選擇器的選擇信號將微碼地址生成器索引獲取的微指令發(fā)送給微指令選擇器;簡單指令譯碼器,用于對指令寄存器中緩存的信息進(jìn)行譯碼,并根據(jù)接收自微指令選擇器的選擇信號將譯碼產(chǎn)生的微指令發(fā)送給微指令選擇器;微指令選擇器,用于從微指令存儲器和簡單指令譯碼器中選擇微指令,并將選擇獲取的微指令發(fā)送給微指令生成器;微指令生成器,用于對接收自微指令選擇器的微指令進(jìn)行譯碼,將譯碼后的微指令輸出到譯碼總線上。
3.根據(jù)權(quán)利要求2所述的設(shè)備,其特征在于,所述微碼地址生成器和微指令選擇器為二路選擇器,微碼地址生成器優(yōu)先處理從異常緩沖器中選擇獲取的信息,微指令選擇器優(yōu)先處理從微指令存儲器中選擇獲取的微指令。
4.根據(jù)權(quán)利要求1所述的設(shè)備,其特征在于,所述發(fā)射部件進(jìn)一步包括重命名邏輯,用于消除寄存器之間的寫寫相關(guān)和讀寫相關(guān)。
5.根據(jù)權(quán)利要求1所述的設(shè)備,其特征在于,所述執(zhí)行部件的數(shù)量至少為一個。
6.一種對預(yù)處理微指令發(fā)生異常多層嵌套進(jìn)行處理的方法,其特征在于,該方法包括A、微指令在執(zhí)行過程中發(fā)生異常,譯碼部件緩存異常信息,并對緩存的異常信息進(jìn)行譯碼產(chǎn)生微指令地址;B、譯碼部件按產(chǎn)生的微指令地址索引微指令存儲器獲取異常預(yù)處理微指令,并將獲取的異常預(yù)處理微指令發(fā)送給后端部件,后端部件在執(zhí)行接收的異常預(yù)處理微指令時如果再次發(fā)生異常,則執(zhí)行步驟C;如果不發(fā)生異常,則執(zhí)行步驟D;C、后端部件刷空計算機的指令流水線,譯碼部件緩存再次發(fā)生的異常信息,并對再次發(fā)生的異常信息進(jìn)行譯碼產(chǎn)生微指令地址,轉(zhuǎn)而執(zhí)行步驟B;D、后端部件跳轉(zhuǎn)并執(zhí)行異常處理程序,按異常發(fā)生的時間順序由后到先逐一對異常進(jìn)行修復(fù)。
7.根據(jù)權(quán)利要求6所述的方法,其特征在于,所述后端部件包括發(fā)射部件、執(zhí)行部件和指令重排序緩沖器,所述步驟B包括B1、譯碼部件按產(chǎn)生的微指令地址索引微指令存儲器獲取異常預(yù)處理微指令,并將獲取的異常預(yù)處理微指令發(fā)送給發(fā)射部件和指令重排序緩沖器;B2、發(fā)射部件將數(shù)據(jù)準(zhǔn)備好的異常預(yù)處理微指令發(fā)送給執(zhí)行部件,執(zhí)行部件將對異常預(yù)處理微指令執(zhí)行的結(jié)果發(fā)送給指令重排序緩沖器;B3、指令重排序緩沖器檢查Roq_head指向的異常預(yù)處理微指令,如果Roq_head指向的異常預(yù)處理微指令發(fā)生異常,則執(zhí)行步驟C;如果Roq_head指向的異常預(yù)處理微指令不發(fā)生異常,則執(zhí)行步驟D。
8.根據(jù)權(quán)利要求7所述的方法,其特征在于,步驟B1中所述譯碼部件將獲取的異常預(yù)處理微指令發(fā)送給發(fā)射部件是按微指令的地址順序發(fā)送的。
9.根據(jù)權(quán)利要求7所述的方法,其特征在于,步驟B1中所述譯碼部件將獲取的異常預(yù)處理微指令發(fā)送給發(fā)射部件的同時進(jìn)一步包括譯碼部件將獲取的異常預(yù)處理微指令按微指令的地址順序存放在指令重排序緩沖器中。
10.根據(jù)權(quán)利要求7所述的方法,其特征在于,步驟C中所述刷空計算機指令流水線的后端部件為指令重排序緩沖器;所述刷空計算機的指令流水線是指令重排序緩沖器通過向取指部件、譯碼部件、發(fā)射部件和執(zhí)行部件輸出異常信息實現(xiàn)的;所述譯碼部件緩存再次發(fā)生的異常信息,是將再次發(fā)生的異常信息緩存在異常緩沖區(qū)中。
11.根據(jù)權(quán)利要求10所述的方法,其特征在于,所述異常信息可以帶有錯誤碼信息,所述譯碼部件進(jìn)一步將錯誤碼信息緩存到異常緩沖區(qū)中。
12.根據(jù)權(quán)利要求6所述的方法,其特征在于,所述后端部件為指令重排序緩沖器,所述步驟D包括指令重排序緩沖器跳轉(zhuǎn)到異常處理程序,在最深層次的異常處理程序執(zhí)行完后重新執(zhí)行次深層次的異常處理程序,最后執(zhí)行最頂層次的異常處理程序。
全文摘要
本發(fā)明涉及復(fù)雜指令集計算機內(nèi)部異常處理技術(shù),尤其涉及對預(yù)處理微指令發(fā)生異常多層嵌套進(jìn)行處理的設(shè)備及方法,所述方法包括A、微指令在執(zhí)行過程中發(fā)生異常,譯碼部件緩存異常信息,并對緩存的異常信息進(jìn)行譯碼產(chǎn)生微指令地址;B、譯碼部件按產(chǎn)生的微指令地址索引微指令存儲器獲取異常預(yù)處理微指令,并將獲取的異常預(yù)處理微指令發(fā)送給后端部件,后端部件在執(zhí)行接收的異常預(yù)處理微指令時如果再次發(fā)生異常,則執(zhí)行步驟C;如果不發(fā)生異常,則執(zhí)行步驟D;C、后端部件刷空計算機的指令流水線,譯碼部件緩存再次發(fā)生的異常信息,并對再次發(fā)生的異常信息進(jìn)行譯碼產(chǎn)生微指令地址,轉(zhuǎn)而執(zhí)行步驟B;D、后端部件跳轉(zhuǎn)并執(zhí)行異常處理程序。
文檔編號G06F9/38GK101075184SQ20061001192
公開日2007年11月21日 申請日期2006年5月18日 優(yōu)先權(quán)日2006年5月18日
發(fā)明者段振中, 范東睿 申請人:中國科學(xué)院計算技術(shù)研究所
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1