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