本發(fā)明屬于微處理器設(shè)計(jì)技術(shù)領(lǐng)域,具體地說(shuō),是涉及一種中斷處理方法及流水線控制器。
背景技術(shù):
在微處理器中,中斷(Interrupt)是一種重要的通信、控制方法之一。產(chǎn)生中斷后,處理器核將暫時(shí)停止當(dāng)前處理的程序,轉(zhuǎn)而去響應(yīng)中斷請(qǐng)求,在完成中斷服務(wù)程序之后,返回繼續(xù)執(zhí)行被中斷的程序。
中斷按產(chǎn)生原因可分為軟件中斷和硬件中斷。軟件中斷也稱為例外或異常(Exception),由指令的執(zhí)行狀態(tài)決定,通常在指令的不同流水級(jí)可能出現(xiàn)不同的例外,例如在指令譯碼階段發(fā)現(xiàn)指令非法、在Load/Store指令執(zhí)行階段發(fā)現(xiàn)TLB缺失、在除法指令執(zhí)行時(shí)發(fā)現(xiàn)除數(shù)是0、在計(jì)算指令執(zhí)行完畢后發(fā)現(xiàn)溢出,或者處理器提供軟件中斷/陷阱指令,提供一種類似系統(tǒng)調(diào)用的功能。不同例外可能在不同的流水級(jí)產(chǎn)生或被發(fā)現(xiàn),但是其共同點(diǎn)是由指令產(chǎn)生。硬件中斷是指由處理器核之外的設(shè)備在特定情況下,請(qǐng)求內(nèi)核處理相關(guān)事務(wù),比如在DMA完成數(shù)據(jù)搬運(yùn)之后可通過(guò)中斷通知內(nèi)核DMA事務(wù)的結(jié)束、內(nèi)核配置外設(shè)錯(cuò)誤導(dǎo)致出現(xiàn)錯(cuò)誤請(qǐng)求內(nèi)核處理并重新配置,或者一些通用的中斷,可配置處理器在中斷產(chǎn)生時(shí),運(yùn)行特定的程序。
中斷具有不同的處理方式,通常有精確軟件中斷與非精確軟件中斷的區(qū)別。精確軟件中斷需要滿足以下兩個(gè)條件:第一,中斷返回地址對(duì)應(yīng)的指令之前的指令完全執(zhí)行完畢,且對(duì)處理器狀態(tài)進(jìn)行了修改;第二,中斷返回地址對(duì)應(yīng)的指令及其之后的指令對(duì)處理器沒(méi)有進(jìn)行修改。而不滿足上述兩個(gè)條件的處理方式稱之為非精確軟件中斷。一般情況下,大部分中斷要求精確軟件中斷,只有極少數(shù)非精確軟件中斷中斷,或者在某些處理器中沒(méi)有非精確軟件中斷。
對(duì)于例外而言,產(chǎn)生例外的指令的地址就是中斷返回地址,硬件中斷為了與軟件中斷統(tǒng)一處理,通常的處理方法是綁定一條除了某些特定指令之外的指令,當(dāng)該指令運(yùn)行至中斷處理邏輯所在流水級(jí)時(shí),與例外作相同處理。因?yàn)橹袛嗫赡茉诟髁魉?jí)產(chǎn)生,為了精確軟件中斷的處理,通常在最晚可能產(chǎn)生例外的流水級(jí)中統(tǒng)一處理中斷,由于某些中斷在指令執(zhí)行完畢之后才可能被發(fā)現(xiàn),所以該流水級(jí)較多選在提交/寫回級(jí)(流水線最后一級(jí))。
處理器在響應(yīng)中斷時(shí),通常會(huì)沖刷整個(gè)流水線,然后對(duì)中斷服務(wù)程序取指。由于中斷處理所在流水級(jí)已經(jīng)處于整個(gè)流水線的末尾,此時(shí)對(duì)流水線沖刷將導(dǎo)致后續(xù)已經(jīng)進(jìn)行取指、譯碼、執(zhí)行的指令被取消,當(dāng)中斷返回之后繼續(xù)執(zhí)行。這種方式對(duì)流水線的利用率很低,被沖刷的指令在中斷返回之后仍然需要重新執(zhí)行,既影響性能又增加功耗。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明為了解決現(xiàn)有中斷處理方法為響應(yīng)中斷而沖刷整個(gè)流水線,使得冗余執(zhí)行造成性能損失和功耗增加的問(wèn)題,本發(fā)明將改進(jìn)處理器對(duì)中斷的響應(yīng)方法,最大限度的減少性能損失和功耗。
為了解決上述技術(shù)問(wèn)題,本發(fā)明采用以下技術(shù)方案予以實(shí)現(xiàn):
一種中斷處理方法,包括以下步驟:
(1)、內(nèi)核接收中斷請(qǐng)求,并獲取中斷向量;
(2)、內(nèi)核判斷當(dāng)前狀態(tài)是否允許中斷,若允許,取指單元使用中斷向量對(duì)中斷服務(wù)程序進(jìn)行取指;
(3)、內(nèi)核執(zhí)行中斷服務(wù)程序的首條指令,并使用首條指令標(biāo)識(shí)進(jìn)行標(biāo)識(shí),同時(shí),內(nèi)核當(dāng)前流水線上的尾部指令正常執(zhí)行,所述尾部指令為內(nèi)核當(dāng)前流水線上位于所述中斷服務(wù)程序中的首條指令之前的指令;
內(nèi)核執(zhí)行指令過(guò)程中,當(dāng)執(zhí)行至該指令的最后一級(jí)時(shí),將位于該指令之后的指令的地址進(jìn)行保存,所述位于該指令之后的指令為程序若不受中斷影響,該指令執(zhí)行完成之后,下一條應(yīng)該執(zhí)行完成的指令;
若內(nèi)核執(zhí)行的指令為中斷服務(wù)程序的首條指令,當(dāng)執(zhí)行至該指令的最后一級(jí)時(shí),將執(zhí)行中斷服務(wù)程序首條指令之前的指令時(shí)所保存的地址作為中斷返回地址記錄在中斷返回寄存器中;
(4)、中斷服務(wù)程序中的所有指令執(zhí)行完畢后,按照中斷返回寄存器中保存的返回地址進(jìn)行返回。
進(jìn)一步的,步驟(3)之前還包括判斷中斷源的類型的步驟,包括硬件中斷和軟件中斷,若步驟(1)中所接收的中斷為硬件中斷,則按照步驟(3)-步驟(4)執(zhí)行。
進(jìn)一步的,若步驟(1)中所接收的中斷為軟件中斷,則進(jìn)一步判斷軟件中斷屬于非精確軟件中斷還是精確軟件中斷,若為非精確軟件中斷,則按照步驟(3)-步驟(4)執(zhí)行,若為精確軟件中斷,則步驟(2)之前還包括沖刷掉內(nèi)核當(dāng)前流水線上發(fā)生精確軟件中斷指令之后的所有指令的步驟,發(fā)生精確軟件中斷指令執(zhí)行至最后一級(jí)時(shí),決定如何保存地址:若該精確軟件中斷需要重新執(zhí)行該指令,則保存該指令的地址;否則,按照步驟(3)-步驟(4)執(zhí)行。
進(jìn)一步的,步驟(3)中執(zhí)行所述尾部指令時(shí),若所述尾部指令存在跳轉(zhuǎn)指令,判斷所述跳轉(zhuǎn)指令與所述中斷請(qǐng)求的優(yōu)先級(jí),若所述跳轉(zhuǎn)指令的優(yōu)先級(jí)不高于所述中斷請(qǐng)求的優(yōu)先級(jí),向流水線控制器發(fā)出低優(yōu)先級(jí)的沖刷流水線控制請(qǐng)求,計(jì)算出跳轉(zhuǎn)目標(biāo)地址并記錄,不執(zhí)行跳轉(zhuǎn)。
進(jìn)一步的,步驟(3)中執(zhí)行所述尾部指令時(shí),若所述跳轉(zhuǎn)指令的優(yōu)先級(jí)高于所述中斷請(qǐng)求的優(yōu)先級(jí),向流水線控制器發(fā)出高優(yōu)先級(jí)的沖刷流水線控制請(qǐng)求,向取指單元給出取指請(qǐng)求,執(zhí)行所述跳轉(zhuǎn)指令,此時(shí)不執(zhí)行所述中斷服務(wù)程序,內(nèi)核判斷當(dāng)前狀態(tài)修改為不允許中斷,返回步驟(1)。
進(jìn)一步的,流水線控制器接收到所述沖刷流水線控制請(qǐng)求時(shí),根據(jù)沖刷流水線控制請(qǐng)求的優(yōu)先級(jí)以及中斷服務(wù)程序的首條指令標(biāo)識(shí)確定每一流水級(jí)的控制信號(hào):
當(dāng)前流水線上存在中斷服務(wù)程序的首條指令,且需要響應(yīng)尾部指令給出的低優(yōu)先級(jí)的沖刷流水線控制時(shí),不沖刷中斷服務(wù)程序所在流水級(jí),中斷服務(wù)程序所在流水級(jí)由中斷服務(wù)程序指令給出的流水線控制請(qǐng)求控制。
基于上述的一種中斷處理方法,本發(fā)明同時(shí)提出了一種流水線控制器,包括指令標(biāo)記單元、第一處理請(qǐng)求單元、第二請(qǐng)求處理單元、控制信號(hào)選擇單元,
所述指令標(biāo)記單元用于保存中斷服務(wù)程序的首條指令標(biāo)志,將當(dāng)前流水線上每一流水級(jí)的首條指令標(biāo)志組成指令標(biāo)記信號(hào)傳遞至所述第二請(qǐng)求處理單元和控制信號(hào)選擇單元;
所述第一請(qǐng)求處理單元用于接收所有流水級(jí)產(chǎn)生的流水線控制請(qǐng)求,處理尾部指令給出的低優(yōu)先級(jí)沖刷流水線控制請(qǐng)求,產(chǎn)生第一控制信號(hào);
所述第二請(qǐng)求處理單元處理由中斷服務(wù)程序指令給出的流水線控制信號(hào),產(chǎn)生第二控制信號(hào);
所述控制信號(hào)選擇單元根據(jù)所述流水線控制請(qǐng)求和指令標(biāo)記信號(hào)確定每一流水級(jí)當(dāng)前執(zhí)行的指令為尾部指令還是中斷服務(wù)程序指令,選擇由第一控制信號(hào)控制還是由第二控制信號(hào)控制。
與現(xiàn)有技術(shù)相比,本發(fā)明的優(yōu)點(diǎn)和積極效果是:本發(fā)明的中斷處理方法,響應(yīng)中斷不會(huì)沖刷流水線,已經(jīng)取指、發(fā)射、譯碼、執(zhí)行的指令可以繼續(xù)執(zhí)行,避免了這些指令的重復(fù)操作。而中斷服務(wù)程序的指令會(huì)在上述指令執(zhí)行的同時(shí),進(jìn)行取指,并隨著流水線一步步執(zhí)行,所以對(duì)中斷服務(wù)程序的執(zhí)行沒(méi)有影響。
結(jié)合附圖閱讀本發(fā)明實(shí)施方式的詳細(xì)描述后,本發(fā)明的其他特點(diǎn)和優(yōu)點(diǎn)將變得更加清楚。
附圖說(shuō)明
為了更清楚地說(shuō)明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見(jiàn)地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1是本發(fā)明所提出的中斷處理方法的一種實(shí)施例流程圖;
圖2是本發(fā)明所提出的中斷控制器的一種實(shí)施原理方框圖。
具體實(shí)施方式
下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例。基于本發(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
實(shí)施例一
本實(shí)施例提出了一種中斷處理方法,如圖1所示,包括以下步驟:
S1、內(nèi)核接收中斷請(qǐng)求,并獲取中斷向量;其中,若中斷請(qǐng)求為硬件中斷,則內(nèi)核接收由硬件中斷控制器發(fā)送的中斷請(qǐng)求,若中斷請(qǐng)求為軟件中斷,則內(nèi)核接收由確定軟件中斷的單元發(fā)送的中斷請(qǐng)求,內(nèi)核與之通信獲得中斷向量。
S2、內(nèi)核判斷當(dāng)前狀態(tài)是否允許中斷,若允許,取指單元使用中斷向量對(duì)中斷服務(wù)程序進(jìn)行取指;并不將先于中斷服務(wù)程序首條指令進(jìn)入流水線但未完成的指令(稱之為尾部指令)進(jìn)行沖刷。中斷服務(wù)程序(ISR)的首條指令將具有特殊的標(biāo)識(shí),表明該指令是中斷服務(wù)程序的首條指令,中斷服務(wù)程序的首條指令以及后續(xù)進(jìn)入流水線的指令屬于中斷服務(wù)程序指令。
S3、內(nèi)核執(zhí)行中斷服務(wù)程序的首條指令,并使用首條指令標(biāo)識(shí)進(jìn)行標(biāo)識(shí),同時(shí),內(nèi)核當(dāng)前流水線上的尾部指令正常執(zhí)行,所述尾部指令為內(nèi)核當(dāng)前流水線上位于所述中斷服務(wù)程序中的首條指令之前的指令;
內(nèi)核執(zhí)行指令過(guò)程中,當(dāng)執(zhí)行至該指令的最后一級(jí)時(shí),將位于該指令之后的指令的地址進(jìn)行保存,其中,位于該指令之后的指令為程序若不受中斷影響,該指令執(zhí)行完成之后,下一條應(yīng)該執(zhí)行完成的指令;
若內(nèi)核執(zhí)行的指令為中斷服務(wù)程序的首條指令,當(dāng)執(zhí)行至該指令的最后一級(jí)時(shí),將執(zhí)行中斷服務(wù)程序首條指令之前的指令時(shí)所保存的地址作為中斷返回地址記錄在中斷返回寄存器中;
S4、中斷服務(wù)程序中的所有指令執(zhí)行完畢后,按照中斷返回寄存器中保存的返回地址進(jìn)行返回。
指令的執(zhí)行必將經(jīng)過(guò)取指、發(fā)射、譯碼、執(zhí)行等流程,而流水線存在的意義就是當(dāng)一條指令在執(zhí)行某一個(gè)流程時(shí),其他指令可以執(zhí)行另一個(gè)流程,如此將整個(gè)指令流水化之后,從宏觀看,在每個(gè)流程的時(shí)間都可以執(zhí)行一條指令。所以在中斷來(lái)臨時(shí),在中斷服務(wù)程序開(kāi)始載入執(zhí)行的同時(shí),若允許已經(jīng)進(jìn)行取指的指令繼續(xù)執(zhí)行,并不將尾部指令進(jìn)行沖刷,將大大降低響應(yīng)中斷帶來(lái)的性能損失,降低因?yàn)槿哂鄨?zhí)行而造成的更多功耗。
本實(shí)施例的中斷處理方法,響應(yīng)中斷不會(huì)沖刷流水線,已經(jīng)取指、發(fā)射、譯碼、執(zhí)行的指令可以繼續(xù)執(zhí)行,避免了這些指令的重復(fù)操作。而中斷服務(wù)程序的指令會(huì)在上述指令執(zhí)行的同時(shí),進(jìn)行取指,并隨著流水線一步步執(zhí)行,所以對(duì)中斷服務(wù)程序的執(zhí)行沒(méi)有影響。
步驟S3之前還包括判斷中斷源的類型的步驟,包括硬件中斷和軟件中斷,若步驟S1中所接收的中斷為硬件中斷,則按照步驟S3-步驟S4執(zhí)行。
若步驟S1中所接收的中斷為軟件中斷,則進(jìn)一步判斷軟件中斷屬于非精確軟件中斷還是精確軟件中斷,對(duì)于不要求精確軟件中斷的軟件中斷,其處理方法與硬件中斷完全形同,即軟件中斷一旦觸發(fā),即可認(rèn)為出現(xiàn)一個(gè)較高優(yōu)先級(jí)的硬件中斷,也即若為非精確軟件中斷,則按照步驟S3-步驟S4執(zhí)行,若為精確軟件中斷,則步驟S2之前還包括沖刷掉內(nèi)核當(dāng)前流水線上發(fā)生精確軟件中斷指令之后的所有指令的步驟,發(fā)生精確軟件中斷指令執(zhí)行至最后一級(jí)時(shí),決定如何保存地址:若該精確軟件中斷需要重新執(zhí)行該指令,則保存該指令的地址;否則,按照步驟S3-步驟S4執(zhí)行。
對(duì)于要求精確軟件中斷的軟件中斷而言,就像一條沒(méi)有預(yù)測(cè)命中跳轉(zhuǎn)指令,為了中斷的精確性,不可避免的需要沖刷后續(xù)指令。但是中斷處理還是一旦觸發(fā)立即處理,最大限度的減少可能的冗余執(zhí)行。
步驟S3中執(zhí)行所述尾部指令時(shí),若所述尾部指令存在跳轉(zhuǎn)指令,判斷所述跳轉(zhuǎn)指令與所述中斷請(qǐng)求的優(yōu)先級(jí),若所述跳轉(zhuǎn)指令的優(yōu)先級(jí)不高于所述中斷請(qǐng)求的優(yōu)先級(jí),向流水線控制器發(fā)出低優(yōu)先級(jí)的沖刷流水線控制請(qǐng)求,計(jì)算出跳轉(zhuǎn)目標(biāo)地址并記錄,不執(zhí)行跳轉(zhuǎn)。
步驟S3中執(zhí)行所述尾部指令時(shí),若所述跳轉(zhuǎn)指令的優(yōu)先級(jí)高于所述中斷請(qǐng)求的優(yōu)先級(jí),向流水線控制器發(fā)出高優(yōu)先級(jí)的沖刷流水線控制請(qǐng)求,向取指單元給出取指請(qǐng)求,執(zhí)行所述跳轉(zhuǎn)指令,此時(shí)不執(zhí)行所述中斷服務(wù)程序,內(nèi)核判斷當(dāng)前狀態(tài)修改為不允許中斷,返回步驟S1。
流水線控制器接收到所述沖刷流水線控制請(qǐng)求時(shí),根據(jù)沖刷流水線控制請(qǐng)求的優(yōu)先級(jí)以及中斷服務(wù)程序的首條指令標(biāo)識(shí)確定每一流水級(jí)的控制信號(hào):
當(dāng)前流水線上存在中斷服務(wù)程序的首條指令,且需要響應(yīng)尾部指令給出的低優(yōu)先級(jí)的沖刷流水線控制時(shí),不沖刷中斷服務(wù)程序所在流水級(jí),中斷服務(wù)程序所在流水級(jí)由中斷服務(wù)程序指令給出的流水線控制請(qǐng)求控制。
要求跳轉(zhuǎn)指令的沖刷操作不影響中斷服務(wù)程序的執(zhí)行,在精確軟件中斷處理方法中,同樣可能要求不影響正在執(zhí)行的中斷服務(wù)程序,不僅僅尾部指令的操作對(duì)中斷服務(wù)程序不產(chǎn)生影響,還要求中斷服務(wù)程序內(nèi)部產(chǎn)生的流水線控制請(qǐng)求對(duì)中斷服務(wù)程序可以產(chǎn)生應(yīng)有的效果,相當(dāng)于將流水線分成兩個(gè)獨(dú)立的部分,兩部分指令所產(chǎn)生的流水線控制不會(huì)互相影響。
實(shí)施例二
基于實(shí)施例中的一種中斷處理方法,本實(shí)施例同時(shí)提出了一種流水線控制器,包括指令標(biāo)記單元、第一處理請(qǐng)求單元、第二請(qǐng)求處理單元、控制信號(hào)選擇單元,
其中,指令標(biāo)記單元用于保存中斷服務(wù)程序的首條指令標(biāo)志,將當(dāng)前流水線上每一流水級(jí)的首條指令標(biāo)志組成指令標(biāo)記信號(hào)傳遞至所述第二請(qǐng)求處理單元和控制信號(hào)選擇單元;
第一請(qǐng)求處理單元用于接收所有流水級(jí)產(chǎn)生的流水線控制請(qǐng)求,處理尾部指令給出的低優(yōu)先級(jí)沖刷流水線控制請(qǐng)求,產(chǎn)生第一控制信號(hào);
第二請(qǐng)求處理單元處理由中斷服務(wù)程序指令給出的流水線控制信號(hào),產(chǎn)生第二控制信號(hào);
控制信號(hào)選擇單元根據(jù)所述流水線控制請(qǐng)求和指令標(biāo)記信號(hào)確定每一流水級(jí)當(dāng)前執(zhí)行的指令為尾部指令還是中斷服務(wù)程序指令,選擇由第一控制信號(hào)控制還是由第二控制信號(hào)控制。
當(dāng)然,上述說(shuō)明并非是對(duì)本發(fā)明的限制,本發(fā)明也并不僅限于上述舉例,本技術(shù)領(lǐng)域的普通技術(shù)人員在本發(fā)明的實(shí)質(zhì)范圍內(nèi)所做出的變化、改型、添加或替換,也應(yīng)屬于本發(fā)明的保護(hù)范圍。