程序中斷是指計算機(jī)執(zhí)行現(xiàn)行程序的過程中,出現(xiàn)某些繼續(xù)處理的異常情況和特殊請求,CPU暫時中止現(xiàn)行程序,而轉(zhuǎn)去執(zhí)行對隨機(jī)發(fā)生的更緊迫的事件進(jìn)行處理,在處理完畢后,CPU講自動返回原來的程序繼續(xù)執(zhí)行。
程序中斷分為內(nèi)中斷和外中斷,向量中斷和非向量中斷,單重中斷和多重中斷等多種類型。
中斷全過程是指從中斷源發(fā)出請求開始,cpu相應(yīng)這個請求,現(xiàn)行程序被中斷,轉(zhuǎn)至中斷服務(wù)程序,直至中斷服務(wù)程序執(zhí)行完畢,cpu在返回原來的程序繼續(xù)執(zhí)行的整個過程。可以分為五個階段:中斷請求,中斷判優(yōu),中斷相應(yīng),中斷處理,中斷返回。
Cpu響應(yīng)中斷,要滿足3個條件:1,中斷源有中斷請求;2,cpu允許接收中斷;3,一條指令執(zhí)行完畢;第一個條件是顯而易見的,無需多說,而第2,3個條件需要仔細(xì)討論。Cpu內(nèi)部有一個中斷允許觸發(fā)器,以此來確定現(xiàn)行程序是否允許被中斷;當(dāng)中斷允許觸發(fā)器=1時,cpu處于開放狀態(tài),允許中斷;當(dāng)中斷允許觸發(fā)器=0時,cpu處于關(guān)閉狀態(tài),禁止中斷。中斷允許觸發(fā)器由開中斷指令來置位,有關(guān)中斷指令或者硬件使其復(fù)位。Cpu響應(yīng)中斷的時間是在一條指令執(zhí)行完畢后,且沒有優(yōu)先權(quán)更高的請求(如電源失效或者DMA請求),隨后cpu進(jìn)入中斷周期。之所以必須要等到一條指令指令執(zhí)行完畢,是因為相應(yīng)中斷,意味著出理解講從一個程序切換到另外一個程序,而程序是一條條的指令組成的,如果不在指令執(zhí)行執(zhí)行完畢時切換,中斷返回時將無法保證原來的程序能夠繼續(xù)執(zhí)行。
為使切換前后的程序都能夠正確執(zhí)行,在運行響應(yīng)階段需要將cpu的關(guān)鍵性硬件狀態(tài)保存起來。這些狀態(tài)有兩類,一類是程序的程序狀態(tài)字,他們保存著程序的執(zhí)行的現(xiàn)形值,稱為中斷現(xiàn)場。Psw和pc的內(nèi)容必須在程序被終止時,不久加以很好的保存,以便恢復(fù)時程序能夠正確第沿著斷點繼續(xù)執(zhí)行,否則pc和psw的內(nèi)容在中斷相應(yīng)時,將被中斷服務(wù)程序的入口地址和中斷服務(wù)的程序的狀態(tài)字沖掉,所以往往在中斷周期中由硬件來完成他們的保存。而工作寄存器在中斷相應(yīng)時不會被破壞,因此可以在中斷服務(wù)程序里有軟件把他轉(zhuǎn)移到安全的地方。
在中斷周期,cpu執(zhí)行一條中斷隱指令,中斷隱指令指有硬件在中斷響應(yīng)時產(chǎn)生,并不是指令系統(tǒng)的一條真正的指令,本身沒有操作碼,也不會在程序中出現(xiàn),中斷隱指令主要完成三個操作:1,保存斷點;2,關(guān)閉中斷允許觸發(fā)器;3,找出中斷服務(wù)程序的入口地址。
在中斷周期中必須關(guān)閉中斷允許觸發(fā)器大的原因是,保證用軟件來保護(hù)現(xiàn)行的程序的中斷現(xiàn)場期間不允許被新的、更高級的中斷請求所打斷。并不是所有的計算機(jī)都一定在中斷隱指令中由硬件關(guān)閉中斷允許觸發(fā)器,也有些計算機(jī)的這一操作是在中斷服務(wù)程序的保護(hù)現(xiàn)場之前由關(guān)中斷因指令來實現(xiàn)的。
中斷處理就是執(zhí)行中斷服務(wù)程序,這是中斷系統(tǒng)的核心。
中斷服務(wù)程序的流程基本由三個部分組成,第一部分是準(zhǔn)備部分;基本功能是保護(hù)現(xiàn)場,對與非向量中斷方式,則需要確定中斷源,最后開中斷,允許更高級的中斷請求打斷低級的中斷服務(wù)程序;對于第二部分,中斷處理,即真正執(zhí)行具體的為某個中斷源服務(wù)的中斷服務(wù)程序,第三部分是,結(jié)尾部分,首先要關(guān)中斷,以防止在恢復(fù)現(xiàn)場過程中,被新的中斷請求中打斷,接著恢復(fù)現(xiàn)場,然后開放中斷,以便返回原來的程序后可以響應(yīng)其他的中斷請求。中斷服務(wù)程序的最后一條指令一定是中斷返回指令。